Проблем с ClientDataSet

6 отговора 173 прегледа
#1

Проблем с ClientDataSet

Здравейте, имам следния проблем:

При следната последователност в една процедура:

procedure OpenCDS (DataSet : TDataSet);
begin
try
TClientDataSet(DataSet).Close;
TClientDataSet(DataSet).Open;
except
on e : Exception
CreateLog(....);
end;
end;

ми дава следното съобщение:
"Access violation at address 00000000. Write of address 00000000"
при TClientDataSet(DataSet).Open
Особеното тук е, че DataSet-a е вързан към компонент TQuery на сървър модула. В Query-то няма
заявка, тя се задава динамично в зависимост от потребителския избор, след успешното изпъление
на заявката се вика горната процедура, а преди това в дадения DataSet не се съдържат данни
и броят на полетата в него е 0.
Не знам дали от това е грешката, но добавих преди извикването на горната процедура едно
поле и пак ми даде горната грешка.
За сведение: използвам MIDAS, FireBird, работи се с ClientDataSet, Query, DataSetProvider, DCOM.
Платформата е Windows XP, Delphi 5.
Моля, ако някой има някакви идеи какъв може да е проблема и как да се реши, нека каже, ще съм
много благодарен.

PS: Ако не съм бил достатъчно ясен в изложението на проблема, кажете ми. Все пак съм нов във
форума и може да съм пропуснал нещо. Междувременно ще се опитам сам да разбера откъде
идва проблема, но ако не успея се надявам по-опитните от мен да ме насочат.

Отговор
в отговор на Daniel #2

Re: Проблем с ClientDataSet

За какво ти е тоя кастинг
можеш да напишеш само:


DataSet.Close;
DataSe.Open

Отговор
в отговор на ¤ Wolfheart ¤ #3

Re: Проблем с ClientDataSet

Кастинга е щото се работи с DataSource.DataSet, който се дава като параметър на процедурата, а в DataModule-a има ClientDataSet-и и между DataSet и ClientDataSet ima razliki та затова правя кастинг-а

Отговор
в отговор на Daniel #4

няма разлики

Дали вика TClientDataSet(DataSet).Close или DataSet.Close е едно и също. Това е една от основните дефиниции на полиморфизма.

P.S. къде точно ти гърми? Сървъра или клиента.

Редактирано от ¤ Wolfheart ¤ на

Отговор
в отговор на Daniel #5

Re: Проблем с ClientDataSet

Да не би DataSet да е nil?

Отговор
в отговор на Йopдaн #6

Re: Проблем с ClientDataSet

Уточнявам:

1. Гърми на клиентската част
2. DataSet-a съм сигурен че не е nil, защото го дебъг-нах и се уверих в това.

В допълнение ще кажа, че заявката на сървъра се изпълнява успешно, но след това при изпълнение на процедурата нещо се скапва и ме съмнява дали не е нещо свързано с FieldDefs или Fields на DataSet-a, понеже тези неща се нагласяват динамично, т.е. преди да се изпълни заявката не се знае какви полета ще има в DataSet-a.

Отговор
в отговор на Daniel #7

Re: Проблем с ClientDataSet

Мерси на всички отзовали се, справих се с проблема. Оказа се че вместо да фрий-вам колоните на гридовете е по-добре да ползвам изчистване (Clear).
Нека модераторите, ако желаят да изтрият темата или да я оставят.

Отговор