Q&A

  • 현재 날짜를 가지고 테이블 만들때...
폼이 생성시 오늘 날짜가 2004년 12월 1일 일때
example.gdb 내에 "order12"란 테이블이 존재하면 "order12"테이블을 open하고 만약에 테이블이 없으면 "order12"란 이름으로 테이블을 만들려고 하거든요..

현재 폼에는 examplq.gdb를 연결시켜주는 ibdbExam컴포넌트와 ibquery컴포넌트가 있어요..
현재 쿼리 컴포넌트의 sql속성엔 아무것도 적어놓은게 없구요..

procedure TfrmWork1.FormCreate(Sender: TObject);
begin
if ( exists (select * from dbo.sysobjects where id = object_id(N'[테이블명]') ) then begin
테이블 내용을 보여달라는 문장;
end
else begin
테이블 생성 쿼리문장;
end;
end;

여기서 테이블명을 적어줄때 오늘 날짜에서 12를 가져와야하는데....어제부터 이리저리해봐도 되지가 않네요...
위 명령에서 테이블 존재 유무 조건 문장과 내용을 보여달라는 문장, 테이블 생성 쿼리 문장을 알려주시면 감사드립니닷!!
6  COMMENTS
  • Profile
    권태훈 2004.12.01 22:35
    이런 문장에서 대부분 있는지 체크하고 없으면 만드는데

    있는지 없는지 체크하는 문장이 더 길어지게 마련이죠.

    테이블 드롭하지 말고 생성만 합니다.

    에러날수도 있으니 익셉션 처리하고 그냥 뒤로 넘어갑니다.

    이런식으로 코딩하면 안된다고요?

    코딩해서 테이블 있나 검사하나..

    dbserver가 생성시 테이블 있나 자체 검사하나...

    똑같은것... (다른 많은곳에 써먹을수 있습니다.)

  • Profile
    하수경 2004.12.02 02:05
    procedure TfrmWork1.FormCreate(Sender: TObject);
    var
           c_sql, s_sql : string;
           year, month : string;
    begin
           year := inttostr(dateyear(now()));
           month := inttostr(datemonth(now()));

           c_sql := 'CREATE TABLE ORDER'+year+month
                    + '('
                    + 'ODATE TIMESTAMP NOT NULL,'
                    + 'ONO SMALLINT NOT NULL,'
                    + 'STIME TIMESTAMP,'
                    + 'CLAS1 VARCHAR(20) default '','
                    + 'CLAS2 VARCHAR(20) default '','
                    + 'CLAS3 VARCHAR(20) default '','
                    + 'CUSTC VARCHAR(4),'
                    + 'CUSTN VARCHAR(30),'
                    + 'PLACC VARCHAR(4),'
                    + 'PLACN VARCHAR(30),'
                    + 'SPECC VARCHAR(4),'
                    + 'SPECN VARCHAR(30),'
                    + 'SELEC VARCHAR(4),'
                    + 'REMC VARCHAR(4),'
                    + 'AMNT DOUBLE PRECISION default 0,'
                    + 'SHIP DOUBLE PRECISION default 0,'
                    + 'REMN COMPUTED BY (Amnt-Ship),'
                    + 'CNT SMALLINT,'
                    + 'REM VARCHAR(30),'
                    + 'PRIMARY KEY (ODATE, ONO))';
          
           s_sql := 'select * from order'+year+month;

           ibqwork1.SQL.Add(c_sql);
           ibqwork1.Open;
    end;

    폼 Create이벤트를 이렇게 작성하고 실행 시키면
    SQL Parse Error : EOF in string detected
    이런 에러가 나더라구요...

    어디를 고쳐야 할지 알려주세요
  • Profile
    손희석 2004.12.02 05:11

    idqwork.ExcuteSQL;로 해주셔야 될거 같네요.. 그럼 ^^
  • Profile
    하수경 2004.12.02 05:27
    idqwork1.ExcuteSQL; 에서 ExcuteSQL은 없는데요..
    idqwork1.ExecSQL;을 해봐도 같은 에러가 나는데요....

  • Profile
    성더기 2004.12.07 00:39
    문자열 안의 ' 이넘은 ''으로 사용해야합니다
    그니깐 'CLAS1 VARCHAR(20) default '','  이넘이
    'CLAS1 VARCHAR(20) default '''',' 로 바껴야할거 같은데요

  • Profile
    ㉳㉥ㅗ㉣ㅐ㉧ㅛ 2004.12.02 19:26
    보통은 Query를 사용할때요...

    With Query do begin
       Close;
       SQL.Clear;
       SQL.Add( ..... );
       Open;   또는
       ExecSQL;
    end;


    를 많이 사용하지요....

    글구 기왕이면 Error Message가 어떤 건지 갈카주시면 더 도움이 될듯 합니다.

    그리고 실수로 있는 테이블을 생성하려 할지도 모르니 Try를 사용하셔도 좋구요...

    그리고 디폴트 값으로 '' 을 사용하려 한것 같은데요...
    String에 '을 넣고 싶다면 연속으로 두개를 사용하면 되구요...
    그럴경우 보는데 조금 어려움이 있거든요...걍 Null이라구 하셔도 됩니다.

    제가 볼때는 싱글커트를 사용하려 하면서 에러가 나는것 같거든요...
    null을 사용하시던지 아니면 싱클커트를 굳이 넣으려면 위의 방법대로 해보세요...