Опять про "Обновление текущей записи"

ЧАстые Вопросы и Ответы

Модераторы: kdv, CyberMax

Ответить
ERrorMAKros
Сообщения: 37
Зарегистрирован: 18 янв 2007, 01:05

Опять про "Обновление текущей записи"

Сообщение ERrorMAKros » 18 янв 2007, 02:16

Всем привет!
...есть Interbase база, в ней MyTable таблица, в которой 8000 записей.
Таблица отображается через DBGrid1 (DBGrid1.DataSource:=TIBQuery).
Ниже DBGrid1 - панель с компонентами, которая отображает некоторые данные из полей MyTable;
При обновлении записи пользователем [№1] - пользователь [№2] не видит обновленных (COMMIT) на сервере данных,
...что бы пользователь [№2] увидел обновленные данные в выбранной им записи таблицы MyTable, ему - необходимо послать запрос типа: "SELECT * FROM MyTable".
Т.к. записей в MyTable много - на запрос/обновление MyTable уходит много времени!

ВОПРОС ПО IBQuery: Подскажите пожалуйста, существует ли какой то метод обновить выбранную запись в MyTable - не обновляя все остальные,
что бы пользователь [#2] мог обновить только текущую/читаемую запись в таблице, избежав обновления списка остальных данных во всей таблице!??

Код: Выделить всё

IBQuery.ForcedRefresh:=True
Для IBDataSet.ForcedRefresh: при False перечитывание данных (текущей записи) производится только при явном вызове Refresh. При True - происходит автоматически при Post. Вызов метода Refresh будет перечитывать только одну, текущую запись. Для перечитывания всего набора нужно закрыть и открыть датасет, то есть повторно выполнить запрос, хранимый в свойстве SelectSQL.

...а вот сам Refresh работать не хочет, ...говорит: Cannot refresh row. (No refresh query)
Куда же вписывать refresh query?

...если нет нормальных решений для IBQuery - расскажите пожалуйста, в чем примудрости работы параметрами у IBDataSet?

Например, не понятно вот что, ...есть таблица:

Код: Выделить всё

CREATE TABLE IBcompany(
AINC         INTEGER      DEFAULT  NULL,
company      VARCHAR(255) DEFAULT  NULL)

IBDataSet1.InsertSQL.Text:='insert into IBCOMPANY(AINC, COMPANY) values (:AINC, :COMPANY)';
...что бы подставить значения для :AINC, :COMPANY, выполняю сл. код:

Код: Выделить всё

procedure TForm1.Button1Click(Sender: TObject);
    begin IBDataSet1.Close;
          IBDataSet1.ParamByName('COMPANY').AsString:='NEW_RECORD';
          IBDataSet1.ParamByName('AINC').AsInteger:=Random(100);
          IBDataSet1.Insert;
          IBDataSet1.Open;
          end; // procedure 
или

Код: Выделить всё

procedure TForm1.Button1Click(Sender: TObject);
    begin IBDataSet1.Close;
          IBDataSet1.Params.ByName('COMPANY').AsString:='NEW_RECORD';
          IBDataSet1.Params.ByName('AINC').AsInteger:=Random(100);
          IBDataSet1.Insert;
          IBDataSet1.Open;
          end; // procedure
...программа выводит: ...FIELD "COMPANY" NOT FOUND
:twisted:

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 18 янв 2007, 03:57

http://www.ibase.ru/devinfo/ibx.htm
http://www.ibase.ru/devinfo/clientrefresh.htm
http://www.ibase.ru/develop.htm
P.S. Прежде чем поститься на форуме, изучи статьи на сайте и поюзай поисковики.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 18 янв 2007, 09:21

да, очень много слов, но как можно не понять сообщение
Cannot refresh row. (No refresh query)
Куда вписывать refreshQuery? Да в RefreshSQL !
..что бы подставить значения для :AINC, :COMPANY, выполняю сл. код:
попробуйте вместо того чтобы руками insert-ы писать, сделать двойной клик на IBDataSet...

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 18 янв 2007, 09:27

Я промолчал про:

Код: Выделить всё

IBDataSet1.Insert; 
IBDataSet1.Open; 
Но сейчас скажу: набор закрыт, соответственно, полей в нем вообще никаких нет и естественно IBX ругается, что поле не найдено. Сначала открой набор, потом уже записи вставляй.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 18 янв 2007, 09:39

да тут вообще все перепутано. Человек берет IBQuery, и хочет чтобы "рефрешилось". Потом берет IBDataSet, и начинает ему вручную втыкать запросы... Все наоборот.
ErrorMarkos, ничего, что я в третьем лице?
Думаю, прочтение www.ibase.ru/devinfo/ibx.htm должно помочь.

ERrorMAKros
Сообщения: 37
Зарегистрирован: 18 янв 2007, 01:05

Сообщение ERrorMAKros » 12 сен 2007, 12:47

Люди - спасибо... !! Разобрался, конечно же с вашей помощью! Sorry что зыбал закрыть топик...! Спасибо что убиваете во мне чайника...!!

2 kdv special thx!

Ответить