Delphi中怎么和Access数据库连接?(100分)

  • 主题发起人 主题发起人 mnmn
  • 开始时间 开始时间
M

mnmn

Unregistered / Unconfirmed
GUEST, unregistred user!
我建了access数据库在d:/lib/表1.mdb,现在在delphi中怎么把table,query和这个
数据库连接起来?
1.不想用ado,用bde连接,是不是要先用odbc建立数据源?
2.我直接用bde administractor 建立的aliase,设置
type:MSACCESS
databasename: d:/lib/表1.mdb
然后在delphi中用table,可是在选择tablename的时候要输入用户名和密码,我没有
定义密码就打不开了.
3.不用bde administractor 建立的aliase,直接在delphi中设置
table.databasename= d:/lib/表1.mdb,还是不行.

到底应该怎样连接?

 
用DATABASE控件,设置属性DRIVERNAME为MSACCESS,DATABASENAME属性,KEEPCONNECT为FALSE
if OpenDialog1.Execute then
begin
OpenDialog1.InitialDir := ExtractFilePath(OpenDialog1.FileName);
WritePrivateProfileString('Option','Path',PChar(OpenDialog1.InitialDir),PChar(ChangeFileExt(ParamStr(0),'.INI')));
Database.Caption := OpenDialog1.FileName;
Database1.Close;
Database1.Params.Clear;
Database1.Params.Add('DATABASE NAME=' + lDatabase.Caption);
Database1.Params.Add('OPEN MODE=READ ONLY');;
Try
Database1.Open;
except
MessageBox(Handle,'数据库打开失败,请检查文件是否正确或可读写。','错误提示',MB_OK+MB_ICONERROR);
Exit;
end;控件,设置属性DRIVERNAME为MSACCESS,DATABASENAME属性,KEEPCONNECT为FALSE
 
使用ACCESS数据库最好用ADO控件,你放一个AdoConnection到表单上.照着下面的法子连接.
procedure TDMData.DataModuleCreate(Sender: TObject);
begin
AdoConn.Connected:=False;
AdoConn.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=admin;Data Source=';
AdoConn.ConnectionString:=AdoConn.ConnectionString+'d:/company.mdb')+';';
AdoConn.ConnectionString:=AdoConn.ConnectionString+'Mode=Share Deny None;Extended Properties="";Locale Identifier=1028;Jet OLEDB:System database="";';
AdoConn.ConnectionString:=AdoConn.ConnectionString+'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;';
AdoConn.ConnectionString:=AdoConn.ConnectionString+'Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;';
AdoConn.ConnectionString:=AdoConn.ConnectionString+'Jet OLEDB:Don''t Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;';
AdoConn.Connected:=True;
end;
 
用Access数据库之前必须用odbc配数据库。完成后在SQL Explorer就可以打开数据库了。
然后通过database 连接到程序中,用table,query就可以进行应用了。
 
ado连接ACCESS数据库是比较好的。
如果不想出现口令询问窗口,可以将LOGINPROMPT设为FALSE。
 
还是推荐用ado控件,odbc我一直感觉不是太实用.bde连接access数据库..我从来没有成功过
 
1、在BDE里创建一个Access的数据库aaa,路径指向你的d:/lib/

2、在工程里添加database , querry , dbgrid , datasource , button
database.databasename := aaa
query.databasename := aaa

3、在button的click事件写:SQL语句咯。。你应该知道吧。。。

 
用TDatabase控件维护数据连接,创建程序内部的数据别名,Table的Databasename使用该数据别名
 
配置一个系统DSN指向数据库
然后用TQUERY或TTABLE选择数据库别名就行了
 
可以将数据库连接参数ODBC DSN=msac_infodb放到注册表中,再通过ODBC配置Access数据库
时,选择'Microsoft Access Driver (*.mdb)'驱动程序。数据源名称设为注册表中DBParams
参数中ODBC DSN的值’msac_infodb’,再选择access数据库;
function GetDBParams():String;
var
Reg: TRegistry;
Value:String;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if not Reg.OpenKey('/Software/RsrMgmt',false) then
begin
value:='-1'; //子目录不存在
end
else
begin
if Reg.ReadString('DBParams')= '' then
value:='0' //子目录存在,值不存在
else
begin
value:=Reg.ReadString('DBParams');
end
end;
GetDBParams:=value; // 子目录存在,值存在,返回值
finally
Reg.Closekey;
Reg.Free;
end;
end;
function SetRegKey(keyname:string;keyvalue:string):string;
var
Reg: TRegistry;
Value:String;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if not Reg.OpenKey('/Software/RsrMgmt',false) then
begin
value:='-1'; //子目录不存在
end
else
begin
if Reg.ReadString(keyname)<> '' then
value:='0' //子目录存在,值已经存在
else
begin
Reg.WriteString(keyname, keyvalue);
value:='1'
end
end;
SetRegKey:=value; // 子目录存在,值存在,返回值
finally
Reg.Closekey;
Reg.Free;
end;
end;

function OpenAccessdb():boolean;
var
sParams: TStrings;
iParamstr: string;
begin
if PubDataModule.SysinfoDatabase.Connected=true then
OpenAccessdb:=True
else
begin
sParams:=TStringList.Create;
try
sParams.Clear;
//sParams.LoadFromFile('param.txt');
iParamstr:=GetDBParams;
if iParamstr='-1' then
application.MessageBox('普通信息'+':'+chr(10)+chr(10)+'注册表中/Software/RsrMgmt键不存在!','错误信息', mb_applmodal+mb_iconerror+mb_ok+mb_defbutton1)
else
begin
if iParamstr='0' then
begin
if (SetRegkey('DBParams','ODBC DSN=msac_infodb'))='1' then
application.MessageBox('普通信息'+':'+chr(10)+chr(10)+'数据库参数值设置成功!请参考参数值配置ODBC数据源!','提示信息', mb_applmodal+mb_iconinformation+mb_ok+mb_defbutton1);
iParamstr:=GetDBParams;
end;
sParams.Add(iParamstr);
with PubDataModule.SysinfoDatabase do
begin
try
begin
DataBaseName:='Localdb';
//DriverName:='Driver do Microsoft Access (*.mdb)';
DriverName:='Microsoft Access Driver (*.mdb)';
KeepConnection:= True;
LoginPrompt:= false;
Params.Clear;
Params:=sParams;
Connected:= True;
OpenAccessdb:=True;
end;
except
OpenAccessdb:=false;
end;
end;
end;
finally
sParams.Free;
end;
end;
end;
 
你的第二种方法,在设置数据库属性的时候把loginprompt这个选择前的勾去掉,一切ok!
 
我还使用了ado
 
多人接受答案了。
 
用ado的控件简单一些,基本上和使用bde的一样。
你用的是access我强烈建议你使用ado
 
你只用odbc 就可以了,另外你在用database的时候再用一个session组件。
在database中alias设置你在odbc中设的数据源名称,
loginprompt设为false就可以了,
 
后退
顶部