求教怎么用C++builder建一个简单的登录窗口?

永不疲惫的东 2013-04-24 12:09:53
连接的是SQL SERVER2000数据库, 添加完ADOConnection,ADOQuery,Datasource,DBgrid组件后具体该怎么做?代码是什么,哪位大神能告诉我,万分感激
...全文
1649 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
xjq2003 2013-05-03
  • 打赏
  • 举报
回复


void __fastcall TLoginFrm::LoginBitBtnClick(TObject *Sender)
{
  try
   {
	 String userid,passwd,SqlStr;
	 int level;
	 userid=Trim(UserIDEdt->Text);
	 passwd=Trim(PasswdEdt->Text);
	 SqlStr="select * from userTable where UserId='"+userid+"'";
	 SqlStr+="and Password='"+passwd+"'";
	 DataMod->TempQuery->Close();
	 DataMod->TempQuery->SQL->Clear();
	 DataMod->TempQuery->SQL->Add(SqlStr);
	 DataMod->TempQuery->Open();
	 if(DataMod->TempQuery->RecordCount>0)
	 {
		level=DataMod->TempQuery->FieldByName("level")->AsInteger;
		MainFrm->Login=true;
		MainFrm->N9->Enabled=true;
		MainFrm->ToolButton_Search->Enabled=true;
		if(level>1)
		{
			MainFrm->N17->Enabled=true;
			MainFrm->N18->Enabled=true;
			MainFrm->N19->Enabled=true;
		}


	   MainFrm->UserIDLbl->Caption=UserIDEdt->Text;
	   MainFrm->UserNameLbl->Caption= DataMod->TempQuery->FieldByName("UserName")->AsString;
	   MainFrm->VehOperator=UserIDEdt->Text;
	   MainFrm->VehOperator=MainFrm->UserIDLbl->Caption;
	   Close();
	 }
	 else
     	ShowMessage("没有该用户,\n或者密码错误!");
   }
   catch(...)
   {
	   //
   }
}
可以参考
紫日学C 2013-04-26
  • 打赏
  • 举报
回复
引用 21 楼 start8588 的回复:
引用 20 楼 wyp331993272 的回复:那在输入用户名控件添加一个事件不就行了,同用一个用户名去查找数据库,不就OK了 教學範例與實務運作畢竟不同啦~ 老兄您所提的是教程書籍一般的範例作法...在封閉的環境下使用還 Ok...比如公司內部使用的進銷存系統...若是系統外連至廣域網路其 SQL 語法容易被側錄而洩漏了關鍵數據庫...進而數據庫資料被攫取..……
好吧。。。。那就只有力求妖哥了
紫日学C 2013-04-25
  • 打赏
  • 举报
回复
妖哥,典型的SQL注入案例来授课?嘿嘿 啥意思
ccrun.com 2013-04-25
  • 打赏
  • 举报
回复
楼上的代码可以作为一个典型的SQL注入案例来授课。
紫日学C 2013-04-25
  • 打赏
  • 举报
回复

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        ADOConnection1->ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\wu\xe2work\temp.mdb;Persist Security Info=False";
        ADOConnection1->LoginPrompt = false;
        ADOQuery1->Connection = ADOConnection1;
        ADOQuery1->Close();
        ADOQuery1->SQL->Clear();
        //查询是否有输入的用户名
        String sql ="select * from temp where Login = ";
        sql+= "'"+EdName->Text+"'";
        ADOQuery1->SQL->Add(sql);
        ADOQuery1->Open();
        if(ADOQuery1->RecordCount)
        {
                if(ADOQuery1->FieldByName("pass")->AsString == EdPass->Text)
                {
                        ShowMessage("登入成功!");
                        return;
                }
                else
                {
                        ShowMessage("密码错误!");
                        return;
                }
        }
        else
        {
                ShowMessage("用户名不存在!");
                return;
        }
}
我想要拿分
星際訪客 2013-04-25
  • 打赏
  • 举报
回复
引用 20 楼 wyp331993272 的回复:
那在输入用户名控件添加一个事件不就行了,同用一个用户名去查找数据库,不就OK了
教學範例與實務運作畢竟不同啦~ 老兄您所提的是教程書籍一般的範例作法...在封閉的環境下使用還 Ok...比如公司內部使用的進銷存系統...若是系統外連至廣域網路其 SQL 語法容易被側錄而洩漏了關鍵數據庫...進而數據庫資料被攫取...... 在金融銀行乃至於軍事數據庫基於安全保密的防護...通常會在數據庫 Server 預先建立好多組 SQL 命令區塊...用戶端程序只需向 Server 指定命令(此命令指的是編號而非 SQL 命令)加上對應的參數後...Server 端便會依據命令回傳至用戶端結果...... 上述的作法在用戶端程序執行檔案與數據庫 Server 間的通訊完全沒有 SQL 的蹤跡...真正的 SQL 數據操作命令封裝在數據庫 Server 裡...這樣一來數據庫所有的操作完全與外界阻隔...駭客也就無從侵入...... 在此建議數據庫的系統設計還是嚴謹的好...不能投機取巧採取高級的作法...否則就像美國國防部機密資料被英國駭客所攫取...據說機密資料有關高端飛行器.UFO.外星人檔案等等......
紫日学C 2013-04-25
  • 打赏
  • 举报
