32 ビットと 64 ビットの両方の ODBC データベースに接続する必要がある 32 ビット アプリケーションがあります。32 ビット ビルドと 64 ビット ビルドで異なるシグネチャを持つ MS ODBC 関数がいくつか見られます。これは、64 ビット アプリケーションだけが 64 ビット インデックスを使用できることを意味しているようです。そうですか?
2 に答える
64ビットODBCAPIでは、一部の引数が8バイトになり、以前は4バイトでした。ただし、行の数に関係するものはごくわずかであり、フィールド(たとえば、lob)のサイズに関係するものはさらに多くなります。引用するAPIは、影響を受ける行の数を返します。私が知っているドライバーは、選択のSQLRowCountに-1以外の値を設定します。したがって、SQLRowCountの場合、一度に20億行を更新/削除する場合にのみ心配する必要があり、それらの行の数を変更/削除する必要があります。実際に一度に20億行を更新/削除する場合は、32ビット/64ビットのODBCAPIを使用するかどうかよりも大きな問題が発生する可能性があります。
まず、一度に 40 億行をフェッチしません。そうすれば、奇妙なことが起こります。第二に、あなたが話している日付タイプは SLQLEN です。これは、32 ビット ドライバーの場合は 4 バイトの int であり、64 ビット ドライバーの場合は 8 バイトです。ただし、すべての 64 ビット ドライバーに 8 バイトの SQLLEN があるわけではありません。私は個人的に十数個の 64 ビット odbc ドライバーを使用してきましたが、それらの約 40% はまだ 4 バイトの SQLLEN を使用しています (その間、ドライバー マネージャーにも 4 バイトの SQLLEN が必要です。そうしないと、破損したデータとメモリが表示されます)一部のプラットフォームではあちこちでエラーが発生します)。