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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2010, 16:08   #1
Alekcey
Пользователь
 
Регистрация: 12.07.2010
Сообщений: 44
По умолчанию ibdataset

Код:
procedure TFormMain.DBGridEhRangeIPCellClick(Column: TColumnEh);
    var id_val:integer;
begin

 if DataModuleMain.IBDataSetRANGEIP.FieldByName('ID_RANGEIP').Value<>null then
   id_val:=DataModuleMain.IBDataSetRANGEIP.FieldByName('ID_RANGEIP').Value;

 with DataModuleMain.IBDataSetRANGEIP do
 begin
 Close;
 ModifySQL.Clear;
 ModifySQL.Add('update RANGEIP set IP1=:Param1, IP2=:Param2, FLAGIS=:Param3 where ID_RANGEIP=:param4' );
 ParamByName('Param1').AsString:=FormMain.EditRangeIP1.Text+'.'+
                                 FormMain.EditRangeIP2.Text+'.'+
                                 FormMain.EditRangeIP3.Text+'.'+
                                 FormMain.EditRangeIP4.Text;
 ParamByName('Param2').AsString:=FormMain.EditRangeIP5.Text+'.'+
                                 FormMain.EditRangeIP6.Text+'.'+
                                 FormMain.EditRangeIP7.Text+'.'+
                                 FormMain.EditRangeIP8.Text;
 ParamByName('Param3').AsInteger:=integer(not FormMain.DBGridEhRangeIP.Columns[3].Checkboxes);
 ParamByName('Param4').AsInteger:=id_val;

 ExecSQL;
 end;

 DataModuleMain.IBDataSetRANGEIP.Open;
end;

пишет field "param1" not found
Alekcey вне форума Ответить с цитированием
Старый 12.08.2010, 16:47   #2
Alekcey
Пользователь
 
Регистрация: 12.07.2010
Сообщений: 44
По умолчанию

Так вроде работает
Только в каком событии писать?

Код:
 if DataModuleMain.IBDataSetRANGEIP.FieldByName('ID_RANGEIP').Value<>null then
   id_val:=DataModuleMain.IBDataSetRANGEIP.FieldByName('ID_RANGEIP').Value;

 with DataModuleMain.IBDataSetRANGEIP do
 begin

 Close;
 ModifySQL.Clear;

 ModifySQL.Add('update RANGEIP set IP1='''+ FormMain.EditRangeIP1.Text+'.'+
                                 FormMain.EditRangeIP2.Text+'.'+
                                 FormMain.EditRangeIP3.Text+'.'+
                                 FormMain.EditRangeIP4.Text +''', IP2='''+FormMain.EditRangeIP5.Text+'.'+
                                 FormMain.EditRangeIP6.Text+'.'+
                                 FormMain.EditRangeIP7.Text+'.'+
                                 FormMain.EditRangeIP8.Text +''', FLAGIS='''+inttostr(integer(not FormMain.DBGridEhRangeIP.Columns[3].Checkboxes)) +''' where ID_RANGEIP='''+inttostr(id_val)+'''               ' );

 open;
 end;
 DataModuleMain.IBDataSetRANGEIP.Open;
Alekcey вне форума Ответить с цитированием
Старый 12.08.2010, 17:09   #3
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

первая версия более верная
достаточно подправить то что выделено цветом
Код:
 ModifySQL.Add('update RANGEIP set IP1=:Param1, IP2=:Param2, FLAGIS=:Param3 where ID_RANGEIP=:param4' );
 Prepare;
это ваще не нужно
Код:
 DataModuleMain.IBDataSetRANGEIP.Open;
soleil@mmc вне форума Ответить с цитированием
Старый 13.08.2010, 08:07   #4
Alekcey
Пользователь
 
Регистрация: 12.07.2010
Сообщений: 44
По умолчанию

Посоветовали:
В modifySQL:

Код:
update RANGEIP set IP1=:Param1, IP2=:Param2, FLAGIS=:Param3 where ID_RANGEIP=:param4

Имена параметров должны совпадать с именами полей, получаемых при выполнении SelectSQL

Код:
update RANGEIP set IP1=:IP1, IP2=:IP2, FLAGIS=:FLAGIS where ID_RANGEIP=:OLD_ID_RANGEIP
Все. Больше нигде ничего писать НЕ НУЖНО

сделал так, как посоветовали.
Снимаю флажок, закрываю программу, захожу ч/з IBExpert, а в поле FLAGIS записано "1", а должен быть "0".

убрал всё из RefreshSQL. Заработало
Было тоже что и в SelectSQL:

Код:
select * from  RANGEIP order by IP1
Раньше думать надо было:

http://www.ibase.ru/devinfo/ibx.htm#ibdataset

Последний раз редактировалось Stilet; 13.08.2010 в 10:45.
Alekcey вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
После SELECT через IBDataSet ошибка EIBClientError 'Not in edit mode' DiMoN2002 Общие вопросы C/C++ 0 23.11.2009 20:51
IBDataSet Старовъръ БД в Delphi 7 07.07.2008 13:49
Почему ошибка в IBDataSet? 3lander БД в Delphi 3 10.10.2007 11:38