Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2017, 22:55   #1
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию Пустой edit в ado

Всем привет.
Подскажите, что здесь не так:
if sEdit2.Text<>'' then Parameters.ParamByName('NPD').Value :=StrToInt(sEdit2.Text)
else
Parameters.ParamByName('NPD').Value :=null;
что здесь не так?
выдает ошибку типа "Неправильно определен объект параметр".
Нужно чтобы если sedit2.text не пустой, то вставляем то что там есть.
А если sedit2.text пустое, то не вставлять или втсавить пустое значение.

Ps. если просто написать :

Parameters.ParamByName('NPD').Value :=StrToInt(sEdit2.Text)
то пишет ''is not a valid integer value
Ernest027 вне форума Ответить с цитированием
Старый 23.01.2017, 08:35   #2
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Для начала проверьте чтобы значение ('NPD') было цифровым
затем попробуйте сделать так
Код:
if sEdit2.Text<>'' then 
Parameters.ParamByName('NPD').Asinteger:= StrToInt(sEdit2.Text)
else
Parameters.ParamByName('NPD').Asinteger:= 0;
Aliens_wolfs вне форума Ответить с цитированием
Старый 23.01.2017, 08:59   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Если это ADO, то paNullable в Attributes параметра, чтобы он null хавал. Если еще ни чего не присваивать, то будет NULL тоже по идее. А 0 это далеко не null. И само поле таблицы должно NULL позволять
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 23.01.2017 в 09:01.
Аватар вне форума Ответить с цитированием
Старый 23.01.2017, 09:44   #4
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

Цитата:
Сообщение от Aliens_wolfs Посмотреть сообщение
Parameters.ParamByName('NPD').Asint eger:= 0;[/CODE]
даже не дает написать asinteger.
Цитата:
Если это ADO, то paNullable в Attributes параметра, чтобы он null хавал. Если еще ни чего не присваивать, то будет NULL тоже по идее. А 0 это далеко не null. И само поле таблицы должно NULL позволять
ругается на paNullable.
может неправильно делаю:
Код:
Parameters.ParamByName('NPD').attributes:=[panullable];
if sEdit2.Text<>'' then
  Parameters.ParamByName('NPD').Value:=StrToInt(sEdit2.Text)
  else
  Parameters.ParamByName('NPD').Value:=NULL;

Последний раз редактировалось Ernest027; 23.01.2017 в 09:47.
Ernest027 вне форума Ответить с цитированием
Старый 23.01.2017, 09:45   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
даже не дает написать asinteger.
Ну нет там такого свойства, надо же
Цитата:
ругается на paNullable
Хоть посмотри в справке что attributes множество, а не что-то еще
Код:
Parameters.ParamByName('NPD').attributes:=[panullable];
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.01.2017, 10:29   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Ernest027, а не проще ли менять текст запроса?

например:
Код:
AdoQuery1.Close;
if sEdit2.Text<>'' then begin
  AdoQuery1.SQL.Text := 'select * from Table1 where Field1 = :NPD'; 
  AdoQuery1.Parameters.ParamByName('NPD').Value :=StrToInt(sEdit2.Text);
end
else begin
  AdoQuery1.SQL.Text := 'select * from Table1 where Field1 is NULL'; 
end;
AdoQuery1.Open;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.01.2017, 10:38   #7
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

