powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FireDAC - присвоить Null полю
25 сообщений из 104, страница 1 из 5
FireDAC - присвоить Null полю
    #39956302
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!
У меня был старый очень AnyDAC, там в компоненте собственном для работы с данными "на лету" были следующие строки:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
for I := 0 to FData.Count - 1 do
        begin
          DataVal := PQValue(FData.Objects[I])^;
          case DataVal.TypeVal of
            0: Q.ParamByName(FData[I]).AsString := DataVal.VString;
            1: Q.ParamByName(FData[I]).LoadFromStream(DataVal.VStream, ftBlob);
            2: Q.ParamByName(FData[I]).AsDateTime := DataVal.VDateTime;
          end;
        end;


Чтобы присвоить полю Null, достаточно было параметру присвоить пустую строку ''.
Т.е.
Код: pascal
1.
0: Q.ParamByName(FData[I]).AsString := '';


Сейчас в новом FireDAC это приводит к тому, что полю присваивается ноль 0.
Как исправить данное поведение?
...
Рейтинг: 0 / 0
FireDAC - присвоить Null полю
    #39956309
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.Clear?
...
Рейтинг: 0 / 0
FireDAC - присвоить Null полю
    #39956312
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

Вот так сделал
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
      for I := 0 to FData.Count - 1 do
        begin
          DataVal := PQValue(FData.Objects[I])^;
          case DataVal.TypeVal of
            0: begin
                 Q.ParamByName(FData[I]).AsString := DataVal.VString;
                 if DataVal.VString = '' then
                   Q.ParamByName(FData[I]).Value := Null;
               end;
            1: Q.ParamByName(FData[I]).LoadFromStream(DataVal.VStream, ftBlob);
            2: Q.ParamByName(FData[I]).AsDateTime := DataVal.VDateTime;
          end;
        end;
...
Рейтинг: 0 / 0
FireDAC - присвоить Null полю
    #39956324
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
Q.ParamByName(FData[I]).clear
...
Рейтинг: 0 / 0
FireDAC - присвоить Null полю
    #39956346
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad,

Если речь идет о TParam, то вот так.

Q.ParamByName(FData[I]).Clear;
Q.ParamByName(FData[I]).Bound:=True;

Собственно, уже сто лет как в справке Дельфей написано
The Clear method replaces the value of the parameter with NULL, but does not set Bound to false. However, if the Clear method is used to bind the parameter to a NULL value, Bound must be separately set to true.
Метод Clear заменяет значение параметра на NULL, но не устанавливает Bound в false. Тем не менее, если метод Clear используется для установки значения параметра в NULL, свойство Bound должно быть явно установлено в true.
...
Рейтинг: 0 / 0
FireDAC - присвоить Null полю
    #39956361
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad
Сейчас в новом FireDAC это приводит к тому, что полю присваивается ноль 0.
Как исправить данное поведение?

TFDQuery -> FormatOptions -> StrsEmpty2Null -> True
...
Рейтинг: 0 / 0
FireDAC - присвоить Null полю
    #39956665
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, действительно
14089754
...
Рейтинг: 0 / 0
FireDAC - присвоить Null полю
    #39956771
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
Метод Clear заменяет значение параметра на NULL, но не устанавливает Bound в false. Тем не менее, если метод Clear используется для установки значения параметра в NULL, свойство Bound должно быть явно установлено в true.

Я вот эту фразу не могу понять:

.Clear не устанавливает .Bound в False
поэтому .Bound необходимо установить в True

Как из первого следует второе, где, блин, логика?!..
...
Рейтинг: 0 / 0
FireDAC - присвоить Null полю
    #39956779
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а кому вообще нужно свойство Bound?
...
Рейтинг: 0 / 0
FireDAC - присвоить Null полю
    #39956785
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
а кому вообще нужно свойство Bound?

Например для вызова ХП с параметрами имеющими значения по умолчанию.
kdv
Q.ParamByName(FData[I]).Clear;
Q.ParamByName(FData[I]).Bound:=True;

В полном виде надо:
Код: pascal
1.
2.
3.
LParam.DataType := ftXxxx;
LParam.Bound := True;
LParam.Clear;
...
Рейтинг: 0 / 0
FireDAC - присвоить Null полю
    #39956791
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему бы разработчикам не сделать готовый метод, чтобы не вызывать три строки, а вызвать одну?
...
Рейтинг: 0 / 0
FireDAC - присвоить Null полю
    #39956792
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
IsNull := true;


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FireDAC - присвоить Null полю
    #39956879
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Почему бы разработчикам не сделать готовый метод, чтобы не вызывать три строки, а вызвать одну?

Видимо давно сделали, т.к. я впервые слышу про такую конструкцию.

