Q&A

  • DLL에서 DB로 접근할 수 있나요??
먼저 제 글에 관심을 가져 주셔서 감사합니다.



전 델파이를 배운지 아니 프로그래밍이라는 것을 배운지 5개월 정도되는



초보인데요..



DLL에 있는 Procedure 에서 간단하게 DB에 있는 테이블에 있는 값들을



참조하고 싶거든요....



DLL에 Form을 추가해서 그곳에 DataBase와 Table component를 놓고



접근해보았는데...compile할때는 error가 나지 않다가....



DLL procedure를 외부에서 호출하면 'Access Violation'이라는 error가..



제가 잘못한 것 같은데...어딜 잘못했는지 잘 모르겠습니다.



혹시 고수님들이나 비슷한 프로그램을 짜 보신분들이 계시면



조언을 부탁드립니다.....



그럼 끝까지 읽어주셔서 감사합니다....Peace!!!



2  COMMENTS
  • Profile
    김태균 1999.08.19 19:43
    제가 한번 구현해 본건데 한번 비교해 보세요.



    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

  • Profile
    김지건 1999.08.19 23:38
    procedure TForm1.Button1Click(Sender : TObject);

    begin

    dbSQLServer.Open;

    myDllCall(dbSQLServer.Handle);////////// 바로 여기...!!!

    end



    먼저 답을 해 주셔서 정말 감사하구요...



    다른 질문이 있어서 이렇게 염치불구하고 또 질문을 날립니다...



    예제는 잘 보았는데요...위에 표시된 부분에서요..



    dbSQLServer의 handle을 입력하는데 있어서 hdbidb가 무엇인지



    식별하지를 못하거든요/?



    어떻게 해야 문제를 해결 할 수 있을지 모르겠네요...



    찾아보니 TDatabase 의 handle은 Integer이고...



    hdbidb는 LongInt이던데...어떻게 형변환을 할 수있는지 모르겠군요..