Код:
with DT2.ADOQueryEqIfExists do
begin
  Close;
  SQL.Clear;
  SQL.Add('if not exists (select * from Equipment ');
  SQL.Add('where [Оперативный номер]=('+quotedstr(sEdit16.Text)+') and [Заводской номер]=('+quotedstr(sedit18.Text)+'))');
  SQL.Add('insert into Equipment (ZavodID,[№ по договору],[Год],[Вид оборудования],[Место установки (корпус)],');
  SQL.Add('[Наименование позиции],[Оперативный номер],[Тип оборудования],[Заводской номер],[Год выпуска],');
  SQL.Add('[Дата последних замеров],[Техническое состояние],[Дата следующих замеров],[Мощность, кВт],');
  sql.Add('[Напряжение, кВ],[Класс изоляции],[Кол-во оборотов ЭД],[Кол-во оборотов механизма],');
  SQL.Add('[Тип подшипников],[Наименование подшипников задний],[Наименование подшипников передний],');
  sql.Add('[Мощность, кВА],[Напряжение ВН],[Напряжение СН],[Напряжение НН],[Oil temperature],');
  SQL.Add('[Потери ХХ],[Тип защиты],[Тип РПН])');
  sql.Add(' values (:ZID,:NPD,:G,:VO,:MU,:NP,:ON,:TO,:ZN,:GV,:DPZ,:TS,:DSZ,:P,:U,:CI,:KOED,:KOM,:TP,');
  SQL.Add(':NPZ,:NPP,:S,:Uvn,:Usn,:Unn,:OT,:Pxx,:TZ,:TRPN)');
  Parameters.ParamByName('ZID').Value:=DT2.ADOQueryZavod.FieldByName('ZavodID').AsInteger;
  Parameters.ParamByName('NPD').Attributes:=[panullable];
  Parameters.ParamByName('NPD').Value:=StrToInt(sEdit2.Text);
  Parameters.ParamByName('G').Attributes:=[panullable];
  Parameters.ParamByName('G').Value:=StrToInt(sEdit1.Text);
  Parameters.ParamByName('VO').Value:=sComboBox3.Text;
  Parameters.ParamByName('MU').Value:=sEdit3.Text;
  Parameters.ParamByName('NP').Value:=sMemo1.Text;
  Parameters.ParamByName('ON').Value:=sEdit16.Text;
  Parameters.ParamByName('TO').Value:=sEdit17.Text;
  Parameters.ParamByName('ZN').Value:=sEdit18.Text;
  if sEdit19.Text<>'' then
  Parameters.ParamByName('GV').Value:=StrToInt(sEdit19.Text)
  else
  Parameters.ParamByName('GV').Value:=NULL;
  if sDateEdit1.Date<>0 then
  Parameters.ParamByName('DPZ').Value:=sDateEdit1.Date
  else
  Parameters.ParamByName('DPZ').Value:=NULL;
  if sComboBox4.Text<>'' then
  Parameters.ParamByName('TS').Value:=sComboBox4.Text
  else
  Parameters.ParamByName('TS').Value:=NULL;
  if sDateEdit2.Date<>0 then
  Parameters.ParamByName('DSZ').Value:=sDateEdit2.Date
  else
  Parameters.ParamByName('DSZ').Value:=NULL;
  if sEdit6.Text<>'' then
  Parameters.ParamByName('P').Value:=StrToFloat(sEdit6.Text)
  else
  Parameters.ParamByName('P').Value:=NULL;
  if sEdit5.Text<>'' then
  Parameters.ParamByName('U').Value:=StrToFloat(sEdit5.Text)
  else
  Parameters.ParamByName('U').Value:=NULL;
  Parameters.ParamByName('CI').Value:=sComboBox5.Text;
  if sEdit4.Text<>'' then
  Parameters.ParamByName('KOED').Value:=StrToFloat(sEdit4.Text)
  else
  Parameters.ParamByName('KOED').Value:=NULL;
  if sEdit20.Text<>'' then
  Parameters.ParamByName('KOM').Value:=StrToFloat(sEdit20.Text)
  else
  Parameters.ParamByName('KOM').Value:=NULL;
  Parameters.ParamByName('TP').Value:=sEdit9.Text;
  Parameters.ParamByName('NPZ').Value:=sEdit8.Text;
  Parameters.ParamByName('NPP').Value:=sEdit7.Text;
  if sEdit10.Text<>'' then
  Parameters.ParamByName('S').Value:=StrToInt(sEdit10.Text)
  else
  Parameters.ParamByName('S').Value:=NULL;
  if sEdit11.Text<>'' then
  Parameters.ParamByName('Uvn').Value:=StrToFloat(sEdit11.Text)
  else
  Parameters.ParamByName('Uvn').Value:=NULL;
  if sEdit12.Text<>'' then
  Parameters.ParamByName('Usn').Value:=StrToFloat(sEdit12.Text)
  else
  Parameters.ParamByName('Usn').Value:=NULL;
  if sEdit13.Text<>'' then
  Parameters.ParamByName('Unn').Value:=StrToFloat(sEdit13.Text)
  else
  Parameters.ParamByName('Unn').Value:=NULL;
  if sEdit14.Text<>'' then
  Parameters.ParamByName('OT').Value:=StrToFloat(sEdit14.Text)
  else
  Parameters.ParamByName('OT').Value:=NULL;
  if sEdit15.Text<>'' then
  Parameters.ParamByName('Pxx').Value:=StrToFloat(sEdit15.Text)
  else
  Parameters.ParamByName('Pxx').Value:=NULL;
  Parameters.ParamByName('TZ').Value:=sEdit21.Text;
  Parameters.ParamByName('TRPN').Value:=sEdit22.Text;
  ExecSQL;
  sql.Clear;
  SQL.Add('Select * from Equipment');
  Open;
end;
сложновато в таком коде что-то подобное замутить)
Имена полей поменяю.
Ernest027 вне форума Ответить с цитированием
Старый 23.01.2017, 10:43   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Стоит попробовать paNullable для нужных параметров проставить и ни чего не присваивать, если значения нет. Не получится - NULL присваивать, но опять же - с paNullable. Не получится - убрать все параметры и динамически концовку запроса с values замутить. Ток аккуратненько с десятичной точкой и с датой, если есть она среди параметров
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.01.2017, 11:09   #9
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

про attributes и panullable найти не могу
Ernest027 вне форума Ответить с цитированием
Старый 23.01.2017, 11:16   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

да, согласен, в таком сложном коде придётся полностью всё переписывать, это, конечно, сложно и долго.

Ernest027, а вот любопытно.
Цитата:
Код:
Parameters.ParamByName('NPD').Value:=StrToInt(sEdit2.Text);
если в sEdit2.Text нормальное число, то код нормально отрабатывает?
т.е.
все эти
Цитата:
Цитата:
Сообщение от Ernest027 Посмотреть сообщение
Parameters.ParamByName('GV').Value: =NULL;
...
Parameters.ParamByName('DPZ').Value :=NULL;
....
Parameters.ParamByName('TS').Value: =NULL;
...
Parameters.ParamByName('DSZ').Value :=NULL;
ошибки не вызывают?
посмотрите в типах/свойствах параметров, чем NPD отличается от всех остальных.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать что бы в Edit был прозрачный текст который при введение в Edit все исчез alman12 Общие вопросы Delphi 22 09.06.2014 22:21
Пустой Edit. Парсер формулы из Edit Silverstone Общие вопросы Delphi 3 16.12.2012 03:07
Математические операции между таблицей ADO и Edit stevieg БД в Delphi 20 26.11.2012 16:02
Открывается пустой лист, но не пустой, а смещенный вверх romamania Microsoft Office Excel 3 31.05.2012 15:28
Копирование строки из Edit в другой Edit. Ibanez Wizard Win Api 3 29.03.2011 02:46