Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];

Вниз

При компиляции приложения закрываются все IBDataSet?   Найти похожие ветки 

 
miwa ©   (2004-05-06 03:28) [0]

В дизайн-тайм я вижу свои запросы (Grid.DataSource.DataSet.Active = true), а как только запускаю программу - все гриды девственно чисты (Grid.DataSource.DataSet.Active := true). Использую IBX+EhLib. Это какие-то общие грабли, или я свои собственные изобрел?
Да. В FormCreate специально закомментировал процедуры, которые проводят загрузку данных - все равно после компиляции все гриды пустые.


 
Johnmen ©   (2004-05-06 09:01) [1]

>или я свои собственные изобрел?

Ага. Это они, Active = true в дизайн-тайм


 
miwa ©   (2004-05-06 09:03) [2]

А что такого? Я подсоединил датасеты в дизайнтайме только чтобы убедится что у меня есть коннект с базой. А активны они или нет - на результат это не влияет. Результат нехороший. :о((


 
Johnmen ©   (2004-05-06 09:13) [3]

>А что такого?
>Я подсоединил датасеты в дизайнтайме только чтобы убедится ...

Убедился - отсоедини. В смысле, закрой.
Коннект и оупен в ран-тайме.


 
miwa ©   (2004-05-06 09:28) [4]

Так и делаю. Все равно все датасеты пустые.


 
Соловьев ©   (2004-05-06 09:34) [5]


> Да. В FormCreate специально закомментировал процедуры, которые
> проводят загрузку данных - все равно после компиляции все
> гриды пустые.

Интересно какие? Может ты транзакции закрыл?


 
Miwa ©   (2004-05-06 10:36) [6]

Не закрывал я транзакций. Тоесть, не так.
Как при закоментированных строках загрузки базы данных так и при разкоментированных; как при установленных active=true в дизайнтайме так и при неустановленных результат один и тот же:
в дизайнайм я могу видеть данные, которые получают соответствующие датасеты, а в рантайм - нет.
Какой код приводить? (в том смысле, что если надо код я приведу, весь и сразу не привожу из-за немаленьких размеров последнего).


 
Соловьев ©   (2004-05-06 10:41) [7]


> Miwa ©   (06.05.04 10:36) [6]

создай новое приложение кинь туда джентельменский набор: датабейс, транзакцию и датасет и попробуй открыть одну таблицу. и запусти. если все ок - то смотри что ты там мадурил(телепатов нет и сказали что не будет их больше), если не появятся - может патч поможет. брать на www.ibase.ru


 
Tomkat   (2004-05-06 11:29) [8]

Вот тебе пример:
есть форма, на ней IBDatabase, IBTransaction, IBDataSet, TDataSource, TGrid.
В дизай-тайме IBDataSet.Active:=false;
В ран-тайме   по собтию MyForm.OnShow

                         Begin
                             ibDataSet.Open;
                          End

             по собтию MyForm.OnClose
     
                         Begin
                             ibDataSet.close;
                          End ;

Я так всегда творю и проблем никаких ...
если я правильнопонял твою проблему ..


 
Кщд ©   (2004-05-06 14:02) [9]

Tomkat   (06.05.04 11:29) [8]
каждый раз при Visible=true открывать набор - не есть хорошо в общем случае, имхо.


 
Кщд ©   (2004-05-06 14:03) [10]

Tomkat   (06.05.04 11:29) [8]
каждый раз при Visible=true открывать набор - не есть хорошо в общем случае, имхо.


 
Карелин Артем ©   (2004-05-06 14:05) [11]

Может пользуешься персональным яфелем или внедренным FB?


 
Miwa ©   (2004-05-06 17:43) [12]

> Tomkat   (06.05.04 11:29) [8]
Нет, проблема несколько в ином.

>Карелин Артем ©   (06.05.04 14:05) [11]
Тестирую на Interbase 5.5 на работи и Firebird 1.03 дома. В обеих случаях тот же баг.

Наверное, прав Соловьев - надо 25-й раз код шерстить. Если ничего не накопаю, опять приду жаловаться ;о))


 
Miwa ©   (2004-05-06 21:03) [13]

