读书人

利用ADOConection向Access数据库中添加

发布时间: 2013-09-12 22:07:04 作者: rapoo

利用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';";


读书人网 >C++ Builder

热点推荐