![]() |
| ||
|
|
Новости |
Поиск |
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 специально закомментировал процедуры, которые проводят загрузку данных - все равно после компиляции все гриды пустые.
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. Но ни один из них не срабатывает. Так что код, наверное, выполняется.