Q&A

  • 3계층 데이터베이스시 interface not support..
3계층 데이터베이스 응용프로그램을 작성하였습니다.



응용프로그램 서버와 클라이언트를 작성하고 나서



응용프로그램서버를 실행시키고



클라이언트를 실행시킬 경우 서버와 같은 PC에서는 실행이 되는데



다른 PC에 있는 클라이언트의 경우



Interface Not support라는 Error가 발생하고 완전히 종료도 되지 않고



계속 메모리에 남아 있습니다.



Interface Not support라는 Error가 발생가 발생하는 원인을 찾지 못하겠군요.



공부 중이라 간단하게 만들었는데.....



빠른 답변 부탁합니다.



그리고 추가로 MS-ACCESS를 이용하여 n계층 데이터베이스 응용프로그램을



작성할 수 있는지 궁금합니다.

3  COMMENTS
  • Profile
    신인재 1999.04.30 21:37
    음냐.... 일딴 LAN환경이라면

    하드웨어적인 환경은 충족이 된상태이고



    마이다스를 이용하신다면

    소프트웨어 적으로 환경을 설정해 주는

    부분이 틀리지 않았나 생각이 됩니다.



    아래의 내용을 참고하세요.

    * DCOM을 이용할때 사전작업

    서버가 실행될 호스트 :

    BDE 4.0

    windowssystemSTDVCL32.DLL

    windowssystemDBCLIENT.DLL

    BDE dirIDPROV32.DLL

    위의 세가지가 레지스트리에 등록되어야 한다.

    DCOM

    클라이언트가 실행될 호스트 :

    windowssystemDBCLIENT.DLL(레지스트리에 등록)

    DCOM for Windows95

    DCOM Configuration Utility

    (DCOM은 Windows NT4.0이상,Windows98의 경우 기본으로 탑재되어 있다)

    * OLEnterprise

    서버가 실행될 호스트 :

    BDE 4.0

    windowssystemSTDVCL32.DLL

    windowssystemDBCLIENT.DLL

    BDE dirIDPROV32.DLL

    위의 세가지가 레지스트리에 등록되어야 한다.

    OLEnterprise

    클라이언트가 실행될 호스트 :

    windowssystemDBCLIENT.DLL(레지스트리에 등록)

    OLEnterprise

    * Socket

    서버가 실행될 호스트 :

    BDE 4.0

    windowssystemSTDVCL32.DLL

    windowssystemDBCLIENT.DLL

    BDE dirIDPROV32.DLL

    위의 세가지가 레지스트리에 등록되어야 한다.

    Scktsrvr.exe 실행 (델파이디렉토리/bin 에 있다)

    클라이언트가 실행될 호스트 :

    windowssystemDBCLIENT.DLL(레지스트리에 등록)





    배재민 wrote:

    > 3계층 데이터베이스 응용프로그램을 작성하였습니다.

    >

    > 응용프로그램 서버와 클라이언트를 작성하고 나서

    >

    > 응용프로그램서버를 실행시키고

    >

    > 클라이언트를 실행시킬 경우 서버와 같은 PC에서는 실행이 되는데

    >

    > 다른 PC에 있는 클라이언트의 경우

    >

    > Interface Not support라는 Error가 발생하고 완전히 종료도 되지 않고

    >

    > 계속 메모리에 남아 있습니다.

    >

    > Interface Not support라는 Error가 발생가 발생하는 원인을 찾지 못하겠군요.

    >

    > 공부 중이라 간단하게 만들었는데.....

    >

    > 빠른 답변 부탁합니다.

    >

    > 그리고 추가로 MS-ACCESS를 이용하여 n계층 데이터베이스 응용프로그램을

    >

    > 작성할 수 있는지 궁금합니다.





  • Profile
    배재민 1999.04.30 22:00
    Delphi4를 이용하는데



    BDE dirIDPROV32.DLL이 존재하지 않습니다.



    위의 파일은 어떻게 해야 얻을 수 있는지 ...



    그리고 마이다스를 이용하는것이 아니라



    그냥 (Delphi3을 설명하는 책을 참조)책을 보고 따라하다가



    실행(Client가)이 되지 않더군요..



    서버에서는 RemoteDataModule를 이용하여 만들었구요.



    클라이언트에서는 RemoteServer, Provider등을 이용해서 만들었거든요..



    기본 지식이 없다보니 소스를 확인해 보아도 잘 모르겠더군요.



    분명히 서버와 같은 PC에서는 Client가 동작을 하는데 ....

    BDE dirIDPROV32.DLL파일이 없어서 ......



    .............

    .............

    아래는 서버의 RemoteDataModule의 소스입니다.

    .............

    .............

    type

    TKepcoServerData = class(TRemoteDataModule, IKepcoServerData)

    Database1: TDatabase;

    CardProvider: TProvider;

    TblCEnt: TTable;

    TblOEnt: TTable;

    OutProvider: TProvider;

    private

    { Private declarations }

    public

    { Public declarations }

    protected

    function Get_CardProvider: IProvider; safecall;

    function Get_OutProvider: IProvider; safecall;

    procedure ApplyUpdates(var CardAlm, OutAlm: OleVariant); safecall;

    end;



    var

    KepcoServerData: TKepcoServerData;



    implementation



    {$R *.DFM}



    function TKepcoServerData.Get_CardProvider: IProvider;

    begin

    Result := CardProvider.Provider;

    end;



    function TKepcoServerData.Get_OutProvider: IProvider;

    begin

    Result := OutProvider.Provider;

    end;



    procedure TKepcoServerData.ApplyUpdates(var CardAlm, OutAlm: OleVariant);

    var

    ErrCount : integer;

    begin

    Database1.StartTransaction;



    try

    if not VarISNull(CardAlm) then

    begin

    CardAlm := CardProvider.ApplyUpdates(CardAlm,0,ErrCount);

    if ErrCount > 0 then

    SysUtils.Abort;

    end;

    if not VarISNull(outAlm) then

    begin

    OutAlm := CardProvider.ApplyUpdates(OutAlm,0,ErrCount);

    if ErrCount > 0 then

    SysUtils.Abort;

    end;



    DataBase1.Commit;

    except

    Database1.Rollback;

    end;







    end;



    initialization

    TComponentFactory.Create(ComServer, TKepcoServerData,

    Class_KepcoServerData, ciMultiInstance, tmApartment);

    end.







    .............

    .............

    아래는 Client의 DataModule의 소스입니다.

    .............

    .............



    type

    TDataModule2 = class(TDataModule)

    RemoteServer1: TRemoteServer;

    CDSCard: TClientDataSet;

    CDSOut: TClientDataSet;

    DataSourceCard: TDataSource;

    DataSourceOut: TDataSource;

    CDSCardNo1: TStringField;

    CDSCardRTU: TStringField;

    CDSCardRDR: TStringField;

    CDSCardSTATCODE: TStringField;

    CDSCardSTATNAME: TStringField;

    CDSCardCARDNO: TStringField;

    CDSCardNAME: TStringField;

    CDSCardDEPTNAME: TStringField;

    CDSCardCOMPNAME: TStringField;

    CDSCardOPID: TStringField;

    CDSOutNo1: TStringField;

    CDSOutRTU: TStringField;

    CDSOutPNT: TStringField;

    CDSOutSTATCODE: TStringField;

    CDSOutSTATNAME: TStringField;

    CDSOutSENSORNAME: TStringField;

    CDSOutOPID: TStringField;

    procedure DataModule2Create(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    procedure ApplyUpdates;

    end;



    var

    DataModule2: TDataModule2;



    implementation



    {$R *.DFM}



    procedure TDataModule2.DataModule2Create(Sender: TObject);

    begin

    CDSCard.Active := true;

    CDSOut.Active := true;

    end;



    procedure TDataModule2.ApplyUpdates;

    var CardAlm,OutAlm : OleVariant;

    begin

    CDSCard.CheckBrowseMode;

    CDSout.CheckBrowseMode;



    if CDSCard.ChangeCount > 0 then

    CardAlm := CDSCard.Delta

    else

    CardAlm := NULL;



    if CDSOut.ChangeCount > 0 then

    OutAlm := CDSOut.Delta

    else

    OutAlm := NULL;



    RemoteServer1.AppServer.AllpyUpdates(CardAlm,OutAlm);



    if not VarIsNull(CardAlm) then

    CDSCard.Reconcile(CardAlm)

    else if not VarIsNull(OutAlm) then

    CDSOut.Reconcile(OutAlm)

    else

    begin

    CDSCard.Reconcile(CardAlm);

    CDSout.Reconcile(OutAlm);



    CDSCard.refresh;

    CDSOut.refresh;



    end;



    end;





  • Profile
    신인재 1999.04.30 23:13
    분명히 BDE dirIDPROV32.DLL 은 있어야 합니다.

    델파이 CD로 BDE부분만 다시 깔아 보세요...

    하이텔 Vtool이나 천리안 PDSPF에 가보면

    아마도 최신 버젼이 있을 듯 합니다만........



    배재민 wrote:

    > Delphi4를 이용하는데

    >

    > BDE dirIDPROV32.DLL이 존재하지 않습니다.

    >

    > 위의 파일은 어떻게 해야 얻을 수 있는지 ...

    >

    > 그리고 마이다스를 이용하는것이 아니라

    >

    > 그냥 (Delphi3을 설명하는 책을 참조)책을 보고 따라하다가

    >

    > 실행(Client가)이 되지 않더군요..

    >

    > 서버에서는 RemoteDataModule를 이용하여 만들었구요.

    >

    > 클라이언트에서는 RemoteServer, Provider등을 이용해서 만들었거든요..

    >

    > 기본 지식이 없다보니 소스를 확인해 보아도 잘 모르겠더군요.

    >

    > 분명히 서버와 같은 PC에서는 Client가 동작을 하는데 ....

    > BDE dirIDPROV32.DLL파일이 없어서 ......

    >

    > .............

    > .............

    > 아래는 서버의 RemoteDataModule의 소스입니다.

    > .............

    > .............

    > type

    > TKepcoServerData = class(TRemoteDataModule, IKepcoServerData)

    > Database1: TDatabase;

    > CardProvider: TProvider;

    > TblCEnt: TTable;

    > TblOEnt: TTable;

    > OutProvider: TProvider;

    > private

    > { Private declarations }

    > public

    > { Public declarations }

    > protected

    > function Get_CardProvider: IProvider; safecall;

    > function Get_OutProvider: IProvider; safecall;

    > procedure ApplyUpdates(var CardAlm, OutAlm: OleVariant); safecall;

    > end;

    >

    > var

    > KepcoServerData: TKepcoServerData;

    >

    > implementation

    >

    > {$R *.DFM}

    >

    > function TKepcoServerData.Get_CardProvider: IProvider;

    > begin

    > Result := CardProvider.Provider;

    > end;

    >

    > function TKepcoServerData.Get_OutProvider: IProvider;

    > begin

    > Result := OutProvider.Provider;

    > end;

    >

    > procedure TKepcoServerData.ApplyUpdates(var CardAlm, OutAlm: OleVariant);

    > var

    > ErrCount : integer;

    > begin

    > Database1.StartTransaction;

    >

    > try

    > if not VarISNull(CardAlm) then

    > begin

    > CardAlm := CardProvider.ApplyUpdates(CardAlm,0,ErrCount);

    > if ErrCount > 0 then

    > SysUtils.Abort;

    > end;

    > if not VarISNull(outAlm) then

    > begin

    > OutAlm := CardProvider.ApplyUpdates(OutAlm,0,ErrCount);

    > if ErrCount > 0 then

    > SysUtils.Abort;

    > end;

    >

    > DataBase1.Commit;

    > except

    > Database1.Rollback;

    > end;

    >

    >

    >

    > end;

    >

    > initialization

    > TComponentFactory.Create(ComServer, TKepcoServerData,

    > Class_KepcoServerData, ciMultiInstance, tmApartment);

    > end.

    >

    >

    >

    > .............

    > .............

    > 아래는 Client의 DataModule의 소스입니다.

    > .............

    > .............

    >

    > type

    > TDataModule2 = class(TDataModule)

    > RemoteServer1: TRemoteServer;

    > CDSCard: TClientDataSet;

    > CDSOut: TClientDataSet;

    > DataSourceCard: TDataSource;

    > DataSourceOut: TDataSource;

    > CDSCardNo1: TStringField;

    > CDSCardRTU: TStringField;

    > CDSCardRDR: TStringField;

    > CDSCardSTATCODE: TStringField;

    > CDSCardSTATNAME: TStringField;

    > CDSCardCARDNO: TStringField;

    > CDSCardNAME: TStringField;

    > CDSCardDEPTNAME: TStringField;

    > CDSCardCOMPNAME: TStringField;

    > CDSCardOPID: TStringField;

    > CDSOutNo1: TStringField;

    > CDSOutRTU: TStringField;

    > CDSOutPNT: TStringField;

    > CDSOutSTATCODE: TStringField;

    > CDSOutSTATNAME: TStringField;

    > CDSOutSENSORNAME: TStringField;

    > CDSOutOPID: TStringField;

    > procedure DataModule2Create(Sender: TObject);

    > private

    > { Private declarations }

    > public

    > { Public declarations }

    > procedure ApplyUpdates;

    > end;

    >

    > var

    > DataModule2: TDataModule2;

    >

    > implementation

    >

    > {$R *.DFM}

    >

    > procedure TDataModule2.DataModule2Create(Sender: TObject);

    > begin

    > CDSCard.Active := true;

    > CDSOut.Active := true;

    > end;

    >

    > procedure TDataModule2.ApplyUpdates;

    > var CardAlm,OutAlm : OleVariant;

    > begin

    > CDSCard.CheckBrowseMode;

    > CDSout.CheckBrowseMode;

    >

    > if CDSCard.ChangeCount > 0 then

    > CardAlm := CDSCard.Delta

    > else

    > CardAlm := NULL;

    >

    > if CDSOut.ChangeCount > 0 then

    > OutAlm := CDSOut.Delta

    > else

    > OutAlm := NULL;

    >

    > RemoteServer1.AppServer.AllpyUpdates(CardAlm,OutAlm);

    >

    > if not VarIsNull(CardAlm) then

    > CDSCard.Reconcile(CardAlm)

    > else if not VarIsNull(OutAlm) then

    > CDSOut.Reconcile(OutAlm)

    > else

    > begin

    > CDSCard.Reconcile(CardAlm);

    > CDSout.Reconcile(OutAlm);

    >

    > CDSCard.refresh;

    > CDSOut.refresh;

    >

    > end;

    >

    > end;

    >

    >





    • 박진아
    • 1999.05.01 02:39
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.05.01 03:55
      박진아 wrote: > Form1 에서 Form2를 호출할때 이런 에러 메세지가 떠서요. > EDBEngineError 가 발생했...
    • 강신구
    • 1999.04.30 22:35
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 신인재
      1999.05.01 00:00
      음냐 제가 잘못 이해 했군요.... 일딴 Enabled를 True로 주고 Options의 goEditing은 false 로 주세...
    • 배재민
    • 1999.04.30 20:55
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 신인재
      1999.04.30 21:37
      음냐.... 일딴 LAN환경이라면 하드웨어적인 환경은 충족이 된상태이고 마이다스를 이용하신다면 소...
    • 배재민
      1999.04.30 22:00
      Delphi4를 이용하는데 BDE dirIDPROV32.DLL이 존재하지 않습니다. 위의 파일은 어떻게 해야 얻을 수 ...
    • 신인재
      1999.04.30 23:13
      분명히 BDE dirIDPROV32.DLL 은 있어야 합니다. 델파이 CD로 BDE부분만 다시 깔아 보세요... 하이텔 Vtoo...
    • 강신구
    • 1999.04.30 19:04
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 신인재
      1999.04.30 19:49
      프로퍼티에 보면 Fixedcols, FixedRows가 있습니다 이것의 값을 0으로 바꾸어 주세요 그럼 원하시는 ...
    • 강지영
    • 1999.04.30 07:26
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 강지영
      1999.04.30 22:09
      강지영 wrote: > 그리드에 자리수 콤마찍기를 가르쳐주신 함수를 사용해서 적용을 했습니다. > DBgridDra...
    • 글쎄요.
      1999.04.30 23:29
      제가 자세히 안 보고 답변을 했네요. 필드명으로 걸러내실려면 DBgridDrawDataCell event에서가 아니라 DB...
    • 글쎄요.
      1999.04.30 19:26
      강지영 wrote: > 그리드에 자리수 콤마찍기를 가르쳐주신 함수를 사용해서 적용을 했습니다. > DBgridDra...
    • 첩현
    • 1999.04.30 05:51
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 안치봉
      1999.04.30 07:20
      첩현 wrote: > 안녕하세요... > > 트레이의 시계처럼 아이콘 대신 문자를 > > 넣어서 문자를 계속해...
    • 강지영
    • 1999.04.30 03:32
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.04.30 03:56
      강지영 wrote: > dbgrid에 자리점을 찍으래요.. > 1,000,000 이런식으로요.. 흑.. > 어디선가 본것 같기...
    • 강지영
      1999.04.30 04:22
      창민님 감사합니다. 저에게는 너무나도 큰 도움입니다.. 든든하네요... 저도 빨리 무럭무럭 자라서 창민...
    • whitekid
    • 1999.04.30 03:02
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.04.30 03:50
      whitekid wrote: > 제목 그대로 BDE의 버전을 체크하려고 합니다. > > 단 BDE API는 안쓰고.. 즉 BDE가...
    • 유민호
    • 1999.04.30 02:38
    • 2 COMMENTS
    • /
    • 0 LIKES
    • saxoji
      1999.05.01 00:41
      2-tier or 3-tier 환경으로의 programing시 자료형 중 variant가 있는 것이 아닌지? 이경우는 olevariant...
    • 신인재
      1999.04.30 20:39
      음냐...글쎄요 이런 문제는 서버쪽을 유심히 살펴 보아야 할꺼 같은데요.. 우선 서버쪽 프로그램을 고친후...
    • 김인묵
    • 1999.04.30 02:24
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.04.30 03:47
      김인묵 wrote: > 정보처리 기사 및 기능사 시험중 > 델파이 실기를 선택하였는데 실기시험은 어떻게 보...
    • 이호선
    • 1999.04.29 23:52
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 안치봉
      1999.04.30 00:39
      이호선 wrote: > 안녕하세요. > xor연산을 써서 해볼려 했는데 Error가 나더군요 > 제가 작성한 코드는 ...
    • 전철호
      1999.04.30 01:06
      안치봉 wrote: > 이호선 wrote: > > 안녕하세요. > > xor연산을 써서 해볼려 했는데 Error가 나더군요 ...
    • 안명호
    • 1999.04.29 23:36
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김영대
      1999.04.29 23:48
      안명호 wrote: > 윈도우즈 소켓 프로그래밍에 대한 자료를 찾고 있습니다. > 소장하고 계신 분 있으시면 ...
    • 문창완
    • 1999.04.29 23:02
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.04.30 03:44
      문창완 wrote: > > 바코드 쿠현에 대해 궁금합니다. > 그것에 대해 강좌나 설명을 부탁합니다. > 그리...
    • 안치봉
      1999.04.30 00:42
      문창완 wrote: > > 바코드 쿠현에 대해 궁금합니다. > 그것에 대해 강좌나 설명을 부탁합니다. > 그리...
    • 이호선
    • 1999.04.29 21:29
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 전철호
      1999.04.29 23:08
      이호선 wrote: > 안녕하세요. > c에서 Character = Character ^ 0xff 를 하여 bitwise-exclusive-or를 ...
    • 양병희
    • 1999.04.29 20:48
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 안치봉
      1999.04.30 00:45
      양병희 wrote: > 컴파일시에는 error이 없었는데 > 실행을 시키면 'A Win32 API function failed'라는 오...
    • 강민정
    • 1999.04.29 20:45
    • 1 COMMENTS
    • /
    • 0 LIKES
    • rain
      1999.04.30 02:09
      Form만 불러오는 소스를 가지고는 어떤 에러인지는 정확히 모르겠습니다. 물론 모든 소스를 보여달라는 것...