データベース管理システム (私の場合は SQL Server 2000) に関係なく、ODBC ドライバーによって引き起こされる多くの不都合のため、アプリケーションの接続タイプを ODBC からネイティブに変更したいと考えています。
SQLWindows はこの機能を提供しますが、大きなギャップがあります。ODBC ドライバーを使用して、フォームのフィールドが空白の場合、NULL を送信してデータベースに記録します。sql.iniファイルの構成パラメーターsetzerolengthstringstonull=onのおかげです。ただし、ネイティブ接続を使用すると、代わりに空白文字列' 'が送信されます。もちろん、列が関連付けられているテーブルまたは外部キーに応じて、さまざまな不整合やエラーが発生します。パラメータsetzerolengthstringstonullをUDL ファイルで再現する方法、または内部で変更する方法がわかりません。
アプリケーションでそれを正しく構成する方法、または実行前に (各 SQL の前ではなく一般的な方法で) SQL コマンドをインターセプトして、空白の値を手動で NULL に変更する方法はありますか?
SQLWindows のドキュメントでは、SQL でフィールドを直接送信するのではなく、追加の変数を作成し、それらのフィールドが空白かどうかを確認し、変数をフィールドの値またはSTRING_Nullに設定し、変数を SQL で送信するように提案していることを知っています。私のアプリケーションの企業規模が非常に大きいため、私の状況ではそれは不可能です。それには、ほとんどすべてを単純に書き直す必要があります。
それらの間で物事がどのように異なるかについて、2つの最小限の例を書きました。
これは OBDC で機能し、列UsrEmailがtblEmailで電子メールを検索すると仮定して、テーブルtblUserにユーザーを挿入します。そしてdfUsr [something]は MyForm のコントロールです。
INSERT INTO tblUser (
UsrName,
UsrEmail
)
SELECT
:MyForm.dfUsrName,
:MyForm.dfUsrEmail
ネイティブ接続で同じことを行うには、sUsrEmail (など) という名前の文字列変数を作成し、以下の特定の SQL の前に次のコードを実行する必要があります。
if SalIsNull(MyForm.dfUsrEmail)
sUsrEmail = STRING_Null
else
sUsrEmail = MyForm.dfUsrEmail
クエリも異なります。
INSERT INTO tblUser (
UsrName,
UsrEmail
)
SELECT
:MyForm.dfUsrName,
:sUsrEmail