Q&A

  • ms-sql에서 insert 시 발생하는 에러
안녕하세요...

ms-sql에서 insert할때 에러가 자꾸 납니다...

파라미터는 제대로 넘어가는 것 같은데...

실행만 시키면

"operation not applicable" 라는 메세지가 뜹니다

도와주세요



procedure tform1.beasong_ok(wbl_no:string;dlv_end_dt:string;dlv_end_hms:string;insuer_r:string;insuer_nm:string;gb:string);

//배송완료 fun_code=05

var tranyesno : boolean;

begin



tranyesno := true;

database1.StartTransaction ;

try

begin

query1.close;

query1.sql.clear;

query1.sql.add('insert into itm_mob_dlv_cpl (wbl_no,dlv_end_dt,dlv_end_hms,insuer_r,insuer_nm,gb) values (:n1,:n2,:n3,:n4,:n5,:n6)');

query1.ParamByName('n1').asstring := trim(wbl_no);

query1.parambyname('n2').asstring := trim(dlv_end_dt);

query1.parambyname('n3').asstring := trim(dlv_end_hms);

query1.parambyname('n4').asstring := trim(insuer_r);

query1.parambyname('n5').asstring := trim(insuer_nm);

query1.parambyname('n6').asstring := trim(gb);

//여기까지 확인해보면 파라미터에 값은 제대로 넘어갑니다만



query1.ExecSQL ;

//여기서 실행을 하면 에러가 납니다...



query1.sql.savetofile('c:insert.txt');

end;

except

tranyesno := false;



end; //try end



참 그리구요....

또하나 궁금한게 있는데요 하나의 프로시저에서 또 다른 프로시저를 호출해도 되나요?



