我维护了一个使用 ESQL 风格(Informix API)调用编写的第 3 方 Informix 驱动程序。我正在处理一个错误,在该错误中,对于 TEXT 字段,INSERT 工作正常而 UPDATE 失败。单步执行代码,我发现我们正在检查我们的 sqlda 结构以告诉我们是否以及如何绑定,并且在调用 sqli_describe_statement 之后,sqlda.sqld 变量包含 2,即绑定参数的正确数量这个插入调用,并且参数似乎设置正确,而在更新情况下,返回的数字是 0,没有参数信息(它应该是 1,对于一个参数:“UPDATE TESTTAB SET COLNAME = ? WHERE OTHERCOLNAME = 1")。
使用 sqlda 信息,我们为 INSERT 正确设置了所需的定位器结构,但我们无法进行更新,因为信息不存在。如果我在调试器中伪造它并运行设置定位器代码进行更新,它会更新得很好。
该语句当然看起来是正确的,并且在 INSERT 中使用了与 UPDATE 绑定相同的变量。此外 sqli_prep 更新没有问题。对于 describe,sqsla.code 返回不同的非负数 4 和 6,表示被描述的不同类型的语句,作为文档化(即,不是错误代码),因此没有明显的问题。
还有什么我应该在此之前检查代码的东西,这可能会导致这种奇怪的行为(除了对不同查询的特殊情况处理——那里什么都没有)
我是否在这里遗漏了一些关于如何在 TEXT 字段上进行更新的基本知识,例如您必须创建一个定位器对象,找到该行,然后一起单击三下并说“没有像 IBM 这样的地方?”
到目前为止,Google Fu 在文档中几乎没有出现,但是如果您知道指明方向的文档或示例,那也很酷。