Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.31;
Скачать: CL | DM;

Вниз

Что это за фигня   Найти похожие ветки 

 
Demon[DZ]   (2002-10-21 18:33) [0]

Я написал ДЛЛ. И когда я вызываю функцию из этой ДЛЛ то выдаётся error (Declared cursor already exists). Помогитеб как от этого избавится??
Заранее благодарен!


 
Sly ©   (2002-10-21 19:52) [1]

Как это здесь называется... Nuts?


 
Demon[DZ]   (2002-10-22 11:16) [2]

Если честно, то я не понял!!!

Неужели никто неможет мне помоч, значит придётся похоронить мою затею :(


 
Skier ©   (2002-10-22 11:18) [3]

>Demon[DZ]
Ошибка в 17 строке...


 
Demon[DZ]   (2002-10-22 11:21) [4]

Очень смешно!


 
Игорь Шевченко ©   (2002-10-22 11:21) [5]

Demon[DZ] (22.10.02 11:16)

Код внимательно просмотреть. Если не поможет - поделиться. Если не поможет - скачать любой доступный выпрямитель.


 
Рыжик ©   (2002-10-22 11:24) [6]

БД?


 
Smithson ©   (2002-10-22 11:25) [7]

Короче, дай код. Кто ж тебе расскажет, где ты что напорол, не видя твоего шедевра?


 
Demon[DZ]   (2002-10-22 11:31) [8]

ок вот код ДЛЛ, а вот программы - очень большой.
Когда текст ДЛЛ находился в основной проге, то было всё ОК.
Как токо перенёс в ДЛЛ, так сразу ЕРРОР.


library SQLFunc;
uses
SysUtils,
Classes,
Dialogs,
IBDataBase,
OraDB,
IBQuery;

type TJobInfo = record
SalesNr,
Empl_ID,
EmplName,
LastEmpl_ID,
Job_ID,
Job_Descr,
PacelType : string;
JobLength,
Price,
Discount : Real;
OrderValue : SmallInt;
StartTime,
EndTime : TDateTime;
Color : Integer;
Key : string;
SalesRowsEdit,
ChengeStartTime : Boolean;
LastFlag,
Action,
Error,
Job_Type,
JobNr : SmallInt;
end;

TConnectInfo = record
IDataBase : TIBDataBase;
ITransaction : TIBTransaction;
ODataBase : TOraDB;
end;
{$R *.RES}
{==============================================================================}
function fn_GetJobStartTime(var InJob: TJobInfo; var InConn: TConnectInfo): TDateTime; stdcall;
var Query : TIBQuery;
begin
Query := TIBQuery.Create(nil);
with (Query) do
begin
DataBase := InConn.IDataBase;
Transaction := InConn.ITransaction;
SQL.Clear;
SQL.Add("select min(jobstarttime) "+
"from o_works "+
"where sales_nr = :SNR "+
"and empl_id = :EID "+
"and job_id = :JID");
Params[0].AsString := InJob.SalesNr;
Params[1].AsString := InJob.Empl_ID;
Params[2].AsString := InJob.Job_ID;
Open;
Result := Fields[0].AsDateTime;
Close;
end;
end;
{==============================================================================}
function fn_GetJobEndTime(var InJob: TJobInfo; var InConn: TConnectInfo): TDateTime; stdcall;
var Query : TIBQuery;
begin
Query := TIBQuery.Create(nil);
with (Query) do
begin
DataBase := InConn.IDataBase;
Transaction := InConn.ITransaction;
SQL.Clear;
SQL.Add("select max(jobendtime) "+
"from o_works "+
"where sales_nr = :SNR "+
"and empl_id = :EID "+
"and job_id = :JID");
Params[0].AsString := InJob.SalesNr;
Params[1].AsString := InJob.Empl_ID;
Params[2].AsString := InJob.Job_ID;
Open;
Result := Fields[0].AsDateTime;
Close;
end;
end;


 
Demon[DZ]   (2002-10-22 11:32) [9]

{==============================================================================}
function fn_GetJobLength(InJob: TJobInfo; var InConn: TConnectInfo): real; stdcall;
var Query : TIBQuery;
begin
Query := TIBQuery.Create(nil);
with (Query) do
begin
DataBase := InConn.IDataBase;
Transaction := InConn.ITransaction;
SQL.Clear;
SQL.Add("select sum(joblength) "+
"from o_works "+
"where sales_nr = :SNR "+
"and empl_id = :EID "+
"and job_id = :JID");
Params[0].AsString := InJob.SalesNr;
Params[1].AsString := InJob.Empl_ID;
Params[2].AsString := InJob.Job_ID;
Open;
Result := Fields[0].AsFloat;
Close;
end;
end;
{==============================================================================}
function fn_GetMaxOrder(var InJob: TJobInfo; var InConn: TConnectInfo): integer; stdcall;
var Query : TIBQuery;
begin
Query := TIBQuery.Create(nil);
with (Query) do
begin
DataBase := InConn.IDataBase;
Transaction := InConn.ITransaction;
SQL.Clear;
SQL.Add("select max(joborder) from o_works where sales_nr = :SNR");
Params[0].AsString := InJob.SalesNr;
Close;
Open;
Result := Fields[0].AsInteger;
Close;
end;
end;
{==============================================================================}
function fn_GetNextTime(PasutNr : string; var InConn: TConnectInfo): TDateTime; stdcall;
var Query : TIBQuery;
begin
Query := TIBQuery.Create(nil);
with (Query) do
begin
DataBase := InConn.IDataBase;
Transaction := InConn.ITransaction;
SQL.Clear;
SQL.Add("select max(jobendtime) "+
"from o_works "+
"where sales_nr = :P_Nr");
Params[0].AsString := PasutNr;
Open;
Result := Fields[0].AsDateTime;
Close;
end;
end;
{==============================================================================}
function fn_GetNextColor(var STime: TDateTime; var InConn: TConnectInfo): integer; stdcall;
var Ts, Te: TDateTime;
Y, N: integer;
Query : TIBQuery;
begin
Query := TIBQuery.Create(nil);
Ts := StrToDateTime(DateToStr(STime)+" 00:00");
Te := StrToDateTime(DateToStr(STime)+" 22:00");

with (Query) do
begin
DataBase := InConn.IDataBase;
Transaction := InConn.ITransaction;
SQL.Clear;
SQL.Add("select distinct jobcolor "+
"from o_works "+
"where (jobstarttime between :N1 and :N2) "+
"order by jobcolor");
Params[0].AsDateTime := Ts;
Params[1].AsDateTime := Te;
Open;
Last;
Y := Fields[0].AsInteger;
if (Y = null) then Y := 0;
Inc(Y);
if (Y > 18) then Y := 1;
N := 1;
while ((Locate("jobcolor", Y, [])) or (N=18)) do
begin
Inc(Y);
if (Y > 18) then Y := 1;
Inc(N);
end;
Close;

if (N=18) then
begin
Result:=-1;
ShowMessage("Atvainoiet, bet


 
Skier ©   (2002-10-22 11:34) [10]

>Demon[DZ]
Сразу вопрос :
А где ты Query освобождаешь ?


 
Demon[DZ]   (2002-10-22 11:35) [11]

Опа....
А неподскажеш как правильно освободить?


 
Skier ©   (2002-10-22 11:38) [12]

>Demon[DZ]

{==============================================================================}
function fn_GetJobLength(InJob: TJobInfo; var InConn: TConnectInfo): real; stdcall;
var Query : TIBQuery;
begin
Query := TIBQuery.Create(nil);
try
with (Query) do
begin
DataBase := InConn.IDataBase;
Transaction := InConn.ITransaction;
SQL.Clear;
SQL.Add("select sum(joblength) "+
"from o_works "+
"where sales_nr = :SNR "+
"and empl_id = :EID "+
"and job_id = :JID");
Params[0].AsString := InJob.SalesNr;
Params[1].AsString := InJob.Empl_ID;
Params[2].AsString := InJob.Job_ID;
Open;
Result := Fields[0].AsFloat;
Close;
end;
finally
FreeAndNil(Query);
end; //try
end;
{==============================================================================}


 
Demon[DZ]   (2002-10-22 11:46) [13]

Ну вроде всё переправил, но ошибка неизчезла:(


 
Demon[DZ]   (2002-10-22 12:08) [14]

Жалко что ни укого нет больше идей:((


 
Demon[DZ]   (2002-10-22 12:41) [15]

Знатоки откликнитесь!
Я уже замучался.....


 
Smithson ©   (2002-10-22 12:58) [16]

ShareMem в uses библиотеки и программы (первым!)


 
Demon[DZ]   (2002-10-22 13:16) [17]

Извени, а при чем здесь ShareMem???


 
han_malign ©   (2002-10-22 13:20) [18]

ShareMem - для того что бы открытые строки можно было из DLL передавать.


 
Demon[DZ]   (2002-10-22 13:24) [19]

ShareMem наскоко мне известно, нужно если в кач-ве результата функ. используется "string"!
А у меня вроде нигде неисп.
"Declared cursor alredy exists" - это вроде Interbase-ая ошибка!!


 
Smithson ©   (2002-10-22 13:50) [20]

Ты внимательно читал исходники TQuery?


 
Restart   (2002-10-22 14:05) [21]

На всякий случай: надо освобождать Query во всех функциях. А потом попробуй перезагрузить InterBase


 
Demon[DZ]   (2002-10-22 16:04) [22]

К сведению: Эта ошибка выскакивает при первом вызове, а при последующих вызовах всё ОК.
Она появляется после оператора Open;



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

Текущий архив: 2002.10.31;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.015 c
14-101449
Rouse_
2002-10-08 23:27
2002.10.31
Встреча в МОСКВЕ


1-101255
Jul
2002-10-22 11:44
2002.10.31
динамической загрузке DLL


8-101389
onio
2002-07-04 17:34
2002.10.31
Как векторизировать растровое изображение?


14-101434
Jackson
2002-10-08 21:50
2002.10.31
Два вопроса


3-101096
Vovaka
2002-10-09 15:16
2002.10.31
Знатоки и пользователи Sybase ASE подскажите