【问题标题】:In Delphi connecting to a database in runtimeDelphi 在运行时连接到数据库
【发布时间】:2016-10-06 11:45:41
【问题描述】:

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

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;

我该怎么办?

【问题讨论】:

  • 你在IDE中打开连接了吗?如果是这样,请在运行程序之前在 IDE 中将其设置为 active = false。
  • 我不知道那个路径变量是干什么用的,但是如果你打算将它用作可写数据的路径,那就是等待发生的意外。不要假设您可以写入应用所在的文件夹。

标签: delphi


【解决方案1】:

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

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;

【讨论】:

  • 路径确实需要双引号,我过​​去遇到过这样的问题。
猜你喜欢
  • 2022-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多