Q&A

  • (긴급~)dll에서 DB사용법
안녕하세요 !!

저는 델파이를 처음 사용하여 개발하는 김승현이라고 합니다.

개발중에 어려운 문제에 접하여 도움을 청합니다.

저희가 구현하려는 환경은 CORBA를 이용하여 서버모듈과 클라이언트모듈을

두고, 클라이언트 모듈은 업무메인화면(.exe)에 업무별로 Form을 작성하려고

합니다.

그런데 SDI로 구현하자니 거래화면 분기시마다 Corba Connect시간이 오래

걸리고 MDI밑에 Child Form으로 구현하자니 실행화일이 너무 큽니다.

그래서 Child Form을 DLL로 구성하려고 하는데 Corba Connect루틴이 없으면

제대로 구현되는데, 이부분만 추가하면 Error가 발생합니다.



예) Access violation, Stack overflow, runtime error-216등...



긴급한 관계로 빠른 답변 부탁드리겠습니다...

추가로 간단한 예제도 포함해주시면 감사합니다...

1  COMMENTS
  • Profile
    왕초보 1999.05.14 18:16
    저도 초보라서.. 정확한 답변이 될런지는 모르겠지만 도움일 될까해서

    제가 Dll에서 db쓰는 source를 알려드리겠습니다......

    저도 여기서 무진장 많이 도움을 받고 있거던요...



    library libmenu;

    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    ActnList, StdCtrls, ExtCtrls, Buttons, ComCtrls, Db, DBTables, ImgList,

    ToolWin, Menus, bde;

    {$r bullet.res}

    type

    Pinfo = ^TINfo;

    Tinfo = record

    jobid: integer;

    buttonid: integer;

    pgmid: integer;

    menutext: string;

    module: string;

    end;

    var

    database: tdatabase;

    query: Tquery;

    Procedure libmenu_init(dbhandle: HDBIDB); stdcall;

    Begin

    database := Tdatabase.create(nil);

    database.databasename := 'dll_db';

    database.Handle := dbHandle;

    query := tquery.create(nil);

    query.databasename := database.databasename;

    end;



    procedure libmenu_loadmenu(treeview1: TTreeview); stdcall;

    var

    i: integer;

    a1,a2,a3: integer;

    t,t2: string;

    CurItem, subitem, lastitem: TTreeNode;

    NewInfo: Pinfo;

    begin

    with query do Begin

    close;

    sql.add('SELECT JOBID, BUTTONID, PGMID, MENUTEXT, PGMTEXT, MODULE, REMARK ');

    sql.add(' FROM menu Menu ');

    sql.add(' ORDER BY JOBID DESC, BUTTONID, PGMID ' );

    open;

    end;

    with query, treeview1 do

    for i:=0 to recordcount - 1 do Begin

    a1 := fields[0].asinteger;

    a2 := fields[1].asinteger;

    a3 := fields[2].asinteger;

    t := fields[3].asstring;

    if (a3 <> 0) then Begin

    lastitem := items.addchild(subitem,t);

    lastitem.imageindex := 0;

    end

    else if (a2 <> 0) then begin

    New(NewInfo);

    NewInfo^.jobid := a1;

    NewInfo^.buttonid := a2;

    NewInfo^.Pgmid := a3;

    NewInfo^.menutext := t;

    if fields[5].isNull then NewInfo^.module := ''

    else NewInfo^.module := fields[5].asstring;

    subitem := items.AddChildObject(curitem,t,NewInfo);

    subitem.imageindex := 2;

    end

    else begin

    New(NewInfo);

    NewInfo^.jobid := a1;

    NewInfo^.buttonid := a2;

    NewInfo^.Pgmid := a3;

    NewInfo^.menutext := t;

    if fields[4].isNull then NewInfo^.module := ''

    else NewInfo^.module := fields[4].asstring;

    curitem := items.AddChildObjectFirst(nil,t,newInfo);

    curitem.imageindex := 1;

    end;

    next;

    end;

    query.free;

    database.free;

    end;

    exports

    libmenu_init,

    libmenu_loadmenu;

    end.



    위의 Dll을 폼을 가진 exe project에서 사용시 libmenu_init;를 호출하시면

    dll에서 메인폼의 tdatabase의 세션을 할당받고

    libmenu_loadmenu;에서 제가 필요한 처리를 합니다....





    아무쪼록 미약하나마 도움이 되시길....

    --------------------------------------------------------

    이정욱님과 김영대님의 멋진 답변.. 늘상 고맙습니다....

    --------------------------------------------------------

    델파이 왕초보 드림....





    김승현 wrote:

    > 안녕하세요 !!

    > 저는 델파이를 처음 사용하여 개발하는 김승현이라고 합니다.

    > 개발중에 어려운 문제에 접하여 도움을 청합니다.

    > 저희가 구현하려는 환경은 CORBA를 이용하여 서버모듈과 클라이언트모듈을

    > 두고, 클라이언트 모듈은 업무메인화면(.exe)에 업무별로 Form을 작성하려고

    > 합니다.

    > 그런데 SDI로 구현하자니 거래화면 분기시마다 Corba Connect시간이 오래

    > 걸리고 MDI밑에 Child Form으로 구현하자니 실행화일이 너무 큽니다.

    > 그래서 Child Form을 DLL로 구성하려고 하는데 Corba Connect루틴이 없으면

    > 제대로 구현되는데, 이부분만 추가하면 Error가 발생합니다.

    >

    > 예) Access violation, Stack overflow, runtime error-216등...

    >

    > 긴급한 관계로 빠른 답변 부탁드리겠습니다...

    > 추가로 간단한 예제도 포함해주시면 감사합니다...





    • 북해
    • 1999.05.14 19:15
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 무명인
      1999.05.15 05:05
      북해 wrote: > 안녕하세요. SQL문을 사용하려는데 자꾸 에러가 나네요. Edit.Text가 Change될 때마다 아래...
    • 왕초보
      1999.05.14 20:18
      with query1 do Begin sql.add('select * from 테이블'); sql.add('where 성명 like '''+edit1.Text+'%...
    • 북해
    • 1999.05.14 19:00
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.14 20:15
      보통 컴포넌트를 설치하는 방법은 두가지 입니다. 첫째, PAS나 .DCU파일을 가지고 하는방법. 둘째, DPK나...
    • 왕초보
      1999.05.14 20:15
      델파이 component 메뉴에서 install component를 선택하시면 컴포넌트 모듈(*.pas, *.dcu)를 선택할 수 있...
    • 김승현
    • 1999.05.14 06:01
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 왕초보
      1999.05.14 18:16
      저도 초보라서.. 정확한 답변이 될런지는 모르겠지만 도움일 될까해서 제가 Dll에서 db쓰는 source를 알...
    • 땡글이
    • 1999.05.14 05:27
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김영대
      1999.05.14 18:08
      땡글이 wrote: > 제가 몇일전에 TreeView에 대해 질문은 올렸더니 고맙게도 답장을 써주셨더군요. > 근데...
    • 1999.05.14 02:45
      이누리 wrote: > EditBox 내의 오른쪽 정렬이 되지 않는 관계로.. > > 편법으로.. 문자열앞에 공백을 ...
    • 이영호
    • 1999.05.14 02:18
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 1999.05.14 02:49
      이영호 wrote: > 오라클에 접속하려고 데이타베이스컴포넌트의 속성을 아래와 같이 주었는데 > db1.Pa...
    • 이정욱
      1999.05.14 03:12
      ParentComp := GetOwner as TWinControl; 로 고쳐서 해보세요... 장담은 못합니다... ^^; 왕초보 wr...
    • 강지영
    • 1999.05.14 01:10
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 1999.05.14 01:29
      강지영 wrote: > ShellExecute 를 사용하려고 하는데 > 파라미터 전달하는 것을 모르겠습니다. > 예를 ...
    • 왕초보
      1999.05.14 01:27
      ShellExecute (Handle,'open', 'notepad','c:config.sys','',SW_SHOWNORMAL); 와 같이 파리미터...
    • 왕초보
    • 1999.05.14 00:02
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.14 03:27
      아래의 문을 참고해서 디자인타임일경우에는 못하게 하시고 런타임인경우에만 실행하게 해보세요. if ...
    • 건맨
    • 1999.05.13 23:58
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 왕초보
      1999.05.14 00:07
      Interbase 를 설치하면 자동으로 깔리는 PDF문서를 참조하세요... 영문으로 되어 있지만 모두 출력을 하면...
    • 정용철
    • 1999.05.13 23:31
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.14 03:34
      NMOCOD.DLL, NMORENU.DLL, NMSCKN.DLL, NMFTPSN.DLL, OLEPRO32.DLL 을 같이 배포하셔야 합니다. 복사만 ...
    • 은철수
    • 1999.05.13 22:25
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 은철수
      1999.05.14 02:00
      하윤철 wrote: > 같은 질문의 답을 델파이 팁페이지에서 구할수 있었습니다... > > http://board.membe...
    • 이호선
    • 1999.05.13 21:36
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.13 23:25
      NCHitTest 메세지가로채서 사용하는 방법과, 또 하나의 ReleaseCapture와 SendMessage를 사용하는 두가지 ...
    • 북해
    • 1999.05.13 20:13
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 1999.05.13 21:38
      북해 wrote: > 비트맵버튼에서,혹은 그냥 버튼이라도, Caption에 들어갈 글자를 세로로 표기할 수 있나요...
    • 이정욱
      1999.05.13 21:20
      음냐.. 없습니다... 즉, 다른 컴포넌트를 사셔야 합니다. 아니면 Image를 버튼화 시켜서 그림으로 넣으...
    • 신호철
    • 1999.05.13 19:43
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.14 03:19
      이곳의 문제는 Close;문이 문제이군요. Close가 있지만 .. function TCSpacket.file1init : Boolean; ...
    • 북해
    • 1999.05.13 19:40
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.13 21:29
      포커스를 가진다는것은 제일 쉽게 말해서 현재 카렛(도스시절의 커서)이 있는 콘트롤을 지칭합니다. 카렛...
    • 신현숙
      1999.05.15 01:37
      신현숙 wrote: > 안녕하세요.. > 델파이 데리고 일하는 사람입니다. > 도움을 바랍니다. > 원하는 것이...
    • 남호열
      1999.05.15 01:07
      신현숙 wrote: > 안녕하세요.. > 델파이 데리고 일하는 사람입니다. > 도움을 바랍니다. > 원하는 것이...
    • 하윤철
      1999.05.13 22:36
      신현숙 wrote: > 안녕하세요.. > 델파이 데리고 일하는 사람입니다. > 도움을 바랍니다. > 원하는 것이...