Q&A

  • DLL에서 DB로 접근하기
전에도 한번 올렸는데 또 올리게 되네요....



능력이 미천한 사람이 여러사람들을 귀찮게 하는 것 같아서 정말 죄송합니다.



나름대로 해결해 볼려고 했으나 잘 되질 않는군요..



전에 제가 질물했을때 김태균님께서 답변을 해 주셨으나...



태균님의 procedure는 메인폼에서 DLL함수를 호출할 때



Database의 handle값을 넘겨주는데....



이렇게 하면 type이 일치하지 않는다는 error message가 자꾸 떠서리....



다음은 태균님의 source인데 고수님들의 한수지도를 부탁...



============================================================

library testdll;



uses

bde, db, dbtables, dialogs;



procedure myDLLCall(dbHandle : hdbidb); stdcall;

var

Database : TDatabase;

Query : TQuery;

begin

Database := TDatabase.Create(nil);

try

Database.DatabaseName := 'Test'; {새 알리아스}

Database.Handle := dbHandle;

Query := TQuery.Create(nil);

try

with query do

begin

DatabaseName := Database.DatabaseName;

Close;

SQL.Clear;

SQL.Add('SELECT SYSDATE FROM DUAL');

Open;

ShowMessage(Query.FieldByName('SYSDATE').AsString);

end;

finally

Query.Free;

end;

finally

Database.Free;

end;



exports

myDllCall;



begin

end.





//프로그램에서 호출과 사용

unit appl;



uses

Windows, Messges, SysUtils, Classes, Graphics, Contrils,

Forms, Dialogs, StdCtrls, DB, BDE;



type

TForm1 = class(TForm)

dbSQLServer : TDatabase;

Button1 : TButton;

procedure Button1Click(Sender : TObject);

end;



var

Form1 : TForm;



procedure myDllCall(dbHandle : hdbidb); stdcall; external 'TESTDLL.DLL'



implementation



{$R *.DFM}



procedure TForm1.Button1Click(Sender : TObject);

begin

dbSQLServer.Open;

myDllCall(dbSQLServer.Handle); ///////바로 여기에서 Error가..흑..

end



============================================================

hdbidb와 dbSQLServer.Handle의 type이 일치하지 않는다는 Error가...



가르침을 주시면 정말 고맙겠습니다....









0  COMMENTS