먼저 제 글에 관심을 가져 주셔서 감사합니다.
전 델파이를 배운지 아니 프로그래밍이라는 것을 배운지 5개월 정도되는
초보인데요..
DLL에 있는 Procedure 에서 간단하게 DB에 있는 테이블에 있는 값들을
참조하고 싶거든요....
DLL에 Form을 추가해서 그곳에 DataBase와 Table component를 놓고
접근해보았는데...compile할때는 error가 나지 않다가....
DLL procedure를 외부에서 호출하면 'Access Violation'이라는 error가..
제가 잘못한 것 같은데...어딜 잘못했는지 잘 모르겠습니다.
혹시 고수님들이나 비슷한 프로그램을 짜 보신분들이 계시면
조언을 부탁드립니다.....
그럼 끝까지 읽어주셔서 감사합니다....Peace!!!
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);
end