Вниз
Скачать: CL | DM;

Всё тот же кэш.   Найти похожие ветки 

← →
UncleRu ©   (2002-03-06 18:06) [0]

Объясните в чём проблемс. Есть Таблица в IB5.0 с полями: PACIENT_ID: Integer (уникальный номер записи, вставляется с помощью генератора), NAME: Varchar, BIRTHDAY: Data. Выполняю с ней манипуляции с помощью кэшированных данных (CachedUpdates:=True). Всё прекрасно работает, данные чётко пересылаются в БД при ApplayUpdates, но вот очистка кэша не работает, т.е. при выполнении CancelUpdates машина просто виснет. Причём если выполняешь манипуляцию только с одной записью (только один insert либо delete либо update), то никаких глюков нет – CancelUpdates выполнятся без проблем. Сделал проверку кода в IBCustomDataSet.pas, чтоб глянуть где могёт быть глюк при выполнении этого метода и экспериментальными методами обнаружил что зависание происходит при выполнении цикла в procedure TIBCustomDataSet.CancelUpdates


while not EOF do
begin
RevertRecord;
Next;
end;

Причём именно на RevertRecord происходит подвисание. Объясните, пожалуйста, в чём может быть проблема? Почему с одной записью всё нормально проходит, а с больше чем одной нет, и как с этим бороться?


← →
Saha ©   (2002-03-06 18:24) [1]

TBDEDataSet.CommitUpdates - Clears the cached updates buffer.
А CancelUpdates отменяет внесенные изменения.
Из вопроса непонятно что вам нужно.
И сам код процедуры записи не плохо бы посмотреть.


← →
UncleRu ©   (2002-03-07 11:39) [2]

Я не использую BDE. Использую только компоненты InterBase: IBQuery с IBUpdateSQL. IBQuery.CachedUpdates:=True.
Вот код вставки записей:

IBQPatient.Insert;
IBQPatient.FieldByName("NAME").Value:=fmAddPacient.edFIO.Text;
IBQPacientBIRTHDAY.Value:=fmAddPacient.DateTimePicker1.Date;
IBDSPatient.Post;

После этого запись чётко отображается в DBGrid а параметр IBQPatient.UpdatesPending:=True;
Затем отрабатываем отмену всех изменений, т.е. очищаем кэш:

procedure TfmEnterBD.btnCancelClick(Sender: TObject);
begin
/IBDSPatient.CancelUpdates;
end;

Вот тут и начинается проблема о которой я писал выше. Из-за чего это может быть? И как с эти бороться? Почему при вставке одной записи проходит всё гладко, а при вставке большего числа записей машина подвисает?


← →
Alexandr ©   (2002-03-07 11:45) [3]

дык
1) версию IBX возьми поновее, может поможет.
2) А поглубже покопаться в исходниках? Чего там при RevertRecord делается...


← →
Saha ©   (2002-03-07 12:43) [4]

Вместо Post используй ApplyUpdates.
Далее CancelUpdates как раз и используется для группы записей
а для одной нужно использовать RevertRecord.

IBQPatient.Insert;
IBQPatient.FieldByName ("NAME").Value:=fmAddPacient.edFIO.Text; IBQPacientBIRTHDAY.Value:=fmAddPacient.DateTimePicker1.Date;
IBDSPatient.Post;
^ это что ?
Insert делаешь у квери а Post у кого?


← →
UncleRu ©   (2002-03-07 14:38) [5]

To Sasha.

Там ошибка, извиняюсь, просто я всё по памяти писал. Вместо IBDSPatient.Post естественно IBQPatient.Post.

Что значит использывать ApplyUpdates вместо Post?! Это совершенно разные фунуции, ApplyUpdates сразу все изменения произведённые в кэше отошлёт в БД, а Post заносит данные именно в кэш. Какой смысл тогда использывать кэш?


← →
UncleRu ©   (2002-03-16 13:38) [6]

Решил проблему! Всё очень просто :-) - поставил Delphi 6 и всё заработало... Видать ошибка была в самом коде IB.pas.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.008 c
1-22771
hp1100
2002-03-26 09:30
2002.04.08
Как прога может узнать полный путь к своему ярлыку(!) ?


1-22646
IronHawk
2002-03-27 12:30
2002.04.08
Как обыкновенную ToolBar-ину сделать вертикальной ? Все её свойства и её саму повернуть на 90° ???


4-22894
BDRON
2002-02-05 21:17
2002.04.08
Запустить две программы подряд.


1-22696
andr
2002-03-26 14:52
2002.04.08
Как в Word вставить таблицу?


3-22554
Sergant
2002-03-15 15:50
2002.04.08
Не могу совладать c EhLib 2.1




   Наверх