powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / XE3 IBUpdateSQL не пишет null
15 сообщений из 15, страница 1 из 1
XE3 IBUpdateSQL не пишет null
    #38401005
ooo_kontakt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет!
Использую IBUpdateSQLW - так вот, при вводе "пустой" даты отображается старая. Ранее - D7,Turbo,2007 не наблюдалось.
Тупо перебирал все возможные причины и нашел здесь:

procedure TIBUpdateSQL.SetParams(UpdateKind: TUpdateKind);
..............................
if Old then Param.AssignFieldValue(Field, Field.OldValue) else
begin
Value := Field.NewValue;
if VarIsEmpty(Value) then Value := Field.OldValue; // вот она, собака!
Param.AssignFieldValue(Field, Value);
end;
....................

Изменил на if VarIsEmpty(Value) then Value :=null;// Field.OldValue;
Работает.
...
Рейтинг: 0 / 0
XE3 IBUpdateSQL не пишет null
    #38401134
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ooo_kontaktпри вводе "пустой" даты отображается старая
Интересно, а как можно ввести "пустую" дату?

И да, varEmpty <> varNull.
...
Рейтинг: 0 / 0
XE3 IBUpdateSQL не пишет null
    #38401217
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
странный код. Вообще-то NULL определяется как Field.IsNull
...
Рейтинг: 0 / 0
XE3 IBUpdateSQL не пишет null
    #38401260
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

А они небось все через Variant переваривают.
...
Рейтинг: 0 / 0
XE3 IBUpdateSQL не пишет null
    #38401789
ooo_kontakt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисстранный код. Вообще-то NULL определяется как Field.IsNull

В чем странность в коде SetParams? Ебтырный малахай, весь код IBX таков. Но меня, Денис, удивило последнее предположение. property IsNull: Boolean read GetIsNull; И как ты здесь что-то определишь, если пропертя абсолютно читаемая, но не пишущая?
В сабже четко прописано, что обычное dm.MyTableMyDate.asString:='' при update поля с уже введенным ранее значением >0 не меняет значение поля в null. В старых версиях Delphi это проходило, в XE3 - нет. Похоже на то, что VarIsNull уже выдает что-то иное.
...
Рейтинг: 0 / 0
XE3 IBUpdateSQL не пишет null
    #38401875
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ooo_kontakt,

Ну это не я так определяю. Это вообще код Borland. Для установки в поле значения NULL используется метод Field.Clear Почему так надо у них спрашивать.

Хотя наверное ты прав для NewValue и OldValue это может не работать.

IBUpdateSQLW - вообще не родной компонент. Его написали для того, чтобы компенсировать отсутсвие возможности работать с 2мя транзакциями в TIBDataSet.
...
Рейтинг: 0 / 0
XE3 IBUpdateSQL не пишет null
    #38401904
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ooo_kontakt,

нормальный код, нужно только понимать как им пользоваться.

Если поле не меняли (т.е. вообще ничего в него не вводили, а значит NewValue is Empty), то берётся старое значение. Оно потом может быть использовано в where, для проверки корректности update\delete.

Научись вводить "пустую" дату как Null, а не оставлять в ней Empty, и будет тебе счастье без хакания чужого кода
...
Рейтинг: 0 / 0
XE3 IBUpdateSQL не пишет null
    #38401911
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ooo_kontaktВ сабже четко прописано, что обычное dm.MyTableMyDate.asString:='' при update поля с уже введенным ранее значением >0 не меняет значение поля в null.А с какого перепуга пустая строка должна стать нуллом ? Ораклоиды пришли ?
...
Рейтинг: 0 / 0
XE3 IBUpdateSQL не пишет null
    #38402019
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис> Для установки в поле значения NULL используется
Симонов Денис> метод Field.Clear Почему так надо у них спрашивать.

А что не так, что не нравится? По-моему вполне логично.
Правда, лично я как дополнение предпочёл бы ещё и
AsVariant := Null, но это уже шашечки.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
XE3 IBUpdateSQL не пишет null
    #38402078
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

сейчас посмотрел в полный исходный код - вроде все нормально. Просто по обрывку кода сразу не ясно.
...
Рейтинг: 0 / 0
XE3 IBUpdateSQL не пишет null
    #38403396
ooo_kontakt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисooo_kontakt,
IBUpdateSQLW - вообще не родной компонент. Его написали для того, чтобы компенсировать отсутсвие возможности работать с 2мя транзакциями в TIBDataSet.

Знаю. Это моя работа - мой ник раньше был Fanis. В родном IBUpdateSQL происходит то же самое, и IBUpdateSQLW - несколько измененный IBUpdateSQL. Отписался, повторяю, в связи с XE3 - компиляция под 2007 - нет проблем.

hvlad А с какого перепуга пустая строка должна стать нуллом ? Ораклоиды пришли ?

А вот здесь поподробнее, пожалуйста. Я совершенно не разбираюсь в SQL.
Сохраняем пустую строку (пример ниже) в базу и ее значение <> NULL? И что там?
Я часто при импорте из dbf использовал
importDate:TDateTime;
if importDate<StartDate then MySql.Params[0].asstring:='' else MySql.Params[0].asDateTime:=importDate;
И это работает - получаю null или то, что устраивает как дату.
...
Рейтинг: 0 / 0
XE3 IBUpdateSQL не пишет null
    #38403405
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ooo_kontaktСохраняем пустую строку (пример ниже) в базу и ее значение <> NULL? И что там?Да, ее значение не null, ее значение '' (пустая строка).
is null для нее будет false
сравнение с пустой строкой даст true
...
Рейтинг: 0 / 0
XE3 IBUpdateSQL не пишет null
    #38403444
ooo_kontakt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_Pisarevskyooo_kontaktСохраняем пустую строку (пример ниже) в базу и ее значение <> NULL? И что там?Да, ее значение не null, ее значение '' (пустая строка).
is null для нее будет false
сравнение с пустой строкой даст true

Речь шла о TDateTime - "Пустая дата". И речь идет не о SQL, а компоненте доступа. Я сообщил о том, что раньше MyTableMyDate.asString:='' было = null, а сегодня (ХЕ3) НЕТ!!!

Закрываем тему - мне не нравится, как кто-то пишет: "и будет тебе счастье без хакания чужого кода".
Так просто - почти как сплюнул походя.
...
Рейтинг: 0 / 0
XE3 IBUpdateSQL не пишет null
    #38403518
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ooo_kontaktЗакрываем тему - мне не нравится, как кто-то пишет: "и будет тебе счастье без хакания чужого кода".А к какому именно слову\обороту у тебя претензии ?
"будет тебе счастье" - местное (как минимум) устойчивое выражение, сделай поиск и проверь. Что в нём оскорбительного ?
"хакания чужого кода" - тебе есть что тут возразить по существу ?

PS А мне не нравится ooo_kontaktЕбтырный малахай - и шо ? Пойду плакать в подушку
...
Рейтинг: 0 / 0
XE3 IBUpdateSQL не пишет null
    #38403519
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ooo_kontaktмой ник раньше был FanisИ раньше ты вроде был адекватнее, по крайней мере я так помню :)
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / XE3 IBUpdateSQL не пишет null
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]