Нет, ничего таки не нашерстил. Так что все же прошу еще раз помощи. Код для FormCreate спрощенно выглядит так:
procedure TfrmMain.FormCreate(Sender: TObject);
var err:integer;
begin
 PathProg:=ExtractFilePath(Application.ExeName);
 LoadSettings(PathProg+"mividex.ini");
 LoadLanguage(lang);
 LoadSkin(skin);//skin - это глобальная переменная
 LoadDBFilms(FilmsDB);//так же как и остальные
 LoadDBFiles(FilesDB);//FilesDB="правильный путь к базе"

 for err:=0 to frmMain.ComponentCount-1 do
   if (Components[err].ClassName = "TDBGridEh")
     then (Components[err] as TDBGridEh).RestoreColumnsLayoutIni(PathProg+"MiVidEx.ini",(Components[err] as TDBGridEh).Name,[crpColWidthsEh]);

 LoadPathes(clbPathes);
 wbbFilms.Navigate("about:blank");
end;


Собственно LoadDBFiles, если спростить, то такая:

function LoadDBFiles(DataBase:string):integer;
var i:integer;
   err: Exception;
begin
 try
   CheckDB(dtmData.ibdFiles, DataBase);
   for i:=0 to dtmData.ibdFiles.DataSetCount-1 do
   try
     if dtmData.ibdFiles.DataSets[i].ClassType = TIBDataSet
       then  dtmData.ibdFiles.DataSets[i].Active:=true;
   except
   end;
   //дальше несущественно
 except
   on err:exception do begin
     result:=-1;
     showmessage(err.Message);
   end;
 end;
end;


Ну и выделенная процедурка:
procedure CheckDB(DataBase:TIBDataBase;path:string);
begin
 with DataBase do begin
   Connected:=false;
   DatabaseName:=path;
   Params.Clear;
   Params.Add("user_name=MIVIDEX");
   Params.Add("password=mividex");
   Params.Add("lc_ctype=WIN1251");
   Open;
   DefaultTransaction.Active:=true;
 end;//with
end;

Вот...
А теперь еще раз вопросс: почему вышенаведенный код не призводит к загрузке базы?


 
Miwa ©   (2004-05-11 13:20) [14]

Мда.
В горы съездил, отдохнул, вроде, а даже со свежей головой ничего придумать не могу. Помогите нерадивому :о((.


 
Fay ©   (2004-05-11 13:57) [15]

А в dt и rt на одну и ту же базу смотрим?


 
miwa ©   (2004-05-11 14:21) [16]

Только что проверял. Да. Правда, в DT она была прописана, как .\files.gdb а в RT - полное имя(получаю с ини-файла). Поменял (теперь всюду - полное имя, еще раз повторюсь - правильное), но ничего не помогло.


 
Плохиш   (2004-05-11 14:28) [17]

>Miwa ©   (06.05.04 21:03) [13]

А Вы вообще знаете для чего в Delphi кнопки F7/F8 существуют?


 
miwa ©   (2004-05-11 14:33) [18]

Как ни странно ;о)).
Более того, я по Ф7 пробежался по всему коду загрузки программы. И она, сосиска разтакая, ни разу нигде не ругнулась. Все всюду хорошо, да только данных в гридах как не было, так и нет.


 
Плохиш   (2004-05-11 14:37) [19]

>miwa ©   (11.05.04 14:33) [18]

тогда одно из двух, или наборы данных пустые, или код открытия их не выполняется.


 
miwa ©   (2004-05-11 14:44) [20]

Минут пять назад запустил следующий код:
with dtmData.IBQuery1 do begin
 SQL.Add("SELECT * FROM files");
 Open;
 s:="";
 while not eof do begin
   s:=s + Fields[0].AsString;
 end;
 showmessage(s);
end;

Жду. Выполняется. В таблице files до сотни записей.
Нет, код так и не зпустился. Скомпилировал приложение, запустил напрямую (не из Дельфи) - заняло 98% рессурсов и все.
Копаю дальше. Не подскажете, куда?
Кстати, могла ли проблема вылезти при смене юзера (с SYSDBA на MIVIDEX)? При том, что в DT и IBExpert та же смена прошла безболезненно.


 
Соловьев ©   (2004-05-11 14:47) [21]


> with dtmData.IBQuery1 do begin
>  SQL.Add("SELECT * FROM files");
>  Open

SQL.Clear;


> Все всюду хорошо, да только данных в гридах как не было,
> так и нет.

Так на всякий случай - а гриді подключены к сорсам?

