|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
09.07.2008, 18:52 | #1 |
Форумчанин
Регистрация: 18.02.2008
Сообщений: 198
|
Сохранить данные в таблице (IBQery)
Здрасе.
Нужно изменить запись в таблице в поле типа TDateTime Делаю так Base1.Active:=false; IBT1.Active:=false; with Base1 do begin edit; sql.Clear; SQL.Add('UPDATE BAG Set DIAGENG=:D WHERE JOBCARDNO='+JOBCARDNO.Text); params.ParseSQL(sql.Text,true); parambyname('D').AsDateTime := StrToDateTime('10.10.2008 10:10:10'); execsql; close; end; IBT1.Active:=True; Base1.Active:=True; Count.Active:=true; ENGIN.Active:=true; End; { Base1.Active:=false; IBT1.Active:=false; Base1.sql.Clear; base1.SQL.Add('UPDATE BAG Set REPAIRDATE=null WHERE JOBCARDNO='+JOBCARDNO.Text); Base1.ExecSQL; BTNGO.OnClick(Sender);; end; } И ничего не происходит. Помогите правильно составить запрос. Или может использовать не IBQuery Возможно использовать .Post ??? Если да то подскажите синтаксис Спасибо! Да, База ЗДОРОВАЯ, с кучей Таблиц. Моя таблица содержит 63 поля разных типов. |
10.07.2008, 09:33 | #2 |
Форумчанин
Регистрация: 20.06.2007
Сообщений: 270
|
При работе с SQL следует помнить:
1) Команда SELECT формирует локальный набор данных на компьютере пользователя в соответствии с запросом. Иначе говоря, создает локальную таблицу с которой вы работаете. Выполняется она один раз при отрытии набора данных (Query.Active:=true или Query.Open). 2) Команды INSERT, UPDATE, DELETE только отсылают команды серверу на вставку, изменение или удаление записей и никаких данных обратно на компьютер пользователя не возвращают. Именно поэтому в Query есть метод EexecSQL который предназначен для отсылки подобных команд серверу. Чтобы отразить на компьютере пользователя результат работы этих команд необходимо закрыть набор данных (Query.Active:=false или Query.Close) и открыть его вновь с командой SELECT.
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько? (с) Библия. Вольный перевод с древнееврейского. |
10.07.2008, 10:05 | #3 |
Форумчанин
Регистрация: 18.02.2008
Сообщений: 198
|
А у меня не так разве?
|
10.07.2008, 10:36 | #4 |
Форумчанин
Регистрация: 20.06.2007
Сообщений: 270
|
А в начале кто наборы данных закрывает? см. п.1 предыдущего поста. У вас же теряются все данные из селекта. А потом вы хотите их использовать в запросе на изменение.
Уберите Base1.Active:=false; IBT1.Active:=false; Должно заработать.
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько? (с) Библия. Вольный перевод с древнееврейского. Последний раз редактировалось Andrei; 10.07.2008 в 10:43. |
10.07.2008, 12:14 | #5 |
Форумчанин
Регистрация: 18.02.2008
Сообщений: 198
|
Убрал то что вы сказали и сработало только один раз
Больше не работает Вот весь код на всякий случай var Form1: TForm1; ENG:array [1..100] of string; implementation {$R *.dfm} procedure TForm1.BTNGOClick(Sender: TObject); begin COUNT.Active:=false; IBT1.Active:=false; COUNT.SQL.Clear; COUNT.SQL.Add('Select count(*) as Col from BAG Where JOBCARDNO='+JOBCARDNO.Text); IBT1.Active:=True; COUNT.Active:=True; If Count.Fields[0].AsInteger=0 then begin Showmessage('Ремонт с таким номером не найден'); JOBCARDNO.SetFocus; exit; end; Base1.Active:=false; IBT1.Active:=false; Base1.SQL.Clear; Base1.SQL.Add('select * from BAG where JOBCARDNO='+JOBCARDNO.Text); IBT1.Active:=true; Base1.Active:=true; Label1.Caption:=Base1.Fields[0].AsString; CLIENTFIO.Text:=Base1.Fields[47].AsString; PHONEIMEI.Text:=Base1.Fields[10].AsString; RECEPTIONER.Text:=ENG[Base1.Fields[3].AsInteger]; ENGINEER.Text:=ENG[Base1.Fields[4].AsInteger]; if BASE1.FieldByName('FINISHED').AsStr ing='T' then begin FINISHED.Caption:='Завершен'; FINISHED.Color:=ClLime; STATUS.Caption:='Редактирование невозможно'; STATUS.Color:=ClRed; BTNUNBLOCK.Enabled:=true; end Else Begin FINISHED.Caption:='Не завершен'; FINISHED.Color:=ClYellow; STATUS.Caption:='Не заблокирован'; STATUS.Color:=ClLime; BTNUNBLOCK.Enabled:=false; end; If base1.Fields[14].AsString='' then begin GOOUT.Caption:='Не выдан'; GOOUT.Color:=ClYellow; end else begin GOOUT.Caption:='Выдан'; GOOUT.Color:=ClLime; end; end; procedure TForm1.FormCreate(Sender: TObject); var i:byte; begin for i:=1 to Count.Fields[0].AsInteger do begin ENGIN.RecNo:=i; eng[i]:=ENGIN.Fields[1].AsString; end; end; procedure TForm1.BTNUNBLOCKClick(Sender: TObject); begin Base1.sql.Clear; base1.SQL.Add('UPDATE BAG Set FINISHED=:D WHERE JOBCARDNO='+JOBCARDNO.Text); base1.params.ParseSQL(base1.sql.Tex t,true); base1.parambyname('D').asstring :='F'; Base1.ExecSQL; BTNGO.OnClick(Sender); end; end. Может я лишнего понаписывал??? Да и еще, как составить запрос если мне нужно изменить сразу два поля? Вот так не получается: UPDATE BAG Set FINISHED=:D , set REPAIRDATE=:F WHERE JOBCARDNO=значение Последний раз редактировалось Yuran; 10.07.2008 в 12:17. |
10.07.2008, 13:33 | #6 |
Форумчанин
Регистрация: 18.02.2008
Сообщений: 198
|
Все, разобрался.
Просто после base1.parambyname('D').asstring :='F'; Base1.ExecSQL; Дописал IBTransaction.commit; |
10.07.2008, 13:34 | #7 | |
Форумчанин
Регистрация: 20.06.2007
Сообщений: 270
|
Цитата:
UPDATE BAG Set FINISHED=:D , REPAIRDATE=:F WHERE JOBCARDNO=значение
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько? (с) Библия. Вольный перевод с древнееврейского. |
|
11.07.2008, 11:26 | #8 |
Форумчанин
Регистрация: 18.02.2008
Сообщений: 198
|
Отлично. Всем спасибо
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как сохранить данные в xml файл средствами delphi ??? | juden | Общие вопросы Delphi | 1 | 12.08.2008 10:12 |
сохранить | artemavd | Общие вопросы Delphi | 3 | 31.07.2008 19:08 |
Delphi:обновить данные в таблице. | Raccoon | Помощь студентам | 5 | 19.05.2008 19:31 |
Данные сохранить в файл и без перезапуска программы отобразить в grid-e | xdevi | Помощь студентам | 2 | 29.01.2008 09:17 |