![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
При компиляции приложения закрываются все IBDataSet? [D6, IB6.x]
miwa © (2004-05-06 03:28:00)В дизайн-тайм я вижу свои запросы (
Grid.DataSource.DataSet.Active = true), а как только запускаю программу - все гриды девственно чисты (Grid.DataSource.DataSet.Active := true). Использую IBX+EhLib. Это какие-то общие грабли, или я свои собственные изобрел?
Да. В FormCreate специально закомментировал процедуры, которые проводят загрузку данных - все равно после компиляции все гриды пустые.
div (2004-05-15 16:02:00) [1]совет: в будущем постарайся быть просто внимательней...
успеха...
miwa (2004-05-14 17:08:00) [2]Что же. Отругался. А теперь обьясню где была фантастика. В процедуре
procedure CheckDB(DataBase:TIBDataBase;path:string);раньше былоif connected then exit;, а потом я почему-то исправил наConnected:=false;.
И всего-то!!!
Три дня самостоятельных поисков, мля!
Два дня напряга людей на форуме, мля!
Потом еще два дня самостоятельных поисков, мля!
И все из-за одной строки! МЛЯ!!!!!
А вот теперь обьясните мне, пожалуйста,почему? Почему эта замена призвела к тому, что база перестала грузится?
Да. Кстати. Регулярный бекап рулит ;о)).
Miwa (2004-05-12 18:51:00) [3]Ну, это даже не фантастика. Конечно true.
div (2004-05-12 18:34:00) [4]DataSource.Enabled = True?
miwa (2004-05-12 18:12:00) [5]Отдохнул, подумал, успокоился ;о)).
Нет, связка нигде не изменяется. DisableControls нигде не вызывается.
> когда не остается логичных вариантов надо проверять фантастические
> )))
А вот кто скажет, что делать, когда проверены фантастические варианты?
div (2004-05-12 15:24:00) [6]А может где-то вызывается DisableControls?
div (2004-05-12 15:20:00) [7]а как насчет связки DataSet -> DataSource -> DBGridEh? Нигде не изменяется?
когда не остается логичных вариантов надо проверять фантастические )))
Miwa (2004-05-12 15:10:00) [8]Да. Еще на тему уверенности о наличии данных:
for i:=0 to dtmData.ibdFiles.DataSetCount-1 do
if dtmData.ibdFiles.DataSets[i] is TIBDataSet then
begin
dtmData.ibdFiles.DataSets[i].Active:=true;
if dtmData.ibdFiles.DataSets[i].RecordCount <=0 then
raise exception.Create('Dataset empty: '+dtmData.ibdFiles.DataSets[i].Name);
while not dtmData.ibdFiles.DataSets[i].Eof do
begin
s:=s+dtmData.ibdFiles.DataSets[i].Fields[1].AsString+#13#10;
dtmData.ibdFiles.DataSets[i].Next;
end;
S после всего этого равно списку файлов, которые есть в таблице...
miwa (2004-05-12 14:42:00) [9]
> А заглянуть в реализацию Open не судьба?
procedure TDataSet.Open;
begin
Active := True;
end;
Жаль что нет смайлика, обозначающего покраснение ;о)).
> для полной уверенности что у тебя есть данные в датасетах...
for i:=0 to dtmData.ibdFiles.DataSetCount-1 do
if dtmData.ibdFiles.DataSets[i] is TIBDataSet then begin
dtmData.ibdFiles.DataSets[i].Active:=true;
if dtmData.ibdFiles.DataSets[i].RecordCount <=0 then
raise exception.Create('Dataset empty: '+dtmData.ibdFiles.DataSets[i].Name);
end;
Ну, увереность-то есть, так как никаких меседжей нет...
Продолжая тему смайликов
:o(( :'o(( :oE
div (2004-05-12 14:20:00) [10]наврал... ))) извиняюсь
div (2004-05-12 14:18:00) [11]кстати о птичках (с)... только что посмотрел - процедура ShowMessage(...) - не отображает сообщение при вызове в обработчике OnCreate главной формы (а у тебя по сути так и есть)... так что не факт что у тебя нет исключений!!!
div (2004-05-12 14:09:00) [12]ну допустим этот код и не должен вызывать исключения... а вообще для уверенности - убери пока блок try ... except, и оставь только открытие датасетов; и сделай следующее:
dtmData.ibdFiles.DataSets[i].Active:=true;
if dtmData.ibdFiles.DataSets[i].RecordCount <= 0 then
raise Exception.Create('Datataset emty: ' + dtmData.ibdFiles.DataSets[i].Name);
это для полной уверенности что у тебя есть данные в датасетах...
Плохиш (2004-05-12 14:09:00) [13]>miwa © (12.05.04 14:01) [57]
> dtmData.ibdFiles.DataSets[i].Active:=true;
> dtmData.ibdFiles.DataSets[i].Open;//а ведь он уже
> открыт!!!
> except
> on err: exception do showmessage(err.message);
> end;
>
> И все же исключения не увидел.
А заглянуть в реализацию Open не судьба?
miwa (2004-05-12 14:01:00) [14]Э нет, все же не DBGridWEh!!!
Значит так: бросил на форму обычний грид, указал ему датасорс с датасетом - тоже пустой.
Дальше. Сделал явно ошибочный код:
for i:=0 to dtmData.ibdFiles.DataSetCount-1 do
if dtmData.ibdFiles.DataSets[i] is TIBDataSet then
try
dtmData.ibdFiles.DataSets[i].Active:=true;
dtmData.ibdFiles.DataSets[i].Open;//а ведь он уже открыт!!!
except
on err: exception do showmessage(err.message);
end;
И все же исключения не увидел.
Так что проблема все же в наборах данных.
Только вот где?..
Мля!..
div (2004-05-12 13:55:00) [15]в чем я сильно сомневаюсь... )))
miwa (2004-05-12 13:53:00) [16]Значит, проблемы з DBGridEh... Плохо.
Всем спасибо за помощь, иду играться дальше.
Проблемма пока остается открытой, если кто чего надумает - буду очень рад.
div (2004-05-12 13:34:00) [17]смотри нигде по коду не вызывается Transaction.Commit или Transaction.Rollback? Не закрывается ли соединение? Проверь IdleTimer у Transaction (у Database вроде проверил). Если с DB компонентами все впорядке, и DataSet'ы заполнены, значит проблемы с DBGridEh...
miwa (2004-05-12 13:05:00) [18]Блин. Торможу. Да, так и писали, извините.
И все же мы немножко отвлеклись, Вы не считаете?
div (2004-05-12 13:03:00) [19]Хэлп. Цитирую: "Avoid using ClassType in application code."
div (2004-05-12 13:01:00) [20]> Кстати, если убрать .ClassType - тогда все ок:
> if frmMain is TForm then showmessage('well..');
кстати его и надо было убрать... внимательно смотри как тебе писали...