Форум: "Начинающим";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];
ВнизFibDataSet быстрая работа Найти похожие ветки
← →
DelphiLexx © (2006-12-06 10:54) [0]Проблема следующая. Есть форма с гридом и MainFIBDataSet"ом.Transation = MainFIBTransaction, у которого 4 колонки. Данные в этот грид вносятся не напрямую, а через модальную форму с четырьмя Edit"ами. Все эти четыри Edot"a напрямую с колонками грида не связаны, это сделано за тем, чтобы вводимые пользователем данные в Edit"ы не отображались сразу же в колонках. После нажатия кнопки OK модальной формы выполняется запрос(update или insert) в отдельном TFIBDataSet"e, у которого в качестве транзакции используется такая же транзакия, что и у MainFIBDataSet"ом, а MainTransaction.
После закрытия модального окна внесенные данные сразу в строке грида не отображаются и приходится делать:
MainFIBDataSet.Close;
MainFIBDataSet.Open;
{Становится на предыдущую запись - в KeyValue хранится значения ID пред. запсиси. Я не люблю пользоваться MoveBy или Bookmark"ами}
MainFIBDataSet.Locate(KeyName, KeyValue, [])
Если записей в гриде много ~>10000 MainFIBDataSet.Locate - приводит к торможению.
Поэтому возникает вопрос - как сделать так чтобы данные внесенные в мод. форму сразу после нажатия "OK" отображались в гриде. Все это позволит избежать использования MainFIBDataSet.Close; MainFIBDataSet.Open; MainFIBDataSet.Locate(KeyName, KeyValue, []). Желательно без CacheUpdate так как мои FIBs их не поддерживают должным образом.
← →
Sergey13 © (2006-12-06 10:58) [1]> После нажатия кнопки OK модальной формы выполняется запрос(update
> или insert) в отдельном TFIBDataSet"e
Зачем. У показываемого датасета есть свои методы Insert, Edit и Delete.
← →
DelphiLexx © (2006-12-06 11:05) [2]
> Зачем. У показываемого датасета есть свои методы Insert,
> Edit и Delete.
А какая разница какой я использую DataSet, главное, что это выполняется в одной транзакции.
← →
iva © (2006-12-06 11:18) [3]MainFIBDataSet.Refresh
← →
Sergey13 © (2006-12-06 11:19) [4]> [2] DelphiLexx © (06.12.06 11:05)
Если ты распечатал что-то с экрана, а потом изменил экран, распечатка поменяется?
← →
DelphiLexx © (2006-12-06 13:15) [5]
> MainFIBDataSet.Refresh
Выдает exception, что типа не может сделать Refresh.
← →
DelphiLexx © (2006-12-06 13:15) [6]
> Если ты распечатал что-то с экрана, а потом изменил экран,
> распечатка поменяется?
Ну сделал я как ты сказал результат тот же.
← →
Виталий Панасенко (2006-12-06 13:24) [7]
> DelphiLexx © (06.12.06 11:05) [2]
>
>
> > Зачем. У показываемого датасета есть свои методы Insert,
>
> > Edit и Delete.
>
> А какая разница какой я использую DataSet, главное, что
> это выполняется в одной транзакции.
А при чем тут "одна транзакция" ? Ты ведь в MainFIBDataSet в св-ве SQL-SELECT указал что-то типа SELECT * FROM TABLE_NAME WHERE .... данные считались в кэш MainFIBDataSet и ПОКА ТЫ ВСЕ НЕ ПЕРЕЧИТАЕШЬ, ТО ЭТОТ САМЫЙ MainFIBDataSet ничего не узнает о том, что ты в этой же транзакции добавил(изменил/удалил) данные другим FIBDataSetом. Это одно и тоже(практически) как изменение данных несколькими пользователями...И суть второго DataSetа ?
← →
Виталий Панасенко (2006-12-06 13:25) [8]
> DelphiLexx © (06.12.06 13:15) [6]
>
>
> > Если ты распечатал что-то с экрана, а потом изменил экран,
>
> > распечатка поменяется?
>
> Ну сделал я как ты сказал результат тот же.
>
Значит, не так что-то делаешь. А не рефрешит -видимо, не задан текст RefreshSQL
← →
Sergey13 © (2006-12-06 13:26) [9]> [6] DelphiLexx © (06.12.06 13:15)
А я делал, все нормально. Почему?
← →
DelphiLexx © (2006-12-06 14:06) [10]
> А не рефрешит -видимо, не задан текст RefreshSQL
Получается, что в RefreshSQL я должен запихнуть то же, что и в SelectSQL.
В итоге получится аналог DataSet.Close, DataSet.Open.
← →
Sergey13 © (2006-12-06 14:07) [11]> [10] DelphiLexx © (06.12.06 14:06)
> Получается, что в RefreshSQL я должен запихнуть то же, что
> и в SelectSQL.
Нет. Должен быть запрос на обновление одной строки.
> В итоге получится аналог DataSet.Close, DataSet.Open.
Нет.
← →
DelphiLexx © (2006-12-06 14:13) [12]
> Нет. Должен быть запрос на обновление одной строки.
И как он должен выглядеть.
← →
Sergey13 © (2006-12-06 14:18) [13]> [12] DelphiLexx © (06.12.06 14:13)
> И как он должен выглядеть.
Черная строка символов на белом фоне, если настройки делфы не менять.
В ФИБ-ах что, нет генератора этих запросов? Нет справки по ним? Нет примеров?
Нет учебника по SQL, в конце концов?
Где наконец твой запрос?
← →
DelphiLexx © (2006-12-06 14:23) [14]
> Где наконец твой запрос?
Делам в том, что select у меня выглядит след. образом:
select * from RAW_DICT
И что в Update
← →
DelphiLexx © (2006-12-06 14:24) [15]
> И что в Update
Извеняюсь и что мы пишем в RefreshSql
← →
Sergey13 © (2006-12-06 15:11) [16]> [14] DelphiLexx © (06.12.06 14:23)
> [15] DelphiLexx © (06.12.06 14:24)
А что у тебя в DeleteSQL или UpdateSQL?
select * from RAW_DICT - Это запрос на ВСЕ записи. Модифицируй его для получения 1 конкретной записи.
← →
DelphiLexx © (2006-12-06 18:49) [17]
> А что у тебя в DeleteSQL или UpdateSQL?
Ты мне скажи в RefreshSQL каким образом офомляется запрос для обновления одной записи через Update или Select.
← →
iva © (2006-12-07 07:13) [18]
> > Нет. Должен быть запрос на обновление одной строки.
>
> И как он должен выглядеть.select * from RAW_DICT WHERE ( ID = :OLD_ID )
где ID - идентификатор строки, ключевое поле, уникальный номер строки ...
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.042 c