Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Компонент CurrencyEdit Поле не найдено. Как так-то?  [new]
harvest6
Member

Откуда:
Сообщений: 22
Компонент CurrencyEdit не заполняется из запроса. Поле не найдено. Как так-то?
Ну собственно, вопрос в теме
procedure TFAsset_Change.DBLookupComboboxEh1Change(Sender: TObject);
begin
  DBLookupComboBoxEh1.KeyValue:=DBLookupComboBoxEh1.ListSource.DataSet.FieldByName(DBLookupComboBoxEh1.KeyField).Value;
  FDataModule.FDQueryRead.Close;
  FDataModule.FDQueryRead.SQL.Text:='select * from ASSET where AST_ID=:AstID';
  FDataModule.FDQueryRead.Params.ParamByName('AstID').AsInteger:=DBLookupComboBoxEh1.KeyValue;
  FDataModule.FDQueryRead.Open;
  sEdit1.Text:=FDataModule.FDQueryRead.FieldByName('AST_NAME').Value;
  DBLookupComboBoxEh2.KeyValue:=FDataModule.FDQueryRead.FieldByName('AST_INS_ID').Value;
  DBLookupComboBoxEh3.KeyValue:=FDataModule.FDQueryRead.FieldByName('AST_INS_ID').Value;
  DBLookupComboBoxEh4.KeyValue:=FDataModule.FDQueryRead.FieldByName('AST_CAP_ID').Value;
  DBLookupComboBoxEh5.KeyValue:=FDataModule.FDQueryRead.FieldByName('AST_CAP_ID').Value;
  DBLookupComboBoxEh6.KeyValue:=FDataModule.FDQueryRead.FieldByName('AST_BRK_ID').Value;
  DBLookupComboBoxEh7.KeyValue:=FDataModule.FDQueryRead.FieldByName('AST_BRK_ID').Value;
  FDataModule.FDQueryRead.Close;
  FDataModule.FDQueryRead.SQL.Text:='select CLD_DATE, RST_QUANTITY, RST_PRICE from REESTR join CALENDAR on RST_CLD_ID=CLD_ID where RST_AST_ID=:RstAstID and RST_OPR_ID=:RstOprID';
  FDataModule.FDQueryRead.Params.ParamByName('RstAstID').AsInteger:=DBLookupComboBoxEh1.KeyValue;
  FDataModule.FDQueryRead.Params.ParamByName('RstOprID').AsInteger:=23;
  FDataModule.FDQueryRead.Open;
  sLabel3.Caption:=FDataModule.FDQueryRead.FieldByName('RST_QUANTITY').Value; //работает
  sDateEdit1.Date:=FDataModule.FDQueryRead.FieldByName('CLD_DATE').Value;
  sDateEdit2.Date:=FDataModule.FDQueryRead.FieldByName('CLD_DATE').Value;
  sCurrencyEdit1.Text:=FDataModule.FDQueryRead.FieldByName('RST_QUANTITY').Value; //не работает
  sCurrencyEdit2.Text:=FDataModule.FDQueryRead.FieldByName('RST_QUANTITY').Value;
  sCurrencyEdit3.Text:=FDataModule.FDQueryRead.FieldByName('RST_PRICE').Value;
  sCurrencyEdit4.Text:=FDataModule.FDQueryRead.FieldByName('RST_PRICE').Value;
end;
27 май 21, 19:06    [22328168]     Ответить | Цитировать Сообщить модератору
 Re: Компонент CurrencyEdit Поле не найдено. Как так-то?  [new]
bk0010
Member

Откуда:
Сообщений: 5081
Поле не найдено.
Может А или Т русские? Попробуйте так:
s:string;
s:=FDataModule.FDQueryRead.FieldByName('RST_QUANTITY').asString;
sLabel3.Caption:=s;
sCurrencyEdit1.Text:=s;
sCurrencyEdit2.Text:=s;
27 май 21, 23:40    [22328266]     Ответить | Цитировать Сообщить модератору
 Re: Компонент CurrencyEdit Поле не найдено. Как так-то?  [new]
DimaBr
Member

