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