在Delphi中连接到运行时的数据库

时间:2016-10-05 15:07:33

标签: delphi

我正在忙于一个项目,其中数据库必须以这样的方式嵌入:如果它应该被复制到任何计算机,你可以运行它而无需再次建立与数据库的连接。我试过这个:

path:=extractFilePath('MEDA_p.exe');
dmMEDA.conMeda.ConnectionString:='Provider=Microsoft.ACE.OLEDB.12.0; Data Source= '+path+'dbMEDA.accdb; Persist Security info=false';
dmMEDA.conMeda.Connected:=true;

但是不断出现“堆栈溢出”错误。或者,如果我这样做:

dmMeda.conMEDA.open;
path:=extractFilePath('MEDA_p.exe');
dmMEDA.conMeda.ConnectionString:='Provider=Microsoft.ACE.OLEDB.12.0; Data Source= '+path+'dbMEDA.accdb; Persist Security info=false';
dmMEDA.conMeda.Connected:=true;
dmMEDA.conMeda.close;

我得到'当对象打开时不允许操作'。

任何帮助?

更新

我已经尝试了一些建议,比如添加双引号并使用连接并将其设置为false然后设置为true,但是当我尝试使表(活动)为true时,我得到另一个“堆栈溢出错误”

dmMEDA.tbllogs.Active:=true;

我该怎么办?

1 个答案:

答案 0 :(得分:2)

第二个区块中您的事件序列错误。您需要关闭连接,进行更改,然后再次打开连接。

dmMeda.conMEDA.Connected := False;
path:=extractFilePath(Application.ExeName);
dmMEDA.conMeda.ConnectionString:='Provider=Microsoft.ACE.OLEDB.12.0; Data Source= '+path+'dbMEDA.accdb; Persist Security info=false';
dmMEDA.conMeda.Connected:=true;

请注意,如果应用程序的路径可以包含空格,您可能还需要用双引号括起来。

dmMeda.conMEDA.Connected := False;
path := extractFilePath(Application.ExeName);
dmMEDA.conMeda.ConnectionString := 'Provider=Microsoft.ACE.OLEDB.12.0; Data Source= "' + path + 'dbMEDA.accdb"; Persist Security info=false';
dmMEDA.conMeda.Connected := True;