Откуда:
Сообщений: 12091
Вы уверены, что нужно писать в sCurrencyEdit1.Text, а не в sCurrencyEdit1.Value ?
28 май 21, 02:12    [22328284]     Ответить | Цитировать Сообщить модератору
 Re: Компонент CurrencyEdit Поле не найдено. Как так-то?  [new]
ma1tus
Member

Откуда:
Сообщений: 789
harvest6
Компонент CurrencyEdit
Проверь его класс, не data-aware ли
28 май 21, 03:40    [22328286]     Ответить | Цитировать Сообщить модератору
 Re: Компонент CurrencyEdit Поле не найдено. Как так-то?  [new]
harvest6
Member

Откуда:
Сообщений: 22
bk0010
Может А или Т русские? Попробуйте так:

Такая же ошибка

DimaBr
Вы уверены, что нужно писать в sCurrencyEdit1.Text, а не в sCurrencyEdit1.Value ?

Value - численное значение Text.
Пробовал и так, и так... результат тот же

ma1tus
Проверь его класс, не data-aware ли

Можно подробней?
В этом случае тоже поле не найдено:
s:string;
s:=FDataModule.FDQueryRead.FieldByName('RST_QUANTITY').asString;


Вот такой вариант работает:
sLabel3.Caption:=FDataModule.FDQueryRead.FieldByName('RST_QUANTITY').Value;
sCurrencyEdit1.Text:=sLabel3.Caption;
sCurrencyEdit2.Text:=sLabel3.Caption;
28 май 21, 07:08    [22328302]     Ответить | Цитировать Сообщить модератору
 Re: Компонент CurrencyEdit Поле не найдено. Как так-то?  [new]
DimaBr
Member

Откуда:
Сообщений: 12091
harvest6

s:string;
//В этом случае тоже поле не найдено:
s:=FDataModule.FDQueryRead.FieldByName('RST_QUANTITY').asString;
// Вот такой вариант работает:
sLabel3.Caption:=FDataModule.FDQueryRead.FieldByName('RST_QUANTITY').Value;


Попахивает пятничным троллингом
28 май 21, 08:29    [22328312]     Ответить | Цитировать Сообщить модератору
 Re: Компонент CurrencyEdit Поле не найдено. Как так-то?  [new]
harvest6
Member

Откуда:
Сообщений: 22
DimaBr
Попахивает пятничным троллингом

Все стер и новой написал тот же текст, чтоб возможные ошибки убрать
Этот вариант заработал
s:=FDataModule.FDQueryRead.FieldByName('RST_QUANTITY').AsString;
sCurrencyEdit1.Text:=s;
sCurrencyEdit2.Text:=s;

Я хз... почему вчера выдавал ошибку.

Но вариант напрямую
sCurrencyEdit1.Text:=FDataModule.FDQueryRead.FieldByName('RST_QUANTITY').AsString

Поле не найдено..
28 май 21, 10:02    [22328341]     Ответить | Цитировать Сообщить модератору
 Re: Компонент CurrencyEdit Поле не найдено. Как так-то?  [new]
DimaBr
Member

Откуда:
Сообщений: 12091
Перенесите эту строчку выше

К сообщению приложен файл. Размер - 17Kb


Сообщение было отредактировано: 28 май 21, 10:35
28 май 21, 10:43    [22328359]     Ответить | Цитировать Сообщить модератору
 Re: Компонент CurrencyEdit Поле не найдено. Как так-то?  [new]
harvest6
Member

Откуда:
Сообщений: 22
DimaBr
Перенесите эту строчку выше


