SQLWindows中的本机连接,有没有办法在没有额外变量的情况下发送NULL而不是SQL中的空格



由于 ODBC 驱动程序带来的许多不便,无论数据库管理系统(在我的情况下是 SQL Server 2000),我都想将我的应用程序连接类型从 ODBC 更改为本机。

SQLWindows提供了这个功能,但差距很大。使用 ODBC 驱动程序,当表单中的字段为空时,它会发送 NULL 以记录在数据库中。感谢 sql.ini 文件中的配置参数 setzerolengthstringstonull=on。但是,使用本机连接时,它会发送一个空字符串 '',这当然会导致各种不一致和错误,具体取决于与列相关的表或外键。我不知道如何在 UDL 文件中重现参数 setzerolengthstringstonull 或在内部更改它。

有没有办法在应用程序中正确配置它,甚至在运行之前拦截 SQL 命令(以通用方式,而不是在每个 SQL 之前),以便我可以手动将空白值更改为 NULL?

我知道 SQLWindows 文档建议我不要直接在 SQL 中发送字段,而是创建额外的变量,检查这些字段是否为空,将变量设置为字段中的值或STRING_Null,并在 SQL 中发送变量。这在我的情况下是不可能的,因为我的申请规模巨大。这将需要简单地重写几乎所有内容。


我写了两个最小的例子来说明它们之间的不同之处:

这在 OBDC 中有效,它在表 tblUser 中插入一个用户,假设列 UsrEmailtblEmail 中查找电子邮件。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
我不知道

如何更改全局,但在说明中,您可以使用:

INSERT INTO tblUser (
    UsrName,
    UsrEmail
)
SELECT
    :MyForm.dfUsrName,
    NULLIF(:MyForm.dfUsrEmail, '')

在 Sql 中.ini您可以使用substitute=设置。此设置由 Gupta 为每个数据库客户端通信提供的本机连接驱动程序使用。

该设置必须放置在 sql.ini 中的相应部分中。即,当使用Oracle DBMS时,设置必须在[oragtwy]内部。该设置用于替换 DBMS 特定命令。

例:

[oragtwy] substitute=@UPPER,UPPER

在上面提到的示例中,本机连接器在连接到oracle DBMS时会考虑该设置,并且每次发现内部包含"@UPPER"的语句(特定于SqlBase)时,它都会将该字符串替换为UPPER(在oracle中使用)

因此,在您的情况下,设置应如下所示:

substitute='',

在使用 oracle 数据库时,我经常使用它。

相关内容

  • 没有找到相关文章

最新更新