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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.08.2012, 08:10   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Как правильно использовать редактирование в pFIBDataSet?

Добрый день! Мне нужно редактировать таблицу через DBGridEh, который подключен через DataSource к некоему pFIBDataSet. Содержимое таблицы я вывожу нормально, но не могу редактировать. Курсор на строке есть, но не могу ничего ввести в строку таблицы и сделать Post записи. Подскажите как правильно перевести pFIBDataSet в режим добавления записи?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 25.08.2012, 10:53   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
подключен через DataSource к некоему pFIBDataSet.
Без Query? Такой эффект проявляется при использовании Query.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.08.2012, 11:24   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Ну да, без него. У FIBPlus подключение к базе можно делать через pFIBDataSet и на него настраивать DataSource. Просто не понимаю как его настроить нормально. Может кто-нибудь пошагово помочь сделать?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 27.08.2012, 14:22   #4
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

в FIBDataSet кроме SelectSQL (для выборки) есть еще и InsertSQL (для добавления), UpdateSQL (для модификации), DeleteSQL (для удаления) и RefreshSQL (для обновления ч\з DataSet1.Refresh). так вот для того чтобы твой ДатаСет мог вставлять\обновлять записи нужно заполнить соответствующее свойство (InsertSQL\UpdateSQL) ... если лень писать их самому - для этого можно воспользоваться SQL Generator который идет вместе с FIB+ ... указываешь для какой таблицы генерировать запросы и какй именно запрос нужен (или все сразу) и будешь ты happy
пример:
Код:
var 
DS : TpFIBDataSet;
...
DS.SelectSQL.Text:='SELECT Field1, Field2, Field3 FROM MyTable';
// то для вставки в эту таблицу будет так
DS.InsertSQL.Text:='INSERT INTO MyTable (Field2, Field3) VALUES (:Field2, :Field3)'; // при Field1 - автоинкремент
// для обновления 
DS.UpdateSQL.Text:='UPDATE MyTable SET Field2=:Filed2, Filed3=:Field3 WHERE Field1=:Field1';
// удаление
DS.DeleteSQL.Text:='DELETE FROM MyTable WHERE Field1=:Field1';
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...

Последний раз редактировалось Yurk@; 27.08.2012 в 14:28.
Yurk@ вне форума Ответить с цитированием
Старый 27.08.2012, 15:33   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

т.е. мне достаточно передать в SQL имя таблицы и список полей и все? Я могу и программно это сделать легко. Тогда я смогу во время работы программы выполнять только вставку записи?).
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 27.08.2012, 16:29   #6
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

угу .. примерно так)))))
а если подружишься с автогенератором этих самых sql выражений - можно будет автоматом генерить скрипты под разные таблицы одним и тем же датасетом
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 29.08.2012, 18:47   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Отлично! Вставка новой записи работает . Теперь осталось несколько вопросов.
1. Как подтверждать факт добавления новой записи: pFIBDataSet1.Transaction.Commit? Через DBNavigator? Или еще как?
2. Как должен выглядеть запрос в свойстве RefreshSQL у pFIBDataSet1? Такой же как у UpdateSQL? Иначе я не вижу принятые (через, например, DBNavigator) изменения сделанные в базе. Ошибок нет никаких.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 29.08.2012, 19:54   #8
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

1.
Код:
pFIBDataSet1.Transaction.CommitRetaining;
(простой Commit подтверждает сохранение и закрывает DataSet, а CommitRetaining - подтверждает и оставляет DataSet открытым)
2. зачастую RefreshSQL = SelectSQL (если не нужно сделать что-то иное)
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 30.08.2012, 09:05   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
2. зачастую RefreshSQL = SelectSQL (если не нужно сделать что-то иное)
А если сделать RefreshSQL=UpdateSQL?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 30.08.2012, 09:14   #10
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

ну сделай))) ... тог включи при этом логику: на команду "обновить данные" датасет у тебя будет делать UPDATE
тут Refresh понимается не в смысле "изменений данных", а в смысле "перечитать данные" ... это примерно равносильно DataSet.Close; DataSet.Open; ... только мягче
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...

Последний раз редактировалось Yurk@; 30.08.2012 в 09:17.
Yurk@ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно использовать MySQL EndoCrinolog PHP 6 24.08.2012 21:08
Как правильно использовать MonthCalendar Shanuzina Компоненты Delphi 1 04.03.2010 11:58
как правильно использовать OR AND mpdasa Общие вопросы Delphi 2 19.01.2010 17:30
Как правильно использовать компонент TDBF SadStar Компоненты Delphi 0 27.03.2009 02:48
Как правильно использовать ComboBox Pirotexnik Общие вопросы Delphi 6 26.03.2009 23:30