获得德尔福7与SQL Server Compact 3.5播放(Getting Delphi 7 t

2019-07-17 23:55发布

我们有写在Delphi 7.这是目前连接到正在退休老的Oracle数据库精简版的旧的应用程序。 这是权力选择将数据移动到Microsoft SQL Server Compact数据库代替。 sepending的时间转移到SQL CE数据库的一切移动量好后,我现在任务是获得Delphi应用程序发挥好新的数据库。

谁应该是比我聪明的人(我的老板)告诉我,我应该能够简单地修改连接,一切都应该回到正常。 不过,我一直在敲我的头靠在我的显示器两天试图获得在Delphi应用ADO连接与我们的新的SQL CE数据库工作。

什么我工作的略微简化的例子:

该连接在一个名为“adoConn” TADOConnection一个全局对象提出:

procedure TGlobal.DataModuleCreate(Sender: TObject);
begin
    adoConn.ConnectionString := 'Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=path\db.sdf;';
    adoConn.Connected := True;
end;

在这之后不久,一个过程被称为填充一些消息。 在麻烦拍摄应用的努力,我已经简化代码,使一个简单的查询,并显示在消息框中的结果。 该程序接收对SQL字符串参数,但我忽略了它现在和手动插入一个简单的SELECT语句:

procedure Select(const SQL: string);
var
    adoQuery : TADOQuery;
begin
    adoQuery := TADOQuery.Create(nil);
    try
        adoQuery.Connection := Global.adoConn;
        adoQuery.SQL.Text := 'select * from CLT_MESSAGES';
        adoQuery.ExecSQL;
        While not adoQuery.Eof do
        begin
            // Here I just created a MessageDlg to output a couple of fields.
            adoQuery.Next;
        end;
    finally
        adoQuery.Free;
    end;
end;

一切都编译就好了,但是当我运行该应用程序我得到以下错误:

“多步骤操作错误。请检查每个状态值。”

我做了一些额外的故障排除,发现误差在adoQuery.ExecSQL发生。 我试过几个不同版本的连接字符串和一对夫妇试图查询数据不同的方式,但是这一切都结束了一样。 我要么无法连接到数据库,或者我得到那个愚蠢的“复式步”的错误。

我很欣赏,提前,可以提供的任何援助。

Answer 1:

不要使用ExecSQL对于返回记录的查询。

无论是设置AdoQuery.Active属性为True或使用AdoQuery.Open执行SELECT语句。

UPDATE

改变你的代码后,我们看到了真正的错误是DB_E_OBJECTOPEN。

UPDATE2

更深的挖掘后,似乎这是在OLE DB提供程序已知的bug和nvarchar字段大于127个字符。

这些引用似乎证实了这一点:

SO: SQL Server精简版3.5提供了“多步骤操作错误”的错误的简单查询

REF1: http://www.tech-archive.net/Archive/SQL-Server/microsoft.public.sqlserver.ce/2008-07/msg00019.html

REF2: Https://forums.embarcadero.com/thread.jspa?messageID=474517

REF3: http://social.msdn.microsoft.com/Forums/en-US/sqlce/thread/48815888-d4ee-42dd-b712-2168639e973c



Answer 2:

更改游标类型的服务器端解决了127字符的问题对我来说:)



文章来源: Getting Delphi 7 to play with SQL Server Compact 3.5