回复
那在输入用户名控件添加一个事件不就行了,同用一个用户名去查找数据库,不就OK了
dfdscx 2013-04-25
  • 打赏
  • 举报
回复
现在竟然还有这么厚道的lz啊。问题简单分数高
cptang 2013-04-25
  • 打赏
  • 举报
回复
接分 呵呵呵。
星際訪客 2013-04-25
  • 打赏
  • 举报
回复
用戶端只提供輸入用戶名稱與密碼後再傳入伺服端由伺服程式判斷...結果在回覆用戶端......
星際訪客 2013-04-25
  • 打赏
  • 举报
回复
判斷用戶名與密碼是在伺服端(Server) 而非在用戶端(Client)
星際訪客 2013-04-25
  • 打赏
  • 举报
回复
引用 8 楼 gzliudan 的回复:
在select语句里比较,有些数据库是不区分大小写的。如果要严格区分登录名和密码的大小写,这点要注意。
別誤導了! SQL Server 本身就有帳號密碼機制無需另建資料庫表...判斷的與否也由 SQL Server 定奪~
星際訪客 2013-04-25
  • 打赏
  • 举报
回复
引用 15 楼 wyp331993272 的回复:
C/C++ code?12345678910111213141516171819202122232425262728293031void __fastcall TForm1::Button1Click(TObject *Sender){ ADOConnection1->ConnectionString="Provider=Microsoft.Jet.OLED……
此國王的新衣作法萬萬不可行啦~ 唉~ 感嘆教程書籍誤人子弟何其多~ 隨便下個 "select * from temp" 不就所有的用戶名與密碼全部露了餡曝了光嗎? 實際正確的作法應該先在 SQL Server 端建立所需的用戶成員...透過 ADOConnection 隨行的 Database Login 窗口輸入用戶名與密碼後與 SQL Server 連線登錄查核! 重點 : 用戶名與密碼登錄查核一定是在 Server 端...絕對不能放在 Client 端! 切記! 切記!
星際訪客 2013-04-25
  • 打赏
  • 举报
回复
不認為耶~ 應為缺乏資訊防護力!
Jonix 2013-04-24
  • 打赏
  • 举报
回复
人家送分的,小妖就不要和其他人抢了。。。
ccrun.com 2013-04-24
  • 打赏
  • 举报
回复
这么高的分数,这么简单的问题,不科学啊。 简单说:弄一个窗口,用户可以输入用户名和密码,还有个登录的按钮,点击了登录按钮以后,判断是否输入了用户名和密码,然后尝试连接数据库,打开指定的用户表,先获取输入的用户名相关的信息,如果不存在指定的用户,直接返回失败,如果存在这个用户,将密码字段取出,和用户输入的密码作匹配,相符则认为登录成功,否则认为失败,大概就是这么个流程。 当然,实际应用中,密码字段最好是加密或者用哈希值(md5)。
永不疲惫的东 2013-04-24
  • 打赏
  • 举报
回复
引用 8 楼 gzliudan 的回复:
在select语句里比较,有些数据库是不区分大小写的。如果要严格区分登录名和密码的大小写,这点要注意。
具体代码要怎么写?
gzliudan 2013-04-24
  • 打赏
  • 举报
回复
在select语句里比较,有些数据库是不区分大小写的。如果要严格区分登录名和密码的大小写,这点要注意。
Kanson 2013-04-24
  • 打赏
  • 举报
回复
引用 6 楼 u010434993 的回复:
引用 楼主 u010434993 的回复:连接的是SQL SERVER2000数据库, 添加完ADOConnection,ADOQuery,Datasource,DBgrid组件后具体该怎么做?代码是什么,哪位大神能告诉我,万分感激具体代码怎么写呢?能写给我看吗
那建议还是看点基础的东西 不然一头雾水
永不疲惫的东 2013-04-24
  • 打赏
  • 举报
回复
引用 楼主 u010434993 的回复:
连接的是SQL SERVER2000数据库, 添加完ADOConnection,ADOQuery,Datasource,DBgrid组件后具体该怎么做?代码是什么,哪位大神能告诉我,万分感激
具体代码怎么写呢?能写给我看吗
加载更多回复(3)

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