我们正在处理基于 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 变量都很好。只是不在这里工作一个地方。
这已经没脑子了...知道吗?伙计们:)
- 对于测试,您可以使用 SqlImmediate(sSqlCommand ( 而不是 sqlprepareandexecute( (。如果 sName 和 sValue 在之后有值 执行 sqlImmediate 意味着 sql 工作正常。
- 确保 SqlConnect(( 函数返回真值。 如果它返回 false,请确保数据库信用是正确的。
-
如果 sValue 变量需要保存长数据,那么请查看 SqlSetLongBindDatatype ( ( 函数。
-
检查 sql 句柄 hsqlMain 的值,如果它具有正值或表示句柄连接正确。否则 如果句柄值为 null 或零,则表示句柄未连接。
-
尝试使用 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
在 SqlFetchNext 之后检查 nFetch 以确保找到记录。
如果 nFetch = FETCH_Ok ,则找到一条记录。因此,请尝试在 SqlFetchNext 之前调用 SqlVarSetup(hSqlMain(,以便 into vars 具有上下文。还可以尝试将 GET 限定为 vars,例如 :hWndForm.frmTest.sName 。
如果 nFetch = FETCH_EOF ,则未找到任何记录。