Я поддерживаю сторонний драйвер Informix, написанный с использованием вызовов в стиле ESQL (Informix API). Я работаю над ошибкой, когда для полей ТЕКСТ вставки работают нормально, а ОБНОВЛЕНИЯ не работают. Пошагово просматривая код, я обнаружил, что мы проверяем нашу структуру sqlda, чтобы сообщить нам, нужно ли и как выполнять привязку, и после вызова sqli_describe_statement переменная sqlda.sqld содержит 2, правильное количество связанных параметров для этот вызов вставки, и параметры кажутся настроенными правильно, тогда как в случае обновления возвращаемое число равно 0, без информации о параметрах (он должен быть 1 для одного параметра в: «UPDATE TESTTAB SET COLNAME =? WHERE OTHERCOLNAME = 1 ").
Используя информацию sqlda, мы правильно настроили необходимую структуру локатора для INSERT, но мы не можем выполнить обновление, потому что информации там нет. Если я подделываю его в отладчике и запускаю код установки локатора для обновления, он обновляется нормально.
Выражение определенно кажется правильным, и для INSERT используется та же переменная, что и для привязки UPDATE. Более того, у sqli_prep нет проблем с обновлением. Для описания sqsla.code возвращает разные неотрицательные числа 4 и 6, представляющие различные типы описываемых операторов, как документированные (т.е. не код ошибки), так что здесь нет очевидной проблемы.
Есть ли что-то еще, что я должен проверить в коде перед этим, что может вызвать такое странное поведение (кроме обработки особых случаев для разных запросов - там ничего)
Я упускаю здесь что-то фундаментальное о том, как ОБНОВЛЯТЬ поля ТЕКСТА, например, вам нужно создать объект-указатель, найти строку, трижды щелкнуть каблуками и сказать: «Нет места лучше IBM?»
Пока что Google Fu мало фигурировал в документации, но если вы знаете документы или образцы, которые указывают путь, это тоже круто.