И еще - делал как я говорил? новый проект?


> (с SYSDBA на MIVIDEX)?

а как это? вроде этого нельзя сделать никак :)


 
Miwa ©   (2004-05-11 14:59) [22]

> 20
Конечно, там я пропустил Next;. С "некстом" все ОК.

Тоесть, я вижу ети чертовы данные. Блин.

>21
>SQL.Clear;
Знаю. Это тестовый запрос.

>Так на всякий случай - а гриді подключены к сорсам?
Да. В дизайн-тайме же все видно.

>И еще - делал как я говорил? новый проект?
Да. В новом проекте - все в порядке.

>а как это? вроде этого нельзя сделать никак :)
Не, ну почему же :о))
Сперва добавил нового юзера на сервере, потом поменял параметры

соединения (username=sysdba на username=mividex).

Программа работает с двумя базами и с "files" я думал, что все

закончил. Поетому, добившись исполнения нужных мне функций я не

смотрел на нее уже с месяц. А когда посмотрел... Вот...


 
Соловьев ©   (2004-05-11 15:04) [23]


> Сперва добавил нового юзера на сервере, потом поменял параметры

аа... ты про это :)


 
Соловьев ©   (2004-05-11 15:15) [24]


> Сперва добавил нового юзера на сервере, потом поменял параметры
>
>
> соединения (username=sysdba на username=mividex).

а правда ты дал ему? и еще в дизайне SYSDBA?


 
Соловьев ©   (2004-05-11 15:17) [25]


> а правда

:) - права


 
miwa ©   (2004-05-11 15:19) [26]

Ага.
Копаю дальше.
В тестовом запросе SQL сделал такой же, как в одном из неработающих датасетов.
И данные вижу, блин! Тоесть, вроде бы проблемма в том, что не открываются сами датасеты в следующих строках (13-й ответ)
  for i:=0 to dtmData.ibdFiles.DataSetCount-1 do
  try
    if dtmData.ibdFiles.DataSets[i].ClassType = TIBDataSet
      then  dtmData.ibdFiles.DataSets[i].Active:=true;
  except
  end;

Но почему?
Поменял приведенный фрагмент на такой:

   for i:=0 to dtmData.ibdFiles.DataSetCount-1 do
     if dtmData.ibdFiles.DataSets[i].ClassType = TIBDataSet then
       try
         dtmData.ibdFiles.DataSets[i].Open;
       except
         on err: exception do showmessage(err.message);
       end;

И НИ ОДНОГО СООБЩЕНИЯ!
Тоесть, датасеты открываются?!?!
Иду вешаться.


 
miwa ©   (2004-05-11 15:20) [27]

Ага.
Копаю дальше.
В тестовом запросе SQL сделал такой же, как в одном из неработающих датасетов.
И данные вижу, блин! Тоесть, вроде бы проблемма в том, что не открываются сами датасеты в следующих строках (13-й ответ)
  for i:=0 to dtmData.ibdFiles.DataSetCount-1 do
  try
    if dtmData.ibdFiles.DataSets[i].ClassType = TIBDataSet
      then  dtmData.ibdFiles.DataSets[i].Active:=true;
  except
  end;

Но почему?
Поменял приведенный фрагмент на такой:

   for i:=0 to dtmData.ibdFiles.DataSetCount-1 do
     if dtmData.ibdFiles.DataSets[i].ClassType = TIBDataSet then
       try
         dtmData.ibdFiles.DataSets[i].Open;
       except
         on err: exception do showmessage(err.message);
       end;

И НИ ОДНОГО СООБЩЕНИЯ!
Тоесть, датасеты открываются?!?!
Иду вешаться.


 
Плохиш   (2004-05-11 15:27) [28]

>miwa ©   (11.05.04 15:20) [27]

Осталось только строчку

>      if dtmData.ibdFiles.DataSets[i].ClassType = TIBDataSet then

Заменить на

    if dtmData.ibdFiles.DataSets[i] is TIBDataSet then

или выкинуть, для проверки, совсем.


 
Плохиш   (2004-05-11 15:28) [29]


> И НИ ОДНОГО СООБЩЕНИЯ!
> Тоесть, датасеты открываются?!?!

или код не выполняется, не забываем.


 
miwa ©   (2004-05-11 15:31) [30]

