Powerbuilder - SQLNRows равен 0 после обновления окна данных - PullRequest
2 голосов
/ 08 января 2009

При первом вызове Update в моем DataWindow он возвращает 1 (успех), а SQLCA.SQLNRows равен 1. Когда я выполняю второе обновление на том же экране, не закрывая его в промежутке, Update возвращает 1 и SQLCA.SQLNRows равно 0. Есть предложения, почему это происходит?

Ответы [ 3 ]

3 голосов
/ 09 января 2009

Ваш вопрос, кажется, затронул пару вещей.

Во-первых, как упоминает Джон Пол, Update () вернет 1, даже если нет обновленных строк. Не существует конкретного возвращаемого значения для «ничего не должно быть сделано».

Во-вторых, как упомянуто в файле справки, значение для SQLNRows зависит от СУБД, поэтому сложно комментировать значение, вводимое там, не зная, какая СУБД вовлечена. Однако независимо от этого, поскольку DataWindow выдает серию INSERT, UPDATE и DELETE, которые нацелены только на одну строку, если это значение заполнено, я не ожидаю, что оно когда-либо будет больше одного, независимо от того, сколько операторов SQL DataWindow выдает. Число строк, затронутых в последнем выпущенном операторе SQL, всегда должно быть равно одному.

Если вы пытаетесь найти число строк, затронутых обновлением DataWindow (), перед обновлением () проверьте значение ModifiedCount () + DeletedCount () .

Удачи,

Терри.

2 голосов
/ 08 января 2009

Прошло много времени с тех пор, как я использовал PB, но разве возвращаемое значение .Update () не является просто индикатором команды (т.е. UPDATE), успешно выполняемой БД? Если это правильно, то при успешном завершении он вернет 1, даже если значения строк фактически не меняются. SqlNRows - это фактический показатель количества измененных строк.

0 голосов
/ 11 марта 2010

Обновленный ответ: Вы можете получить результаты Update в событии UpdateEnd. В этом случае у вас есть rowsinserted, rowsupdated, и rowsdeleted.

Оригинальный ответ: Хороший способ рассказать о том, что происходит, если вы используете PFC, - это использовать службу SQL Spy. В приложении, не поддерживающем PFC, вы можете поместить строку «ничего не делать», например beep(1), в событие sqlpreview DataWindow, установить точку останова на этой строке и использовать отладчик, чтобы наблюдать за происходящим. Вы также можете использовать средство трассировки операторов SQL или средство трассировки базы данных, как описано в Устранение неполадок при подключении в книге Подключение к вашей базе данных .

...