FireBird Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
파이어버드 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
IBPhoenix
FireBird Main site
볼랜드포럼 광고 모집

FireBird Q&A
[3452] [질문]파라독스에서되던것이 파이어버드에서 왜 안될까요?
전봉수 [jeunbs] 2677 읽음    2010-06-07 12:41
공종명에러.JPG 41.1KB 링크 에러 메세지
안녕하십니까? 전봉수입니다.
파라독스로 프로그램 에서 파이어버드 인터베이스 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.

+ -

관련 글 리스트
3452 [질문]파라독스에서되던것이 파이어버드에서 왜 안될까요? 전봉수 2677 2010/06/07
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.