Форум: "Основная";
Текущий архив: 2002.10.31;
Скачать: [xml.tar.bz2];
ВнизЧто это за фигня Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.01 c