>25
Конечно что дал.
Говорю - в ИБЭксперте, дизайнтайме и рантайме все одинаково, да только в рантайме нифига не видно.
Может, это ЭхЛиб глючит? Никто ни с чем похожим не встречался?

>модератор
27-й пост - результат ошибки. Тоесть, у меня загрузилась "Internal server error" и я нажал "<--", "Добавить".


 
miwa ©   (2004-05-11 15:41) [31]

>28
>Заменить на if dtmData.ibdFiles.DataSets[i] is TIBDataSet then
[Error] shared.pas(314): Operator not applicable to this operand type

> выкинуть, для проверки, совсем.
Получил только "Empty SQL statement" для четырех IBQuery, которые заполняются позже.

>или код не выполняется, не забываем.
Тоесть, по F7 выполняется, а по F9 - нет? По F7, кстати, тоже ничего не ругается, но и данных не видно.
Кстати, в 13 я привел фрагменты кода, которые грузят данные. Все они обрамлены try-except-тами, в которых есть showmessage(err.message) или result:=-1. Но ни один из них не срабатывает. Так что код, наверное, выполняется.


 
div ©   (2004-05-11 15:54) [32]

был у меня однажды такой прикол - в Database случайно поставил значение свойства IdleTimer в 10... в дизайне все есть, запускаю - все пусто... долго же я боролся... посмотри может и тебя такая же "беда" )))


 
miwa ©   (2004-05-11 16:06) [33]

Нет, я, наверное, другое свойство поменял ;о)). Вообще-то они у меня дефолтные кроме имени, транзакции и имены БД. А. Еще loginprompt=false, по-дефолту, вроде, нет. :о)).


 
div ©   (2004-05-11 16:15) [34]

заинтересовал меня следующий код:

for err:=0 to frmMain.ComponentCount-1 do
  if (Components[err].ClassName = "TDBGridEh")
    then (Components[err] as TDBGridEh).RestoreColumnsLayoutIni(PathProg+"MiVidEx.ini",(Components[err] as TDBGridEh).Name,[crpColWidthsEh]);

открой свою ini-шку и сотри все сохраненные настройки гридов...


 
Miwa ©   (2004-05-11 18:21) [35]

>34
>открой свою ini-шку и сотри все сохраненные настройки гридов.
Нет, не прошло :о((.


 
div ©   (2004-05-11 18:42) [36]

очень похоже что код:

for i:=0 to dtmData.ibdFiles.DataSetCount-1 do
    if dtmData.ibdFiles.DataSets[i].ClassType = TIBDataSet then
      try
        dtmData.ibdFiles.DataSets[i].Open;
      except
        on err: exception do showmessage(err.message);
      end;

выполняется ДО того как происходит внутреннее связывание DataSet"ов с DataBase. Попробуй поставить в опциях проекта свой дата-модуль (dtmData) ДО главной формы (frmMain)...


 
miwa ©   (2004-05-11 18:54) [37]

>div ©   (11.05.04 18:42) [36]
Я очень благодарен за проявленное внимание, но все же... Вот отрывок из .dpr файла:

 Application.CreateForm(TdtmData, dtmData);
 Application.CreateForm(TfrmMain, frmMain);

Это наверное, то же, что и поставить в опциях проекта свой дата-модуль (dtmData) ДО главной формы (frmMain).
Вопросс открыт.


 
Miwa ©   (2004-05-12 09:37) [38]

Все еще ничего не накопал.


 
div ©   (2004-05-12 09:53) [39]

попробуй
if dtmData.ibdFiles.DataSets[i].ClassType = TIBDataSet then ...
заменить на:
if dtmData.ibdFiles.DataSets[i] is TIBDataSet then ...


 
div ©   (2004-05-12 09:56) [40]

или вообще убери эту проверку - она лишняя...



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

Форум: "Базы";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.03 c
14-1084563248
ИМХО
2004-05-14 23:34
2004.06.06
Такое возможно?


1-1085576239
Kiloper
2004-05-26 16:57
2004.06.06
Как мне в TImage вывести gif рисунок


4-1083512654
Tuman
2004-05-02 19:44
2004.06.06
Как назначить событие кнопке?


1-1085208132
Leaner
2004-05-22 10:42
2004.06.06
Дозапись в PByte


6-1082522476
Kolyan
2004-04-21 08:41
2004.06.06
Сообщение





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский