Q&A

  • [re] [질문]파라독스에서되던것이 파이어버드에서 왜 안될까요?


로컬이 아니고 리모트 입니다. 폼이있는 코드를 사용하여 봤지만 그것도 마찬가지 입니다.
폼이있는 코드와 접속된 화면을 이미지로 보내드리겠습니다. 해결못하고 귀찬게하여 죄송합니다.

// DB그리드에서 더블릭릭하면 등록된 자료 보여주기 함수
PROCEDURE TFEM5012_F.GET_JOB_DATA(sJOBCd: STRING);
VAR
  Q1: TIBQUERY;
BEGIN
  IF MODETYPE IN [mNone] THEN
    EXIT;

    Q1:=TIBQUERY.CREATE(SELF);
    Q1.DATABASE:=IBDatabase1;
    Q1.SQL.CLEAR;
    Q1.SQL.ADD('SELECT * FROM TF_JOB_TY Where JOB_CODE = '''+sJOBCd+'''');
    Q1.OPEN;
    ED_JOB_TY.TEXT:=Q1.FIELDByname('JOB_TY').ASSTRING;    // 공종명
    ED_ETC_USE.TEXT:=Q1.FIELDByname('ETC_USE').ASSTRING;  // 비  고
    Q1.CLOSE;
    Q1.FREE;
END;

// 프로그램이 처음시작하면 등록된 공종 자료를 보여준다
procedure TFEM5012_F.FormShow(Sender: TObject);
begin
  CHECKNUM(SENDER);
  IBQ_JOB_TY.CLOSE;
  IBQ_JOB_TY.SQL.CLEAR;
  IBQ_JOB_TY.SQL.ADD('SELECT * FROM TF_JOB_TY');
  TRY
    IBQ_JOB_TY.OPEN;
  EXCEPT
    APPLICATION.MESSAGEBOX('공정정보 테이블 생성도중 에러발생!!!',
                           '오류',MB_OK+MB_ICONINFORMATION);
    IBQ_JOB_TY.CLOSE;
  END;
end;

>안녕하십니까? 전봉수입니다.
>파라독스로 프로그램 에서 파이어버드 인터베이스 IBQUERY 전환하여 프로그램을 배우면서 전에 파라독스 QUWRY 로 만들었던 프로그램을   파이어버드 인터베이스 IBQUERY 로 다시 프로그램을 하던중 문제가 생겼습니다. 아래 유틸리티는 파라독스에서는 링크가 잘되어 무리없이 사용했는데요  파이어버드 인터베이스 IBQUERY 프로그램에서는 입력창에 문자를 입력하면 예러가 3번씩이나 납니다. 좀 황당한 질문이겠지만 제가 프로그램하면서 자재 입/출고 나 현재고 DB에서 연산되는 일들을 거의 아래 유틸에서 링크하여 사용하다보니 막막합니다. 2.3차 에러는 종료후에 납니다.
>에러메세지도 첨부하오니 골치아프시다고 그냥 지니치지 마시고 꼭 문제를 풀어주셨으면 고맙겠습니다.
>운영체제 WINXP  델파이 7.0 파이어버드 2.1을 사용하고 있습니다.
>
>// 공종코드가 입력되면 공종명이 자동으로  입력창으로 이동
> procedure TFEM5012_F.Ed_QJOB_CODEChange(Sender: TObject);
>begin
>  IF SENDER = ED_QJOB_CODE THEN
>    Begin
>      // 공종명
>      ED_QJOB_TY.Text:= // 링크될 공종명
>     // 유틸 링크 명령
>     GET_CODE_DESC('TF_JOB_TY',1,[1],['JOB_CODE'],[TRIM(ED_QJOB_CODE.TEXT)],'JOB_TY');    
>   End;
>end;
>설명 : Ed_QJOB_CODE 에디터에 공종코드가 입력되면 ED_QJOB_TY.Text에 공종명이 자동으로 링크되는
>         명령입니다. DB명 : TF_JOB  공종코드 : JOB-CODE  공종명 : JOB_TY  
>
>
>=  유틸 소스 =
>unit GOCOMU;
>
>interface
>
>uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
>     ComCtrls, DBGrids, StdCtrls, ExtCtrls,Grids ,
>     Db, DBTables, IBDatabase, IBCustomDataSet, IBQuery;
>
>//------------------------------------------------------------------------------
>// 해당 테이블에서  지정한 필드의 값을 리턴
>// TName   : Table Name
>// PType   : 파라메타 유무 -> 0: 없음, 1:있음
>// aPType  : 파라메타가 있을 경우 해당 파라메타 타입->1:문자,2->숫자,3->날짜
>// aWField : Where 조건에 사용될 필드명.
>// aWValue : Where 조건에 사용될 파라메타 값.
>// SField  : Select 할 필드 이름.
>// 결과는 1개의 필드로 문자열로 리턴한다.
>// 아직 숫자 및 날짜 타입은 정확히 작동하는지 점검되지 않았으므로 추후 수정될수도 있음.
>//------------------------------------------------------------------------------
>Function Get_Code_Desc(TName:string;
>                   PType:Byte;
>                   aPType:array of Byte;
>                   aWField,aWValue:array of String;
>                   sField :string):string;
>
>//------------------------------------------------------------------------------
>
>implementation
>
>Function Get_Code_Desc(TName:string;
>                       PType:Byte;
>                       aPType:array of Byte;
>                       aWField,aWValue:array of String;
>                       sField :string):string;
>var Q1:TIBQUERY;
>    IBDatabase: TIBDatabase;
>    iCount:Byte;
>    sSql,sValue:string;
>    wYear,wMonth,wDay:Word;
>begin
>  //Parametar가 있다고 했는데 첫번째 Parametar가 없는경우
>  if (PType = 1) and ((Trim(aWField[0])='') or (Trim(aWValue[0])='')) then
>  begin
>    Result := '';
>    Exit;
>  end;
>  Q1 := TIBQUERY.Create(Application);    // IBQuery Q1생성
>  Q1.DATABASE:=IBDatabase;     <- 1차 에러         
>  Q1.Sql.Clear;                          // Q1 초기화
>  Case PType of
>  0: sSql := 'Select '+ sField + ' from '+TName;//Parametar가 없을시
>  1:                                            //Parametar가 있을시
>    begin
>      sSql := 'Select '+ sField + ' from '+TName;
>      sValue := ' Where ';
>      for iCount := Low(aWField) to High(aWField) do
>      begin
>        Case aPType[iCount] of
>        1: sValue := sValue + Format('%s = ''%s'' ',[aWField[iCount],aWValue[iCount]]);
>        2: sValue := sValue + Format('%s = %s ',[aWField[iCount],aWValue[iCount]]);
>        3: begin
>           DecodeDate(StrToDate(aWValue[iCount]),wYear,wMonth,wDay);
>           sValue := sValue +' ((Extract (Year From '+aWField[iCount]+') = '+IntToStr(wYear)+')'+
>                             ' and (Extract (Month From '+aWField[iCount]+') ='+IntToStr(wMonth)+')'+
>                             ' and (Extract (Day From '+aWField[iCount]+') ='+IntToStr(wDay)+')) ';
>           end;
>        end;
>        sValue := sValue + ' and ';
>      end;
>      if Length(Trim(sValue)) = 5 then sValue := ' '
>      else
>      if Length(Trim(sValue)) > 5 then sValue := Copy(Trim(sValue),1,Length(Trim(sValue))-3);
>      sSql := sSql + ' '+sValue;
>    end;
>  end;
>//  Showmessage(sSql);
>  Q1.Sql.Add(sSql);
>  Q1.Open;
>  Result := Q1.Fields[0].asstring;
>  Q1.Close;
>  Q1.Free;
>end;
>
>end.
0  COMMENTS