access+ado+delphi? 大家好!我在delphi用ADO连接access,当access数据库加密后,设置连接时总是出现错误,请高手指点一下……小弟不胜感激!谢谢…… 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在你的connection连接string里加入username and password或者open('username,password') 我的程序是这样的: with AdoConnection1 do ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Password="123456";' + 'User ID=Admin;Data Source=' + DbfPath + '\data.mdb;' + 'Mode=Share Deny None;Extended Properties="";' + 'Locale Identifier=2052;' + 'Jet OLEDB:System database="";' + 'Jet OLEDB:Registry Path="";' + 'Jet OLEDB:Database Password="";' + 'Jet OLEDB:Engine Type=5;' + 'Jet OLEDB:Database Locking Mode=1;' + 'Jet OLEDB:Global Partial Bulk Ops=2;' + 'Jet OLEDB:Global Bulk Transactions=1;' + 'Jet OLEDB:New Database Password="";' + 'Jet OLEDB:Create System Database=False;' + 'Jet OLEDB:Encrypt Database=False;' + 'Jet OLEDB:Don''t Copy Locale on Compact=False;' + 'Jet OLEDB:Compact Without Replica Repair=False;' + 'Jet OLEDB:SFP=False';是不是几个PASSWORD的地方都要加进去密码?要不要引号?其实你用Access创建的*.mdb 还不如用delphi自带的数据库Database Desktop创建的 *.dbf文件,同样的空数据库,前者可能为500K-1M大小,后者才10K多,很适合软件发布 http://expert.csdn.net/Expert/topic/2643/2643120.xml?temp=.758999 ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+ ExtractFilePath('Main.exe')+'ShuiWu.mdb;Persist Security Info=False'; ADOConnection1.ConnectionTimeout := 10; ADOConnection1.Connected := true; var str:string;begin str:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+extractfilepath(application.exename)+'LabData.mdb;Persist Security Info=False;Jet OLEDB:Database Password=123456'; adoconnection1.ConnectionString:=str; adoconnection1.Connected:=TRUE;end; S_MM:='newspace0411'; //aaa.mdb password try S_ExePath:=ExtractFilePath(Application.ExeName);//exe path S_FilePath:=S_ExePath+'aaa.mdb'; //aaa.mdb path S_Constr:='Provider=Microsoft.Jet.OLEDB.4.0;'+ 'User ID=Admin;Data Source='+S_FilePath+';'+ 'Mode=Share Deny None;Extended Properties="";'+ 'Locale Identifier=2052;Persist Security Info=False;'+ 'Jet OLEDB:System database="";Jet OLEDB:Registry Path="";'+ 'Jet OLEDB:Database Password='+S_MM+';'+ 'Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=0;'+ 'Jet OLEDB:Global Partial Bulk Ops=2;'+ 'Jet OLEDB:Global Bulk Transactions=1;'+ 'Jet OLEDB:New Database Password="";'+ 'Jet OLEDB:Create System Database=False;'+ 'Jet OLEDB:Encrypt Database=False;'+ 'Jet OLEDB:Don''t Copy Locale on Compact=False;'+ 'Jet OLEDB:Compact Without Replica Repair=False;'+ 'Jet OLEDB:SFP=False'; if DM1.ADOConn1.Connected = True then DM1.ADOConn1.Connected:=False; DM1.ADOConn1.ConnectionString:=S_Constr; DM1.ADOConn1.Connected:=True; except Application.MessageBox('无法连接数据库!','错误',MB_OK+MB_ICONSTOP); Halt; end; //使用ADO控件集动态打开ACCESS数据库列程//本方法主要面向客户选择目标ACCESS数据库//取代弹出的ConnectionString的设置对话框//注:ADOTable和ADOQuery控件的连接字串不同//著名关心CSDN结贴率爱国人士-实用库Tip No 1 - 2003-9-25function FileName_DataBasePassWord(FileName:string; DataBasePassWord:string=''):string;beginFileName_DataBasePassWord:='Provider=Microsoft.Jet.OLEDB.4.0;'+ 'User ID=Admin;Data Source='+ form1.OpenDialog1.FileName+ //数据库文件路径 ';Mode=Share Deny None;Extended Properties="";'+ 'Jet OLEDB:System database="";'+ 'Jet OLEDB:Registry Path="";'+ 'Jet OLEDB:Database Password='+ DataBasePassWord+ //数据库密码 ';Jet OLEDB:Engine Type=5;'+ 'Jet OLEDB:Database Locking Mode=1;'+ 'Jet OLEDB:Global Partial Bulk Ops=2;'+ 'Jet OLEDB:Global Bulk Transactions=1;'+ 'Jet OLEDB:New Database Password="";'+ 'Jet OLEDB:Create System Database=False;'+ 'Jet OLEDB:Encrypt Database=False;'+ 'Jet OLEDB:Don''t Copy Locale on Compact=False;'+ 'Jet OLEDB:Compact Without Replica Repair=False;'+ 'Jet OLEDB:SFP=False';end;procedure TForm1.DynamicOpenAdoAccess_BtnClick(Sender: TObject);begin form1.OpenDialog1.Filter:='Text files (*.mdb)|*.MDB'; form1.OpenDialog1.DefaultExt:='MDB'; form1.OpenDialog1.InitialDir:=application.GetNamePath; form1.OpenDialog1.Title:='指定Access数据库Mdb文件的位置'; if form1.OpenDialog1.Execute then begin form1.ADOConnection1.LoginPrompt:=false; //带密码数据库的使用 //form1.ADOConnection1.ConnectionString:=FileName_DataBasePassWord(form1.OpenDialog1.FileName,'ghyghost'); //不带密码数据的使用 form1.ADOConnection1.ConnectionString:=FileName_DataBasePassWord(form1.OpenDialog1.FileName); form1.ADOConnection1.Open; form1.ADOQuery1.open; //ADOQuery1's SQL Properties is 'select * from [tablename]' end;end;//﹏﹏﹏﹏﹏﹏﹏﹏﹏﹏﹏﹏﹏﹏﹏﹏//天天蹬三轮-虽然很累-但很充实//﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋笔者近日在写ADO连接带密码的ACCESS数据库时,当connected:=true;时,总是出现密码不对的对话框,最终在研究了TADOConnection.ConnectionString的内容创建过程时得到灵感,现与大家分享,本方法不需要添加其它的控件,就可进行连接,减少EXE文件大小。 1,新建Project。 2,在FORM中放入ADOConnection,ADOQuery,DataSource,Datagrid控件。 3,双击ADOConnection控件,然后点击Build...按钮,在“提供者”页中选择“Microsoft Jet 4.0 OLE DB Provider”,然后点击“下一步”按钮,在“连接”页中选择要连接的Access数据库的路径和数据库的文件名,这时如果点“测试连接”按钮时,出现“初始化提供者时发生错误,测试连接失败,密码无效”的错误提示。 4,这时点“所有”页,然后双击“Jet OLEDB:Database Password”,出现对话框,添入密码后,选择“连接”页中的“测试连接”按钮,出现“测试连接成功”的对话框。把ADOConnection控件的LoginPromtp设为false. 5,设置连接完成。 一个简单的方法,在使用adoconnection控件中,设置连接字符串,设置完毕后,(选择Microsoft Jet OLEDB 4.0 Provider)在“所有”的page页面中,有一项(Jet OLEDB:Database Password),在里面写入密码就可以了。 楼上的只要是Access数据库有密码,全部不能连接成功。所以我建议还是用ODBC连接,可以动态地配置ODBC 谁说连不成,只要在Jet OLEDB:Database Password中写入密码就行了 + 'Jet OLEDB:Database Password="密码";'就行了,这里的是库的密码。其实你可以在设计期中加入密码,再看看生成的连接串就可以知道各段的意思了。 1,新建Project。 2,在FORM中放入ADOConnection,ADOQuery,DataSource,Datagrid控件。 3,双击ADOConnection控件,然后点击Build...按钮,在“提供者”页中选择“Microsoft Jet 4.0 OLE DB Provider”,然后点击“下一步”按钮,在“连接”页中选择要连接的Access数据库的路径和数据库的文件名,这时如果点“测试连接”按钮时,出现“初始化提供者时发生错误,测试连接失败,密码无效”的错误提示。 4,这时点“所有”页,然后双击“Jet OLEDB:Database Password”,出现对话框,添入密码后,选择“连接”页中的“测试连接”按钮,出现“测试连接成功”的对话框。把ADOConnection控件的LoginPromtp设为false. 5,设置连接完成。 ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+ ExtractFilePath('Main.exe')+'ShuiWu.mdb;Persist Security Info=False'; ADOConnection1.ConnectionTimeout := 10; ADOConnection1.Connected := true;一个简单的方法,在使用adoconnection控件中,设置连接字符串,设置完毕后,(选择Microsoft Jet OLEDB 4.0 Provider)在“所有”的page页面中,有一项(Jet OLEDB:Database Password),在里面写入密码就可以了。 dxDockPanel自动隐藏问题 如何将Image中的图片按照指定的尺寸打印出来 求SQL语句 如何把datetimepicker中的年份定在2005年?还有如果用户输错,如何判断? 16进制转换出错EConvertError,请教 动态创建若干个timage,如何再动态指定每一个一个响应的事件? 问个简单的问题:在winxp/delphi7下如何实现用enter代替tab功能? 我 DELPHI5中复制出来的中文贴到WORD中为什么都是乱码,急!在线等待! 谁能告诉我netshareadd这个函数的具体用法! 怎样检测声卡? 问个二进制的小问题! 论坛的大虾新年好!小第想结交朋友.
with AdoConnection1 do
ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Password="123456";'
+ 'User ID=Admin;Data Source='
+ DbfPath + '\data.mdb;'
+ 'Mode=Share Deny None;Extended Properties="";'
+ 'Locale Identifier=2052;'
+ 'Jet OLEDB:System database="";'
+ 'Jet OLEDB:Registry Path="";'
+ 'Jet OLEDB:Database Password="";'
+ 'Jet OLEDB:Engine Type=5;'
+ 'Jet OLEDB:Database Locking Mode=1;'
+ 'Jet OLEDB:Global Partial Bulk Ops=2;'
+ 'Jet OLEDB:Global Bulk Transactions=1;'
+ 'Jet OLEDB:New Database Password="";'
+ 'Jet OLEDB:Create System Database=False;'
+ 'Jet OLEDB:Encrypt Database=False;'
+ 'Jet OLEDB:Don''t Copy Locale on Compact=False;'
+ 'Jet OLEDB:Compact Without Replica Repair=False;'
+ 'Jet OLEDB:SFP=False';
是不是几个PASSWORD的地方都要加进去密码?要不要引号?其实你用Access创建的*.mdb 还不如用delphi自带的数据库Database Desktop创建的 *.dbf文件,同样的空数据库,前者可能为500K-1M大小,后者才10K多,很适合软件发布
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+
ExtractFilePath('Main.exe')+'ShuiWu.mdb;Persist Security Info=False'; ADOConnection1.ConnectionTimeout := 10; ADOConnection1.Connected := true;
begin
str:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+extractfilepath(application.exename)+'LabData.mdb;Persist Security Info=False;Jet OLEDB:Database Password=123456';
adoconnection1.ConnectionString:=str;
adoconnection1.Connected:=TRUE;
end;
try
S_ExePath:=ExtractFilePath(Application.ExeName);//exe path
S_FilePath:=S_ExePath+'aaa.mdb'; //aaa.mdb path
S_Constr:='Provider=Microsoft.Jet.OLEDB.4.0;'+
'User ID=Admin;Data Source='+S_FilePath+';'+
'Mode=Share Deny None;Extended Properties="";'+
'Locale Identifier=2052;Persist Security Info=False;'+
'Jet OLEDB:System database="";Jet OLEDB:Registry Path="";'+
'Jet OLEDB:Database Password='+S_MM+';'+
'Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=0;'+
'Jet OLEDB:Global Partial Bulk Ops=2;'+
'Jet OLEDB:Global Bulk Transactions=1;'+
'Jet OLEDB:New Database Password="";'+
'Jet OLEDB:Create System Database=False;'+
'Jet OLEDB:Encrypt Database=False;'+
'Jet OLEDB:Don''t Copy Locale on Compact=False;'+
'Jet OLEDB:Compact Without Replica Repair=False;'+
'Jet OLEDB:SFP=False';
if DM1.ADOConn1.Connected = True then DM1.ADOConn1.Connected:=False;
DM1.ADOConn1.ConnectionString:=S_Constr;
DM1.ADOConn1.Connected:=True;
except
Application.MessageBox('无法连接数据库!','错误',MB_OK+MB_ICONSTOP);
Halt;
end;
//本方法主要面向客户选择目标ACCESS数据库
//取代弹出的ConnectionString的设置对话框
//注:ADOTable和ADOQuery控件的连接字串不同
//著名关心CSDN结贴率爱国人士-实用库Tip No 1 - 2003-9-25
function FileName_DataBasePassWord(FileName:string; DataBasePassWord:string=''):string;
begin
FileName_DataBasePassWord:='Provider=Microsoft.Jet.OLEDB.4.0;'+
'User ID=Admin;Data Source='+
form1.OpenDialog1.FileName+ //数据库文件路径
';Mode=Share Deny None;Extended Properties="";'+
'Jet OLEDB:System database="";'+
'Jet OLEDB:Registry Path="";'+
'Jet OLEDB:Database Password='+
DataBasePassWord+ //数据库密码
';Jet OLEDB:Engine Type=5;'+
'Jet OLEDB:Database Locking Mode=1;'+
'Jet OLEDB:Global Partial Bulk Ops=2;'+
'Jet OLEDB:Global Bulk Transactions=1;'+
'Jet OLEDB:New Database Password="";'+
'Jet OLEDB:Create System Database=False;'+
'Jet OLEDB:Encrypt Database=False;'+
'Jet OLEDB:Don''t Copy Locale on Compact=False;'+
'Jet OLEDB:Compact Without Replica Repair=False;'+
'Jet OLEDB:SFP=False';
end;procedure TForm1.DynamicOpenAdoAccess_BtnClick(Sender: TObject);
begin
form1.OpenDialog1.Filter:='Text files (*.mdb)|*.MDB';
form1.OpenDialog1.DefaultExt:='MDB';
form1.OpenDialog1.InitialDir:=application.GetNamePath;
form1.OpenDialog1.Title:='指定Access数据库Mdb文件的位置';
if form1.OpenDialog1.Execute then
begin
form1.ADOConnection1.LoginPrompt:=false;
//带密码数据库的使用
//form1.ADOConnection1.ConnectionString:=FileName_DataBasePassWord(form1.OpenDialog1.FileName,'ghyghost');
//不带密码数据的使用
form1.ADOConnection1.ConnectionString:=FileName_DataBasePassWord(form1.OpenDialog1.FileName);
form1.ADOConnection1.Open;
form1.ADOQuery1.open; //ADOQuery1's SQL Properties is 'select * from [tablename]'
end;
end;//﹏﹏﹏﹏﹏﹏﹏﹏﹏﹏﹏﹏﹏﹏﹏﹏
//天天蹬三轮-虽然很累-但很充实
//﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋笔者近日在写ADO连接带密码的ACCESS数据库时,当connected:=true;时,总是出现密码不对的对话框,最终在研究了TADOConnection.ConnectionString的内容创建过程时得到灵感,现与大家分享,本方法不需要添加其它的控件,就可进行连接,减少EXE文件大小。
1,新建Project。
2,在FORM中放入ADOConnection,ADOQuery,DataSource,Datagrid控件。
3,双击ADOConnection控件,然后点击Build...按钮,在“提供者”页中选择“Microsoft Jet 4.0 OLE DB Provider”,然后点击“下一步”按钮,在“连接”页中选择要连接的Access数据库的路径和数据库的文件名,这时如果点“测试连接”按钮时,出现“初始化提供者时发生错误,测试连接失败,密码无效”的错误提示。
4,这时点“所有”页,然后双击“Jet OLEDB:Database Password”,出现对话框,添入密码后,选择“连接”页中的“测试连接”按钮,出现“测试连接成功”的对话框。把ADOConnection控件的LoginPromtp设为false.
5,设置连接完成。
在“所有”的page页面中,有一项(Jet OLEDB:Database Password),在里面写入密码就可以了。
其实你可以在设计期中加入密码,再看看生成的连接串就可以知道各段的意思了。
2,在FORM中放入ADOConnection,ADOQuery,DataSource,Datagrid控件。
3,双击ADOConnection控件,然后点击Build...按钮,在“提供者”页中选择“Microsoft Jet 4.0 OLE DB
Provider”,然后点击“下一步”按钮,在“连接”页中选择要连接的Access数据库的路径和数据库的文件
名,这时如果点“测试连接”按钮时,出现“初始化提供者时发生错误,测试连接失败,密码无效”的错误提示。
4,这时点“所有”页,然后双击“Jet OLEDB:Database Password”,出现对话框,添入密码后,选择“连
接”页中的“测试连接”按钮,出现“测试连接成功”的对话框。把ADOConnection控件的LoginPromtp设为false.
5,设置连接完成。
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+
ExtractFilePath('Main.exe')+'ShuiWu.mdb;Persist Security Info=False'; ADOConnection1.ConnectionTimeout := 10; ADOConnection1.Connected := true;一个简单的方法,在使用adoconnection控件中,设置连接字符串,设置完毕后,(选择Microsoft Jet OLEDB 4.0 Provider)
在“所有”的page页面中,有一项(Jet OLEDB:Database Password),在里面写入密码就可以了。