1

我们正在处理基于 Team Developer 2005.1 的遗留代码

有一个类似的查询

  !!CB!! 70
Set sSqlCommand = '
            SELECT  name, value
            INTO    :sName, :sValue
            FROM    av_system_settings
            WHERE   name LIKE \'Company_\%\''
If NOT SqlPrepareAndExecute( hSqlMain, sSqlCommand )
    Return FALSE
Loop
    If SqlFetchNext( hSqlMain, nFetch )
    ...

这里的 into 变量:sName, :sValue是字符串,但它总是有空值,尽管记录已经正确循环通过SqlFetchNext

其他地方的 into 变量都很好。只是不在一个地方工作。

在这方面已经用尽了大脑......有什么想法吗?伙计们 :)

4

2 回答 2

1
  1. 对于测试,您可以使用 SqlImmediate(sSqlCommand ) 而不是 sqlprepareandexecute( )。如果 sName 和 sValue 在执行 sqlImmediate 后有值意味着 sql 工作正常。
  2. 确保 SqlConnect() 函数返回真值。如果它返回 false 则确保数据库信用是正确的。
  3. 如果 sValue 变量需要保存 Long 数据,请查看 SqlSetLongBindDatatype ( ) 函数。

  4. 检查 sql 句柄 hsqlMain 的值,如果它是正值或正值,则表示句柄连接正确。否则,如果句柄值为空或零,则表示句柄未连接。

  5. 尝试使用 SqlFetchRow ( hsqlMain, nRow, nFetch ) 并将 nRow 的值增加 1 直到函数返回 false 或 nFetch 的值变为 FETCH_EOF。

    Set nRow = 0 While (TRUE) If not SqlFetchRow( hsqlMain, nRow, nFetch ) Break Set nRow = nRow + 1

于 2018-01-18T14:29:15.563 回答
0

在 SqlFetchNext 之后检查 nFetch 以确保找到记录。

如果 nFetch = FETCH_Ok ,则找到一条记录。所以尝试在 SqlFetchNext 之前调用 SqlVarSetup(hSqlMain) ,所以 into vars 有上下文。还可以尝试限定 into vars,例如 :hWndForm.frmTest.sName 。

如果 nFetch = FETCH_EOF,则没有找到记录。

于 2018-01-18T07:25:14.433 回答