【发布时间】:2018-02-23 13:04:01
【问题描述】:
有一个类似的问题,但是用户使用的是更高级的东西,所以我很困惑。
这是异常爆发的过程。特别是在 ADOCon.connected 行。我正在为我的数据库使用 dbgo 的东西和 Microsoft 访问权限。
我得到的例外是:EAcessViolation。我想知道我犯了什么错误导致它以及如何解决它。我已经使用预先存在的数据库和新数据库运行了该过程。当有一个预先存在的数据库时,例外是第 19 行之一,没有它是第 14 行。正如用户所提到的,我已经阅读了文档,但是我仍然对如何解决错误感到困惑。错误肯定在这里,因为这是我调用的第一个访问权限。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,DB, ADODB,ComObj;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
ADOCom:TADOcommand;
ADOCon:TADOConnection;
ADOQ:TADOQuery;
nameDB:string;
db:OLEVariant;
begin
namedb:='Brill.accdb';
if not fileexists(namedb) then
begin
db:=createOLEObject('ADOX.Catalog');
db.create('Provider=Microsoft.ACE.OLEDB.12.0;Data Source='+nameDB+';');
db:=null;
ADOCon.connectionstring:='Provider=Microsoft.ACE.OLEDB.12.0;Data Source='+
nameDB+';';
ADOCon.connected:=True;
ADOCon.loginprompt:=False;
end
else
ADOCon.connectionstring:='Provider=Microsoft.ACE.OLEDB.12.0;Data Source='+
nameDB+';';
end.
【问题讨论】:
-
eaccessviolation 是什么意思,是什么原因造成的并修复它,抱歉忘记添加了
-
我可以安全地假设您阅读了documentation 吗?显然,这始终是第一个开始的地方。假设您确实阅读了文档,您不了解其中的哪一部分?一旦您了解了访问冲突是什么,您就可以进行一些调试。显然我们无法调试您的代码。如果您不提供minimal reproducible example,我们当然无法确定您代码中的问题。
-
我已经尝试过使用和不使用现有数据库。当数据库存在时,它在 AdoCon.connected=true 行上引发,当它不存在时,它在连接字符串上引发。
-
所以你当时没有阅读文档。为什么不呢?
-
感谢您提供足够的代码来回答。我可能已经猜到了这个问题,
ADOCon似乎没有初始化。但这就是我们需要minimal reproducible example 的原因。那我们就不用猜了。
标签: delphi ms-access exception