我正在忙于一个项目,其中数据库必须以这样的方式嵌入:如果它应该被复制到任何计算机,你可以运行它而无需再次建立与数据库的连接。我试过这个:
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;
我该怎么办?
答案 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;