Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
4-1155917847
Kubivan
2006-08-18 20:17
2006.12.24
Перезагрузка WindowsXP


2-1165214074
Handle
2006-12-04 09:34
2006.12.24
TTreeView


2-1165229272
Roman_ln
2006-12-04 13:47
2006.12.24
comboBox ??? отмена редактироания в текстовом поле


15-1165226990
TohaNik
2006-12-04 13:09
2006.12.24
Зима не спешит.


2-1165163247
Михаил_2006
2006-12-03 19:27
2006.12.24
Многозвенная БД в Turbo Delphi. Как?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский