2

データベース管理システム (私の場合は SQL Server 2000) に関係なく、ODBC ドライバーによって引き起こされる多くの不都合のため、アプリケーションの接続タイプを ODBC からネイティブに変更したいと考えています。

SQLWindows はこの機能を提供しますが、大きなギャップがあります。ODBC ドライバーを使用して、フォームのフィールドが空白の場合、NULL を送信してデータベースに記録します。sql.iniファイルの構成パラメーターsetzerolengthstringstonull=onのおかげです。ただし、ネイティブ接続を使用すると、代わりに空白文字列' 'が送信されます。もちろん、列が関連付けられているテーブルまたは外部キーに応じて、さまざまな不整合やエラーが発生します。パラメータsetzerolengthstringstonullUDL ファイルで再現する方法、または内部で変更する方法がわかりません。

アプリケーションでそれを正しく構成する方法、または実行前に (各 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
4

2 に答える 2

0

グローバルを変更する方法はわかりませんが、指示では次を使用できます。

INSERT INTO tblUser (
    UsrName,
    UsrEmail
)
SELECT
    :MyForm.dfUsrName,
    NULLIF(:MyForm.dfUsrEmail, '')
于 2015-01-13T08:03:38.610 に答える