*DB : interbase 5.0 (Local) *Tool : Delphi 4.0 C/S
인터베이스 테이블에서 자동으로 일련번호를 부여해 주기 위해서...
Interbase에서
1. CREATE TABLE TEMP (
ID_NO SMALLINT NOT NULL,
NAME VARCHAR(20),
CONSTRAINT pk_temp PRIMARY KEY (ID_NO)
)로 테이블 생성한 후
2. CREATE GENERATOR GEN_TEMPID 로 GENERATOR 생성
3. CREATE TRIGGER TTEMP_IDNO FOR TEMP
ACTIVE BEFORE INSERT POSITION 0
AS BEGIN
NEW.ID_NO = GEN_ID(GEN_TEMPNO, 1);
END 로 트리거를 만들었습니다.
그리고 델파이에서 DATABASE 컴포넌트를 사용하고, Table 컴포넌트를 사용하여
tbTEMP.Insert; 후 NAME 필드에만 값을 넣고 tbTEMP.Post;를 하면
ID_NO 필드는 반드시 값을 가져야 한다고 EDBENGINERROR가 발생합니다.
대신 Query 컴포넌트를 사용하여
INSERT INTO TEMP (NAME) VALUES ('ABC')를 사용할 경우는
에러없이 GENERATOR가 정상적으로 작동하여 일련번호가 부여됩니다.
Table 컴포넌트를 사용해서 Insert후 Post해도 GENERATOR가 정상적으로
작동해야 하는 걸로 알고 있는데 안되는 이유를 모르겠습니다. 아시는 분은
꼭 알려주십시오. 메일로 알려주시면 더욱 감사하겠습니다.
메모필드에 들어있는 내용은 고작 한글 2~3페이지 입니다.
그런데도 어떤 데이타는 아예 읽어오지도 못하는 군요. 그리고 메모컴포넌트는
memo1.lines.text := query1.FieldByName('Contents').asstring;
memo1.lines.strings[0] := query1.FieldByName('Contents').asstring;
이렇게 해도 다운되는거 같은 현상은 마찬가지 였고,
스트림을 이용해서 읽어보아도 마찬가지로 로딩되는 속도가 엄청 느립니다. T.T 아래처럼 사용했습니다.
Stream := TBlobStream.Create(query1.FieldByName('Contents') as TBlobField, bmRead);
try
Size := Stream.Seek(0, 2);
Stream.Seek(0, 0);
Inc(Size);
GetMem(Buffer, Size);
try
FillChar(Buffer^, Size, #0);
Stream.Read(Buffer^, Size);
Memo1.SetTextBuf(Buffer);
finally
FreeMem(Buffer, Size);
end;
finally
Stream.Free;
end;
컴포넌트 자체에서 읽어오는 속도가 느린것인지..
하도 신기해서 디비 익스플로러에서 그 메모필드를 열어 읽어보았더니 어떤 컴포넌트인지 몰라도 번개같이 읽혀지더군요..
그렇게 만들수는 없는지요?
벌써 며칠째 입니다. 쉽게 생각했다가 허벌나게 고생하고 있습니다
고수분들의 조언을 기다리겠습니다.