4

Delphi 7Sql Server Express 2008 R2を使用してアプリケーションを開発しており、BDE を使用して ODBC 経由で Sql Server に接続しており、ドライバーにはSQL Native Clientを使用しています。

いくつかの特定のフォームでは、テーブルコンポーネントが「レコードが別のユーザーによって変更されました」を発生させ、データを追加しようとすると、EDBEngineError同じ問題が発生します。table.canceltable.posttable.edit

ドライバーをSQL ServerからSql Native Clientに変更する数日前に、SQL Server に「接続に別の hstmt の結果セットがあります」という問題があるため、SQL Native Client に変更しました。別のユーザーのエラーによって変更されました。

誰か助けてください

4

2 に答える 2

5
  1. BDE は長い間更新されていません。また、SQL Native Client は定期的に更新されています。BDE と SQLNC v 10.5 の非互換性に遭遇する可能性があります。
  2. 「レコードが別のユーザーによって変更されました」とは、API が <> 1 件の更新されたレコード (たとえば 0 件のレコード) を返したことを意味します。ほとんどの場合、一部のユーザーがレコードを変更したという事実はありません。更新されたレコードの数は別のメッセージとして返されるため、接続が他のメッセージでビジー状態の場合、0 が返されることがあります。テーブルにトリガーがある場合は、トリガーのSET NOCOUNT ON先頭に追加してみてください。
  3. "Connection is busy with result set for another hstmt" は、アクティブな結果セットからすべてのレコードをフェッチしていないことを意味します。すべてのレコードの取得を試すことができます。
  4. これらすべてのエラーを回避するには、dbExpress またはAnyDACなどのサードパーティ ライブラリに移行することを検討してください。

(2) への追加: 「レコードが別のユーザーによって変更されました」のその他の古典的な理由。このWHERE句には、フィールドと対応するパラメーターが含まれています。これらは、精度が一致しない (クライアント側で精度が失われるなど)、形式が異なる (互換性のない文字セットなど) などです。SQL コマンドとパラメーターの値を確認する必要があります。 SQL プロファイラーを使用して SQL Server に送信されます。

于 2012-01-30T13:37:24.033 に答える
0

私の友人、開発ツールの更新を検討する必要があります。この問題については、Delphi 用の ZEOS コンポーネント パックを実際に使用する必要があります。Firebird、MySQL、Access、SQL Server など、さまざまな種類のデータベースに接続できます。必要なのは、使用しているデータベースの dll をプロジェクト ディレクトリに置き、delphi の bin ディレクトリに置くことだけです (ターゲット コンピュータにデータベース マネージャがない場合)。次に、データベース サーバーにトランザクションを処理させます。詳細が必要な場合は、合図を送ってください。

于 2012-07-15T20:45:10.140 に答える