3  COMMENTS
  • Profile
    방문현 2001.07.14 19:20
    초보 wrote:

    > 안녕하세요...

    > ms-sql에서 insert할때 에러가 자꾸 납니다...

    > 파라미터는 제대로 넘어가는 것 같은데...

    > 실행만 시키면

    > "operation not applicable" 라는 메세지가 뜹니다

    > 도와주세요

    >

    > procedure tform1.beasong_ok(wbl_no:string;dlv_end_dt:string;dlv_end_hms:string;insuer_r:string;insuer_nm:string;gb:string);

    > //배송완료 fun_code=05

    > var tranyesno : boolean;

    > begin

    >

    > tranyesno := true;

    > database1.StartTransaction ;

    > try

    > begin

    > query1.close;

    > query1.sql.clear;

    > query1.sql.add('insert into itm_mob_dlv_cpl (wbl_no,dlv_end_dt,dlv_end_hms,insuer_r,insuer_nm,gb) values (:n1,:n2,:n3,:n4,:n5,:n6)');

    > query1.ParamByName('n1').asstring := trim(wbl_no);

    > query1.parambyname('n2').asstring := trim(dlv_end_dt);

    > query1.parambyname('n3').asstring := trim(dlv_end_hms);

    > query1.parambyname('n4').asstring := trim(insuer_r);

    > query1.parambyname('n5').asstring := trim(insuer_nm);

    > query1.parambyname('n6').asstring := trim(gb);

    > //여기까지 확인해보면 파라미터에 값은 제대로 넘어갑니다만

    >

    > query1.ExecSQL ;

    > //여기서 실행을 하면 에러가 납니다...

    >

    > query1.sql.savetofile('c:insert.txt');

    > end;

    > except

    > tranyesno := false;

    >

    > end; //try end

    >

    > 참 그리구요....

    > 또하나 궁금한게 있는데요 하나의 프로시저에서 또 다른 프로시저를 호출해도 되나요?

    >



    쿼리문을 보면 스토어드 프로시져를 사용하는 것이 아니라 일반 쿼리문인듯 합니다.



    프로시져에 넘긴 파라미터

    'wbl_no:string;dlv_end_dt:string;dlv_end_hms:string;insuer_r:string..' 등 이

    테이블의 필드명이 맞는지 의심이 됩니다. 필드명을 파라미터로 넘기지는 않을 것

    같은데 또 뒤에 그 값을 input parameter에 대입하셨는데 이 부분이 문법은 맞으나

    이해가 되지를 않는군요.



    StoredProc 컴포넌트 하나에 여러개의 프로시져를 실행할 수는 있습니다.



    실행시 마다 파라미터를 프로시져에 맞게 생성시켜주면 됩니다.



    with StoredProc do begin

    Close;

    Params.Clear;

    //새 프로시져 할당

    StoredProcName := 'proc_name';

    params.CreateParam(필드타입,파라미터이름,파라미터 타입);

    //파라미터 수에 맞게 작성해 주고

    ParamByName('파라미터').AsType := 값;

    ......

    ExecProc;

    end;



    이렇게 해 주시면 됩니다만 상당히 귀찮은 작업이지요.





  • Profile
    초보 2001.07.14 19:43
    >

    > 쿼리문을 보면 스토어드 프로시져를 사용하는 것이 아니라 일반 쿼리문인듯 합니다.



    ==> 스토어드 프로시저는 아니구 제가 만든 프로시저 입니다.



    > 프로시져에 넘긴 파라미터

    > 'wbl_no:string;dlv_end_dt:string;dlv_end_hms:string;insuer_r:string..' 등 이

    > 테이블의 필드명이 맞는지 의심이 됩니다. 필드명을 파라미터로 넘기지는 않을 것

    > 같은데 또 뒤에 그 값을 input parameter에 대입하셨는데 이 부분이 문법은 맞으나

    > 이해가 되지를 않는군요.



    ==> 필드명과 같은 이름의 파라미터를 사용한 것이거든요...

    제가 지금 소켓통신을 하느라...

    클라이언트가 넘긴 정보를 잘라서...

    각각 필드명과 같은 변수에 내용을 저장해 파라미터로 넘겨서 쿼리를 하는 것입니 다.

    문제는 제가 오라클에서 같은 방법으로 했을때는 문제없이 됐거든요...

    갑자기 DB가 수정되는 바람에...바꾼것인데...

    같은 방법으로 오라클에서는 문제없이 수행되었거든요...

    물론 필드명에 이상은 없구요...흑흑

    워낙 프로시저를 많이 만들어 쓰느라

    지금 다시 스토어드 프로시저를 만들어서 사용하긴 좀..힘들것 같네요..

    답변 감사해요...







    > StoredProc 컴포넌트 하나에 여러개의 프로시져를 실행할 수는 있습니다.

    >

    > 실행시 마다 파라미터를 프로시져에 맞게 생성시켜주면 됩니다.

    >

    > with StoredProc do begin

    > Close;

    > Params.Clear;

    > //새 프로시져 할당

    > StoredProcName := 'proc_name';

    > params.CreateParam(필드타입,파라미터이름,파라미터 타입);

    > //파라미터 수에 맞게 작성해 주고

    > ParamByName('파라미터').AsType := 값;

    > ......

    > ExecProc;

    > end;

    >

    > 이렇게 해 주시면 됩니다만 상당히 귀찮은 작업이지요.

    >

    >

  • Profile
    초보 2001.07.14 19:44
    초보 wrote:

    > >

    > > 쿼리문을 보면 스토어드 프로시져를 사용하는 것이 아니라 일반 쿼리문인듯 합니다.

    >

    > ==> 스토어드 프로시저는 아니구 제가 만든 프로시저 입니다.

    >

    > > 프로시져에 넘긴 파라미터

    > > 'wbl_no:string;dlv_end_dt:string;dlv_end_hms:string;insuer_r:string..' 등 이

    > > 테이블의 필드명이 맞는지 의심이 됩니다. 필드명을 파라미터로 넘기지는 않을 것

    > > 같은데 또 뒤에 그 값을 input parameter에 대입하셨는데 이 부분이 문법은 맞으나

    > > 이해가 되지를 않는군요.

    >

    > ==> 필드명과 같은 이름의 파라미터를 사용한 것이거든요...

    > 제가 지금 소켓통신을 하느라...

    > 클라이언트가 넘긴 정보를 잘라서...

    > 각각 필드명과 같은 변수에 내용을 저장해 파라미터로 넘겨서 쿼리를 하는 것입니 다.

    > 문제는 제가 오라클에서 같은 방법으로 했을때는 문제없이 됐거든요...

    > 갑자기 DB가 수정되는 바람에...바꾼것인데...

    > 같은 방법으로 오라클에서는 문제없이 수행되었거든요...

    필드명과 같은 이름의 파라미터를 넘겨서...select문등은 다 되었는데

    insert,update가 안되네요...



    > 물론 필드명에 이상은 없구요...흑흑

    > 워낙 프로시저를 많이 만들어 쓰느라

    > 지금 다시 스토어드 프로시저를 만들어서 사용하긴 좀..힘들것 같네요..

    > 답변 감사해요...

    >

    >

    >

    > > StoredProc 컴포넌트 하나에 여러개의 프로시져를 실행할 수는 있습니다.

    > >

    > > 실행시 마다 파라미터를 프로시져에 맞게 생성시켜주면 됩니다.

    > >

    > > with StoredProc do begin

    > > Close;

    > > Params.Clear;

    > > //새 프로시져 할당

    > > StoredProcName := 'proc_name';

    > > params.CreateParam(필드타입,파라미터이름,파라미터 타입);

    > > //파라미터 수에 맞게 작성해 주고

    > > ParamByName('파라미터').AsType := 값;

    > > ......

    > > ExecProc;

    > > end;

    > >

    > > 이렇게 해 주시면 됩니다만 상당히 귀찮은 작업이지요.

    > >

    > >