Понять-бы еще где это bound применяется/обязателен? Даже в примерах не замечал.
...
Рейтинг: 0 / 0
FireDAC - присвоить Null полю
    #39956903
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно же по умолчанию настроить, что пустая строка присвоит нулл.
...
Рейтинг: 0 / 0
FireDAC - присвоить Null полю
    #39956926
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo> Можно же по умолчанию настроить, что пустая строка присвоит нулл.

Какой ужас... Вы с Оракла?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FireDAC - присвоить Null полю
    #39956943
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Почему бы разработчикам не сделать готовый метод, чтобы не вызывать три строки, а вызвать одну?

Я понимаю, что очень бы хотелось TMyProgram.Create(<и тут миллион аргументов>) :)
...
Рейтинг: 0 / 0
FireDAC - присвоить Null полю
    #39956945
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman
X11
Почему бы разработчикам не сделать готовый метод, чтобы не вызывать три строки, а вызвать одну?

Видимо давно сделали, т.к. я впервые слышу про такую конструкцию.

Понять-бы еще где это bound применяется/обязателен? Даже в примерах не замечал.


я так понимаю, что bound касается только параметров, а полей не касается
...
Рейтинг: 0 / 0
FireDAC - присвоить Null полю
    #39956946
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
wadman
пропущено...

Видимо давно сделали, т.к. я впервые слышу про такую конструкцию.

Понять-бы еще где это bound применяется/обязателен? Даже в примерах не замечал.


я так понимаю, что bound касается только параметров, а полей не касается

И я процедурами пользуюсь.
...
Рейтинг: 0 / 0
FireDAC - присвоить Null полю
    #39956951
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Код: sql
1.
IsNull := true;



ну да, я вот смотрю исходники FibPlus

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
procedure TFIBXSQLVAR.Clear;
begin
 IsNull:=True;
end;


...
...
procedure TFIBXSQLVAR.SetIsNull(aValue: Boolean);
begin
  if aValue then
  begin
   FWideTempValue:='';
   if FStreamValue<>nil then
   begin
     FStreamValue.Free;
     FStreamValue:=nil;
   end;
  end;
  SetValue(0,0,tspNull,aValue)
end;
...
Рейтинг: 0 / 0
FireDAC - присвоить Null полю
    #39956989
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
L_argo> Можно же по умолчанию настроить, что пустая строка присвоит нулл.
Какой ужас... Вы с Оракла?
А какой смысл хранить в базе пустую строку?..
...
Рейтинг: 0 / 0
FireDAC - присвоить Null полю
    #39957019
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp
Гаджимурадов Рустам
L_argo> Можно же по умолчанию настроить, что пустая строка присвоит нулл.
Какой ужас... Вы с Оракла?
А какой смысл хранить в базе пустую строку?..

Никакого. Вопрос обсуждался в соотвествующем разделе скруля, единственное, что надыбали - вот такой сценарий:

Непустая строка - это описание события "Докладываю: рейхстаг взят".
Пустая строка - это описание события "Докладываю: ничего не произошло".
Null - доклада не было.
...
Рейтинг: 0 / 0
FireDAC - присвоить Null полю
    #39957120
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpКак из первого следует второе, где, блин, логика?!..
вместо возмущений логикой следовало бы почитать справку или исходники.
1. присвоение значения параметру (не null) выставляет Bound в True. Это индикатор "значение присвоено".
2. если пункта 1 не было, Bound = False.
3. вызываем Clear - Bound остается False.
4. дальше ... ?
...
Рейтинг: 0 / 0
FireDAC - присвоить Null полю
    #39957121
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

черт, никогда у меня не получалось за один раз всё написать.
Так вот. Null - это не значение. Это отсуствие значения. И хранить его можно только как "индикатор отсутствия значения".
И с Bound + Clear вот как раз эта самая фигня. Clear убивает значение, теперь значения нет. А Bound является индикатором, что значение всё-таки есть. Но оно "пустое".
...
Рейтинг: 0 / 0
FireDAC - присвоить Null полю
    #39957199
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv

1. присвоение значения параметру (не null) выставляет Bound в True. Это индикатор "значение присвоено".
2. если пункта 1 не было, Bound = False.
3. вызываем Clear - Bound остается False.

Ну так разве .Bound = False - это не есть Null, который и был нужен ТСу?..
...
Рейтинг: 0 / 0
FireDAC - присвоить Null полю
    #39957260
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
Гаджимурадов Рустам
L_argo> Можно же по умолчанию настроить, что пустая строка присвоит нулл.
Какой ужас... Вы с Оракла?
А какой смысл хранить в базе пустую строку?..
Соображений может быть много. Начиная от стиля и предпочтений архитектора и кончая некот. нюансами в приложении, н-р упрощение работы с фильтрами. Также это может быть требование архитектуры сторонней системы.

И нулл и пустая строка имеют право на жизнь.
...
Рейтинг: 0 / 0
25 сообщений из 104, страница 1 из 5
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FireDAC - присвоить Null полю
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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