Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

При компиляции приложения закрываются все IBDataSet? [D6, IB6.x]


Страницы:   1 2 3 4

miwa ©   (2004-05-06 03:28:00) 

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


miwa   (2004-05-12 12:56:00) [21]

.
> а ты нигде случайно не переопредилил тип TIBDataSet

Нет. И намеренно тоже ;о))


> а она "проявляется" при проверке любых классов?

Да. Во всяком случае, для TForm, TPageControl, TBitBtn, TListBox...
Кстати, если убрать .ClassType- тогда все ок:
if frmMain is TForm then showmessage('well..');
Видим надпись


div   (2004-05-12 12:45:00) [22]

а ты нигде случайно не переопредилил тип TIBDataSet? вообще очень странно...
> Тем не менее, ошибка Operator not applicable to this operand type никуда не делась. Она же проявляется при любой комбинации скобок вокруг is с операндами и в любом модуле проекта.
а она "проявляется" при проверке любых классов?


miwa   (2004-05-12 12:16:00) [23]

unit shared;

interface

uses SysUtils, Classes, IBDatabase, DB, IBCustomDataSet, IBQuery, Buttons,
    CheckLst, Windows, IniFiles, Forms, Graphics, Masks, IB, Controls,
    StrUtils, StdCtrls,
    data, finfo, dialogs, seek;

type
 PnetResourceArr = ^TNetResource;//для сканирования сети
 PList = ^TStringList;           //дополнительно

var
 skin,
 PathProg,
 DefPoster,
 LngFile,
 MiVideoPath,
 FilesDB, FilmsDB:string;

 lang: TStringList;
 //db "films"
 Countries: TIDList;
 Professions: TIDList;
 Zhanres: TIDList;
 //db "files"
 notadded: TStringList;
 files: TIDList;//не ставит, зараза, "Юник" на "варчар (256)"
function LoadLanguage(FileName:string):integer;
procedure ApplyLanguage;
function LoadSettings(FileName:string):integer;
function TryLoadPict(source,numb:string;dest:TBitBtn):integer;
function LoadSkin(SkinDir:string):integer;

function CheckDB(DataBase:TIBDataBase;path:string):integer;
function LoadDBFilms(DataBase:string):integer;
function LoadDBFiles(DataBase:string):integer;
function LoadPathes(dest: TCheckListBox):integer;

function SavePathes:integer;
function SaveSettings(FileName:string):integer;

function GetFileVersion(const FileName: string; separator:char): string;
function GetLANResources(ListRoot:PNetResource; var lst: PList): integer;
procedure SearchMedia;
function TryAddFile(FileName:TFileName):integer;

function AnalizeHTML(sourcefile:string):integer;
procedure SaveListToDB(var src: TIDList; table, f_id, f_name: string);
function GenerateHTML(id:integer):string;
function AnalizeLog(FileName: TFileName;id:integer):integer;

//а это с 7-й версии
function PosEx(const SubStr, S: string; Offset: Cardinal = 1): Integer;
function IntToTime(i:integer):TDateTime;
function ExtractOnlyFileName(const FileName: string): string;
function MakeItem(input,comment,zhanr:string):string;

implementation

uses main;

//=========================================================================


div   (2004-05-12 12:07:00) [24]

покажи интерфейсную часть модуля shared.pas


miwa   (2004-05-12 11:08:00) [25]

Интерессно, а могло так быть, что у меня в shared.pas не подключился модуль system? Извините за возможно тупой вопросс, просто я уже ничего не соображаю. Тем не менее, ошибка Operator not applicable to this operand typeникуда не делась. Она же проявляется при любой комбинации скобок вокруг is с операндами и в любом модуле проекта.


miwa   (2004-05-12 10:38:00) [26]

Это модуль, в котором находятся функции загрузки данных. Он - в одном каталоге с остальными файлами программы. Если быть более точным, то в shared.pas находятся функции LoadDBFiles и CheckDB. FormCreate - в frmMain.pas.
Иду смотрю, почему у меня не в порядке.


div   (2004-05-12 10:32:00) [27]

[Error] shared.pas(314): Operator not applicable to this operand type.??? Странно у меня все в порядке. А что это за модуль shared.pas???


miwa   (2004-05-12 10:24:00) [28]


> div ©

См. (31).


> Соловьев ©

См. (17-18).


> [42] div ©   (12.05.04 09:59)
> и посмотри выполняется ли вообще этот код...

Выполняется, будь он неладен. Проверял уже.


div   (2004-05-12 09:59:00) [29]

поставь брэйкпоинт на строке:
dtmData.ibdFiles.DataSets[i].Open;
и посмотри выполняется ли вообще этот код... дальше будем посмотреть...


Соловьев   (2004-05-12 09:57:00) [30]


> Miwa ©   (12.05.04 09:37) [38]

кнопки F5, F7 и F8 знаешь?


div   (2004-05-12 09:56:00) [31]

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


div   (2004-05-12 09:53:00) [32]

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


Miwa   (2004-05-12 09:37:00) [33]

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


miwa   (2004-05-11 18:54:00) [34]

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

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

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


div   (2004-05-11 18:42:00) [35]

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

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:21:00) [36]

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


div   (2004-05-11 16:15:00) [37]

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

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 16:06:00) [38]

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


div   (2004-05-11 15:54:00) [39]

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


miwa   (2004-05-11 15:41:00) [40]

>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. Но ни один из них не срабатывает. Так что код, наверное, выполняется.


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо