利用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();
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);
}
// 接著為後續處理......
}
//无密码的连接字符串
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';";