Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-101517
Pat
2002-10-11 22:43
2002.10.31
Что делать, если я сломал палец...


14-101507
DeepProg
2002-10-12 15:27
2002.10.31
Fight Club


14-101474
Skier
2002-10-10 11:44
2002.10.31
Мужчина и Женщина


1-101241
Kpv
2002-10-22 10:29
2002.10.31
Динамическое меню


7-101557
Wman
2002-08-23 10:30
2002.10.31
дамп из физической памяти





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