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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2009, 08:28   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Лампочка Firebird. Обновление записей

Всем добрый день! Может это странно, но у меня ушло два дня на то, чтобы додуматься как правильно сделать обновление уже существующей записи в БД. Для того, чтобы у меня получилось это сделать, нужно то было всего лишь внимательно посмотреть на запрос, который автоматически можно сгенерировать в pFIBDataSet-e. Итак, вот генерируемый этим компонентом запрос на обноление записи:
Код:
UPDATE NEW_TABLE
SET 
    CHETVERT = :CHETVERT,
    DATASTART = :DATASTART,
    DATAEND = :DATAEND
WHERE
    ID = :OLD_ID
    and CHETVERT = :OLD_CHETVERT
    and DATASTART = :OLD_DATASTART
    and DATAEND = :OLD_DATAEND
То есть после SET идет вставка новых параметров. И вот как я сделал обновление у себя:
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
 pFIBQuery1.SQL.Clear;
 pFIBQuery1.SQL.Text:='UPDATE NEW_TABLE SET CHETVERT=:CHETV,DATASTART=:DATSTART,DATAEND=:DATEND WHERE ID=:ID';
 pFIBQuery1.ParamByName('ID').Value:='1';
 pFIBQuery1.ParamByName('CHETV').Value:='I четверть';
 pFIBQuery1.ParamByName('DATSTART').Value:=DateTimePicker1.Date;
 pFIBQuery1.ParamByName('DATEND').Value:=DateTimePicker2.Date;
 pFIBQuery1.ExecQuery;
end;
Теперь записи обновляются отлично. Так можно обновить запись в таблице.
P.S. Вопрос к старожилам форума и не только: как сделать, чтобы обновленная запись сразу показывалсь в DBGrid-e? А то для того, чтобы увидеть изменения нужно перезапускать программу.
Код:
pFIBDataSet.DataSource.Dataset.Refresh
- не работает.
P.S.S. Написал этот мини-FAQ того, чтобы у кого возникнут вопросы с подобным, знали как решить свою проблему
Вложения
Тип файла: zip Обновление.zip (243.0 Кб, 19 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 16.10.2009 в 12:10. Причина: Забыл выложил проект)
artemavd вне форума Ответить с цитированием
Старый 16.10.2009, 10:36   #2
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

скажу честно, ты открыл нам Америку

по теме вопроса:
1) тебе наверняка уже советовали полистать (хотя бы и в электронном виде) "Ковязина,Вострикова" - там есть целая глава по ФИБ+ и тебе стоит посомтреть в сторону использования ДБ-компонентов
2) если нужно показать обновленную запись, то нужно делать так
Код:
pFIBDataSet.Close;
pFIBDataSet.Open;
pFIBDataSet.Locate('id', 1, []);
и не забывать DisableControl/EnableControl

только странно - почему ты подставляешь айдишник в виде строки?
soleil@mmc вне форума Ответить с цитированием
Старый 16.10.2009, 12:13   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
скажу честно, ты открыл нам Америку
У меня не было цели кому-то что-то доказывать. Я лишь поделился решением своей проблемы.
Цитата:
1) тебе наверняка уже советовали полистать (хотя бы и в электронном виде) "Ковязина,Вострикова" - там есть целая глава по ФИБ+ и тебе стоит посомтреть в сторону использования ДБ-компонентов
Первый раз об этом слышу.
Цитата:
2) если нужно показать обновленную запись, то нужно делать так
Код:

Код:
pFIBDataSet.Close;
pFIBDataSet.Open;
pFIBDataSet.Locate('id', 1, []);
А что именно значит строка, которую я выделил?
Цитата:
только странно - почему ты подставляешь айдишник в виде строки?
Виноват. Уже понял свою ошибку
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 16.10.2009 в 13:03.
artemavd вне форума Ответить с цитированием
Старый 16.10.2009, 13:12   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А что именно значит строка, которую я выделил?
Тут имеется ввиду смысл перескакивания на добавленную строку методом locate, который находит нужную запись и переводит на нее курсор.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.10.2009, 16:16   #5
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
Первый раз об этом слышу.
о чем?
о книжке "Ковязина, Вострикова"?

тебе достаточно прочитать одну главу в этой книжке (по фибовским компонентам) чтобы снять 90% всех возникающих у тебя вопросов
на форуме она точно есть
soleil@mmc вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обновление набора данных после добавления в таблицу записей "внешней" программой dimmm БД в Delphi 5 21.04.2009 00:56
Update - Обновление всех записей Veroonya SQL, базы данных 4 15.12.2008 13:42
FireBird Д'якон БД в Delphi 2 04.12.2008 11:15
FireBird 1.5.4 Nikola__ БД в Delphi 2 17.11.2008 14:42
Удаление, обновление записей из MySQL таблицы xDjarx БД в Delphi 2 14.05.2008 13:36