Q&A

  • 오라클에 insert 시킬때....
안녕하세요.

델파이는 처음 써보는 사람입니다.

본의 아니게 델파이로 프로그램을 짜는데...

문제는 잘 안짜인다....^^

오라클과 연결하여서 데이터를 입력시키는 것인데...

어떤 컴포넌트를 써야하나요?

Query를 사용하니까 insert시 읽기전용이라고 나오네요..그런데

입력은 됩니다... 에러를 내면서...

제 질문의 요지는 어떤 컴포넌트를 써야 가장 쉽게 insert 시킬수있나요?

3  COMMENTS
  • Profile
    강호규 2001.01.29 22:29
    김정균 wrote:

    > 안녕하세요.

    > 델파이는 처음 써보는 사람입니다.

    > 본의 아니게 델파이로 프로그램을 짜는데...

    > 문제는 잘 안짜인다....^^

    > 오라클과 연결하여서 데이터를 입력시키는 것인데...

    > 어떤 컴포넌트를 써야하나요?

    > Query를 사용하니까 insert시 읽기전용이라고 나오네요..그런데

    > 입력은 됩니다... 에러를 내면서...

    > 제 질문의 요지는 어떤 컴포넌트를 써야 가장 쉽게 insert 시킬수있나요?



    DB에 삽입할 때는 일반적으로 TQuery 컴포넌트를 사용합니다.

    아래는 쿼리작업의 전형적인 케이스를 보여주고 있습니다.

    변수값은 될 수 있으면 파라메터 형태로 전달하는 것이

    안전합니다. 좀 귀찮긴 하지만 가장 좋은 방법입니다.



    procedure TForm1.Button1Click(Sender: TObject);

    begin

    with Query1 do begin

    SQL.Text := 'insert into Cust (name) values(:name)';

    ParamByName('Name').AsString := '홍길동';

    ExecSQL;

    end;

    end;



  • Profile
    김정균 2001.01.30 00:16
    강호규 wrote:

    > 김정균 wrote:

    > > 안녕하세요.

    > > 델파이는 처음 써보는 사람입니다.

    > > 본의 아니게 델파이로 프로그램을 짜는데...

    > > 문제는 잘 안짜인다....^^

    > > 오라클과 연결하여서 데이터를 입력시키는 것인데...

    > > 어떤 컴포넌트를 써야하나요?

    > > Query를 사용하니까 insert시 읽기전용이라고 나오네요..그런데

    > > 입력은 됩니다... 에러를 내면서...

    > > 제 질문의 요지는 어떤 컴포넌트를 써야 가장 쉽게 insert 시킬수있나요?

    >

    > DB에 삽입할 때는 일반적으로 TQuery 컴포넌트를 사용합니다.

    > 아래는 쿼리작업의 전형적인 케이스를 보여주고 있습니다.

    > 변수값은 될 수 있으면 파라메터 형태로 전달하는 것이

    > 안전합니다. 좀 귀찮긴 하지만 가장 좋은 방법입니다.

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > begin

    > with Query1 do begin

    > SQL.Text := 'insert into Cust (name) values(:name)';

    > ParamByName('Name').AsString := '홍길동';

    > ExecSQL;

    > end;

    > end;

    >

    버튼을 한번 클릭하면 입력이 안되다가

    버튼을 다시 한번 클릭하면 키 바이올레이션 에러가 나면서 입력이되네요..

    어찌된 일인가요?



  • Profile
    아폴론 2001.01.30 22:55
    >

    > 버튼을 한번 클릭하면 입력이 안되다가

    > 버튼을 다시 한번 클릭하면 키 바이올레이션 에러가 나면서 입력이되네요..

    > 어찌된 일인가요?



    안녕하세요

    위의 질문은 두번재 클릭시 입력 된 것이 아니고 첫번째 클릭시 입력이 되었을 것이고

    두번째는 말 그대로 키 바이올레이션이 걸린것인데...

    오라클은 Transaction을 걸어(?) 주어야 합니다.

    데이타를 입력할때 오라클은 트랜잭션이 없다면 임시화일에 저장을 하게되고

    프로그램을 종료 해야 비로소 오라클디비에 저장을 하게 되죠.

    트랜잭션 없이 입력후 디비를 검색 해도 보이지 않을 것입니다. 임시정장을 했으니까요.



    그것을 처리 하자면

    Database1.startTrasaction;

    Try

    with Query1 do begin

    ...

    ...(입력작업처리)

    end;

    Database1.Commit;

    Showmessage('입력성공');



    Execpt

    Database1.RollBack;

    Showmessage('입력실패');

    end;



    이렇게 입력 하면 Commit 후 데이타는 바로 오라클 디비에 저장이 됩니다.

    그러면 바로 조회 해도 보이고 키 바이올레이션도 정확히 작용 할 것 입니다.

    도움이 되었으면 좋겠습니다.



    그럼 이만 다른곳을 비추러 갑니다.