首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

利用ADOConection向Access数据库中添加初测的信息如何操作不了呢

2013-09-12 
利用ADOConection向Access数据库中添加初测的信息怎么操作不了呢?void __fastcall TLogonForm::BitBtnSubm

利用ADOConection向Access数据库中添加初测的信息怎么操作不了呢?
利用ADOConection向Access数据库中添加初测的信息如何操作不了呢
void __fastcall TLogonForm::BitBtnSubmitClick(TObject *Sender)
{
AnsiString m_Name,m_Psd1,m_Psd2;
AnsiString sqlStr = "";
if(EditUserName->Text==""||EditPsd1->Text==""||EditPsd2->Text=="")
{
   MessageBox(NULL,"用户名和密码不能为空!","ERROR",MB_OK);
}
if(EditPsd1->Text!=EditPsd2->Text)
{
MessageBox(NULL,"前后的密码不一致!","ERROR",MB_OK);
}

ADOConnection1->Connected = true;
sqlStr = "SELECT * FROM Login WHERE Uname='";
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(sqlStr);
ADOQuery1->Open();
if(ADOQuery1->RecordCount>=1)
{
   ADOConnection1->Connected = false;
   MessageBox(NULL,"该信息在canyin.mdb的Login数据库中已存在!","ERROR",MB_OK);
}
else
{
           m_Name=EditUserName->Text;
   m_Psd1=EditPsd1->Text;
   m_Psd2=EditPsd2->Text;
   //向canyin.mdb的Login 中添加注册信息
   sqlStr="insert into Login(Uname,Upasswd,power)values('"+m_Name+"','"+m_Psd1+"',0)";
   MessageBox(NULL,"注册成功","Message",MB_OK);
}
}
//---------------------------------------

void __fastcall TLogonForm::FormCreate(TObject *Sender)
{
   ADOConnection1->ConnectionString ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\lenovo\Desktop\大型餐饮管理系统\canyin.mdb;Persist Security Info=False";
} 数据库 access C++builder2010
[解决办法]
楼主判断一个名字为空的记录是否存在来作为用户是否可以注册的依据?何故如此做法?应该判断用户名是否存在来作为用户是否可以注册的依据

判断是否为空要这样:(Uname IS NULL OR Uname ='')
在某些数据库的某些查询语句中括号也有用
[解决办法]
厲害! 妖哥慧眼明察! 很多人都忽略了反斜線轉譯字符的必要性~

還有得再確認 ADOQuery1 的 Connection 是否有設定為 ADOConnection1
以安全為考量...千萬不可暴露 canyin.mdb 這樣的實際數據檔名訊息


其實戶名已重複的檢查可由系統代勞...只要在設置數據庫結構時指定 Uname 為不可重複性既可~
另外使用 Windows API 裡的 MessageBOX 這裡建議指定窗口句柄 hWnd...否則容易因操作不當跑至主窗口後方...在 C++ Builder 通常有兩種用法...如下 :

::MessageBox(Handle ,"注册成功", "Message", MB_OK);
Application->MessageBox("注册成功", "Message", MB_OK);

您要的應該是下面的代碼 :
// 向 canyin.mdb 的 Login 中添加注册信息
sqlStr = TEXT("INSERT INTO Login(Uname,Upasswd,power) VALUES('") +
EditUserName->Text + TEXT("','") + EditPsd1->Text + TEXT("',0)");
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(sqlStr);
ADOQuery1->ExecSQL();

[解决办法]
每次看到這樣的註冊或登錄程序都讓偶嚇出一身冷汗...因為此作法容易被駭客侵入系統竊取數據的機率百分百...為甚麼呢? 因為只要有心人從通訊裡截取或從程序檔裡找到 SQL 碼...名稱密碼一次就給全洩了底...這樣的方式多出自於書本上的程序教學範例...只適合當作練習用單機使用...完全沒有安全性可言...若是比較大一點的數據管理規模...在實務上還是建議採用後端資數據庫伺服器作維護...並以數據庫伺服器的用戶帳號作權限管理比較有保障! 因為使用權限之用戶名與密碼的防護機制不該由 Client 端來判別...應該由 Server 端來把關!

還是將您的代碼稍作修飾給您參考 :

void __fastcall TLogonForm::FormActivate(TObject *Sender)
{
EditUserName->Text = TEXT("");
EditPsd1->Text = TEXT("");
EditPsd2->Text = TEXT("");
EditUserName->SetFocus();
}
//---------------------------------------
void __fastcall TLogonForm::Button2Click(TObject *Sender)
{
//  為了相容新舊版 C++ Builder...這裡採用 String 與 TEXT("")
String sqlStr;
if (EditUserName->Text.IsEmpty() 
[解决办法]
 EditPsd1->Text.IsEmpty() 
[解决办法]

EditPsd2->Text.IsEmpty()) {
EditUserName->SetFocus();
throw Exception(TEXT("用户名和密码不能为空!"));
}
if (EditPsd1->Text != EditPsd2->Text) {
EditPsd1->Text = TEXT("");
EditPsd2->Text = TEXT("");
EditPsd1->SetFocus();
throw Exception(TEXT("前后的密码不一致!"));
}
sqlStr = TEXT("SELECT * FROM Login WHERE Uname = '") + EditUserName->Text +
TEXT("'");
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(sqlStr);
ADOQuery1->Open();
if (ADOQuery1->RecordCount >= 1) {
EditUserName->SetFocus();
throw Exception(TEXT("該用戶名已重複,請重新指定!"));


}
else {
// 向 canyin.mdb 的 Login 中添加注册信息
sqlStr = TEXT("INSERT INTO Login(Uname,Upasswd,power) VALUES('") +
EditUserName->Text + TEXT("','") + EditPsd1->Text + TEXT("',0)");
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(sqlStr);
ADOQuery1->ExecSQL();
Application->MessageBox(TEXT("注册成功"), Application->Title.c_str(),
MB_OK);
}
// 接著為後續處理......
}


[解决办法]
连接 Access 2007 的操作方法

            //无密码的连接字符串

            string conStr = "Provider=Microsoft.Ace.OleDb.12.0;";

            conStr += @"Data Source=E:\数据库\XiaoZhen.accdb;";

            conStr += "Persist Security Info=False;";

 

            //有密码的连接字符串

            string conStr = "Provider=Microsoft.Ace.OleDb.12.0;";

            conStr += @"Data Source=E:\数据库\XiaoZhen.accdb;";

            conStr += "Jet OleDb:DataBase Password='829321';";

 

            连接 Access 2003 的操作方法

 

            //无密码的连接字符串

            string conStr = "Provider=Microsoft.Jet.OleDb.4.0;";

            conStr += @"Data Source=E:\数据库\XiaoZhen.mdb;";

            conStr += "Persist Security Info=False;";

 

            //有密码的连接字符串

            string conStr = "Provider=Microsoft.Jet.OleDb.4.0;";

            conStr += @"Data Source=E:\数据库\XiaoZhen.mdb;";

            conStr += "Jet OleDb:DataBase Password='829321';";


热点排行