Спасибо огромное, заработало.
Только в чем причина такого поведения, я не понял((
28 май 21, 11:06    [22328375]     Ответить | Цитировать Сообщить модератору
 Re: Компонент CurrencyEdit Поле не найдено. Как так-то?  [new]
DimaBr
Member

Откуда:
Сообщений: 12091
Предположительно (с помощью хрустального шара), на sDateEdit1/sDateEdit2 есть обработчик события OnChange который срабатывает и закрывает(переоткрывает) датасет
28 май 21, 11:11    [22328380]     Ответить | Цитировать Сообщить модератору
 Re: Компонент CurrencyEdit Поле не найдено. Как так-то?  [new]
harvest6
Member

Откуда:
Сообщений: 22
DimaBr
Предположительно (с помощью хрустального шара), на sDateEdit1/sDateEdit2 есть обработчик события OnChange который срабатывает и закрывает(переоткрывает) датасет


Хрустальный шар не подвел)
Действительно, на sDateEdit1/sDateEdit2 есть обработчик события OnChange, который срабатывает и выполняет другой запрос, поэтому поле-то и не найдено.

Спасибо за пояснения.
28 май 21, 11:20    [22328385]     Ответить | Цитировать Сообщить модератору
 Re: Компонент CurrencyEdit Поле не найдено. Как так-то?  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 29820
DimaBr
Вы уверены, что нужно писать в sCurrencyEdit1.Text, а не в sCurrencyEdit1.Value

.Value вообще никогда не надо писать. Надо всегда писать .AsЧтото. Иначе хрен знает что получится.
28 май 21, 14:18    [22328445]     Ответить | Цитировать Сообщить модератору
 Re: Компонент CurrencyEdit Поле не найдено. Как так-то?  [new]
DimaBr
Member

Откуда:
Сообщений: 12091
kdv
Надо всегда писать .AsЧтото. Иначе хрен знает что получится.

Если я пишу X := Dataset['NameField'], то я делаю неправильно ?
28 май 21, 15:07    [22328490]     Ответить | Цитировать Сообщить модератору
 Re: Компонент CurrencyEdit Поле не найдено. Как так-то?  [new]
alekcvp
Member

Откуда:
Сообщений: 2878
DimaBr
kdv
Надо всегда писать .AsЧтото. Иначе хрен знает что получится.

Если я пишу X := Dataset['NameField'], то я делаю неправильно ?

Если NameField - строка и там null то будет исключение.
28 май 21, 16:31    [22328553]     Ответить | Цитировать Сообщить модератору
 Re: Компонент CurrencyEdit Поле не найдено. Как так-то?  [new]
DimaBr
Member

Откуда:
Сообщений: 12091
alekcvp
Если NameField - строка и там null то будет исключение.

А не видно что NameField в кавычках ?
А если X:Variant то какое исключение там будет ?
28 май 21, 21:31    [22328683]     Ответить | Цитировать Сообщить модератору
 Re: Компонент CurrencyEdit Поле не найдено. Как так-то?  [new]
alekcvp
Member

Откуда:
Сообщений: 2878
DimaBr
А не видно что NameField в кавычках ?

Ок, разжую: если поле с именем "NameField" имеет тип CHAR/VARCHAR и в нём записано значение NULL, то конструкция X := Dataset['NameField'] выдаст исключение если X - строковая переменная.
DimaBr
А если X:Variant то какое исключение там будет ?

А если X: Variant, то никакого. А ты часто в приложении работаешь с вариантами в чистом виде? Его всё равно потом, скорее всего, к строке приводить придётся и если NULL не нужно обрабатывать отдельно от пустой строки, то проще сразу FieldByName().AsString использовать, ИМХО.
30 май 21, 02:02    [22328912]     Ответить | Цитировать Сообщить модератору
 Re: Компонент CurrencyEdit Поле не найдено. Как так-то?  [new]
DimaBr
Member

Откуда:
Сообщений: 12091
alekcvp
если поле с именем "NameField" имеет тип CHAR/VARCHAR и в нём записано значение NULL, то конструкция X := Dataset['NameField'] выдаст исключение если X - строковая переменная.

В одном предложении ДВА если. Не много ли ?
alekcvp
А ты часто в приложении работаешь с вариантами в чистом виде?.

Регулярно.
alekcvp
то проще сразу FieldByName().AsString использовать

AsString к какому значению приводит Null ? Как после этого отличить от Null ?
30 май 21, 17:45    [22329002]     Ответить | Цитировать Сообщить модератору
 Re: Компонент CurrencyEdit Поле не найдено. Как так-то?  [new]
alekcvp
Member

Откуда:
Сообщений: 2878
DimaBr
AsString к какому значению приводит Null ? Как после этого отличить от Null ?

Я как бы не осуждаю использование таких конструкций, я просто говорю к каким последствиям они могут привести в неопытных руках.
Если важно отличать null от пустой строки, то да - можно использовать вариант (а можно получить ссылку на поле и проверять .IsNull).
Если же разницы нет, то проще .AsString();
31 май 21, 12:20    [22329243]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить