4

Delphi 7 で作成された古いアプリケーションがあります。現在、廃止された古い Oracle Lite データベースに接続されています。権力者は、代わりにデータを Microsoft SQL Server Compact データベースに移動することを選択しました。すべてを SQL CE データベースに移行するのにかなりの時間を費やした後、私は今、Delphi アプリケーションを新しいデータベースとうまく連携させることを任されています。

私より賢いと思われる人々 (私の上司) は、接続を変更するだけですべてが正常に戻るはずだと私に言います。しかし、Delphi アプリケーションの ADO 接続を新しい SQL CE データベースと連携させようと、2 日間モニターに頭をぶつけていました。

私が取り組んでいるものの少し単純化された例:

接続は、「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 でエラーが発生していることがわかりました。接続文字列のいくつかの異なるバージョンと、データをクエリするいくつかの異なる方法を試しましたが、すべて同じ結果になります。データベースに接続できないか、愚かな「複数ステップ」エラーが発生します。

事前に、提供できる支援に感謝します。

4

2 に答える 2

5

ExecSQLレコードセットを返すクエリには使用しないでください。

AdoQuery.Activeプロパティをに設定するか、ステートメントの実行にTrue使用します。AdoQuery.OpenSELECT

アップデート

コードを変更すると、DB_E_OBJECTOPENという実際のエラーが表示されます。

UPDATE2

深く掘り下げた後、これはOLEDBプロバイダーおよび127文字を超えるnvarcharフィールドの既知のバグのようです。

これらの参照はこれを確認しているようです:

SO:SQL Server Compact Edition 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

于 2013-01-08T19:26:32.373 に答える
2

カーソルタイプをサーバー側に変更すると、127文字の問題が解決しました:)

于 2013-06-03T14:44:37.397 に答える