Q&A

  • 스토어 프로시저 콤포넌트 의 문제???
* 사용환경 : 델파이5 / Windows 2000 /db : sql2000

* 에러 메시지 : 콤포넌트에서 parameter를 만들고 connect를 하면 프로시져를 찾지를 못하겠다는 에러를 발생하더군요....



안녕하세요?

스토어 프로시저 콤포넌트를 사용하면서 느낀 건데...

넘겨주고 받는 parameter값이 있으면 프로시저를 찾지를 못한다고 합니다.

그렇지 않고 단지 프로시져를 실행만 시키는 스토어 프로시져는 바로 연결이 됩니다.



그래서 안되겠다 싶어 무식한 방벙을 사용할려고 합니다.



소스 내에서 프로시저를 실행하는 코드를 넣고 execute를 시켰을때 리턴 되어 오는 값을 받을 수 있는 함수 같은 것이 있나요?



예)

ssql :='declare @bb char(8),@cc char(10),@a int '+

'select @bb =''20010101'' '+

'select @cc =''001234'' '+

'exec @a = 프로시저_명 @aa ,@bb ';



s := query.ExecSql(ssql);

memo1.lines.add(s);



이렇게 했을때 리턴값 "@a"을 받을수 있는 방법은 있나요?

에러가 나더군요...

답변 부탁드립니다.



3  COMMENTS
  • Profile
    초보왕 2001.03.07 00:11
    초심자 wrote:

    > * 사용환경 : 델파이5 / Windows 2000 /db : sql2000

    > * 에러 메시지 : 콤포넌트에서 parameter를 만들고 connect를 하면 프로시져를 찾지를 못하겠다는 에러를 발생하더군요....

    >

    > 안녕하세요?

    > 스토어 프로시저 콤포넌트를 사용하면서 느낀 건데...

    > 넘겨주고 받는 parameter값이 있으면 프로시저를 찾지를 못한다고 합니다.

    > 그렇지 않고 단지 프로시져를 실행만 시키는 스토어 프로시져는 바로 연결이 됩니다.

    >

    > 그래서 안되겠다 싶어 무식한 방벙을 사용할려고 합니다.

    >

    > 소스 내에서 프로시저를 실행하는 코드를 넣고 execute를 시켰을때 리턴 되어 오는 값을 받을 수 있는 함수 같은 것이 있나요?

    >

    > 예)

    > ssql :='declare @bb char(8),@cc char(10),@a int '+

    > 'select @bb =''20010101'' '+

    > 'select @cc =''001234'' '+

    > 'exec @a = 프로시저_명 @aa ,@bb ';

    >

    > s := query.ExecSql(ssql);

    > memo1.lines.add(s);

    >

    > 이렇게 했을때 리턴값 "@a"을 받을수 있는 방법은 있나요?

    > 에러가 나더군요...

    > 답변 부탁드립니다.

    >





    제가 쓰던 방법인데염...

    참고가 될지는 모르겠어요



    Database1.Connected := true;

    Database1.StartTransaction;



    > ssql :='declare @bb char(8),@cc char(10),@a int '+

    > 'select @bb =''20010101'' '+

    > 'select @cc =''001234'' '+

    > 'exec @a = 프로시저_명 @aa ,@bb ';

    >

    > s := query.ExecSql(ssql);



    스토어드 프로시저를 사용하시면 먼저 디비와 연결후 스토어드 프로시저 콤포넌트의 property에서 StoredProcName에서 프로시저 네임을 설정하고 변수도 설정해주고요

    코딩은 다음처럼..



    var strA : String;



    StoredProc1.Prepare;

    StoredProc1.ParamByName('@bb').AsString := '20010101';

    StoredProc1.ParamByName('@cc').AsString := '001234';



    StoredProc1.ExecProc;

    strA :=StoredProc1.ParamByName('@a').AsInteger;



    그냥 SQL로 하시더라도

    ssql :='declare @bb char(8),

    @cc char(10),

    @a int '+

    'select @bb =''20010101'' '+

    'select @cc =''001234'' '+

    'exec @a = 프로시저_명 @aa ,@bb ';



    s := query.ExecSql(ssql);



    strA :=QUERY.ParamByName('@a').AsInteger;

    이렇게 주면 되지 않을까 하는 생각이 드는데염...

    안해봐서 확실하진 않지만..

  • Profile
    jinnon 2001.03.17 05:08
    odbc로 설정하셨나요.

    sql link말고 odbc로 설정하면 인식될텐데....

  • Profile
    허덕궁 2001.03.07 03:44
    [Mr.덕궁이가 적었어요]

    이전에 작업하던게 생각나서 적어봤어요....

    전에 작업할 때 Field명을 동적으로 전달하는 게 안되더라구요...

    그땐 안되었지만...... 지금은 어쩔지 모르겠네요...





    초보왕 wrote:

    > 초심자 wrote:

    > > * 사용환경 : 델파이5 / Windows 2000 /db : sql2000

    > > * 에러 메시지 : 콤포넌트에서 parameter를 만들고 connect를 하면 프로시져를 찾지를 못하겠다는 에러를 발생하더군요....

    > >

    > > 안녕하세요?

    > > 스토어 프로시저 콤포넌트를 사용하면서 느낀 건데...

    > > 넘겨주고 받는 parameter값이 있으면 프로시저를 찾지를 못한다고 합니다.

    > > 그렇지 않고 단지 프로시져를 실행만 시키는 스토어 프로시져는 바로 연결이 됩니다.

    > >

    > > 그래서 안되겠다 싶어 무식한 방벙을 사용할려고 합니다.

    > >

    > > 소스 내에서 프로시저를 실행하는 코드를 넣고 execute를 시켰을때 리턴 되어 오는 값을 받을 수 있는 함수 같은 것이 있나요?

    > >

    > > 예)

    > > ssql :='declare @bb char(8),@cc char(10),@a int '+

    > > 'select @bb =''20010101'' '+

    > > 'select @cc =''001234'' '+

    > > 'exec @a = 프로시저_명 @aa ,@bb ';

    > >

    > > s := query.ExecSql(ssql);

    > > memo1.lines.add(s);

    > >

    > > 이렇게 했을때 리턴값 "@a"을 받을수 있는 방법은 있나요?

    > > 에러가 나더군요...

    > > 답변 부탁드립니다.

    > >

    >

    >

    > 제가 쓰던 방법인데염...

    > 참고가 될지는 모르겠어요

    >

    > Database1.Connected := true;

    > Database1.StartTransaction;

    >

    > > ssql :='declare @bb char(8),@cc char(10),@a int '+

    > > 'select @bb =''20010101'' '+

    > > 'select @cc =''001234'' '+

    > > 'exec @a = 프로시저_명 @aa ,@bb ';

    > >

    > > s := query.ExecSql(ssql);

    >

    > 스토어드 프로시저를 사용하시면 먼저 디비와 연결후 스토어드 프로시저 콤포넌트의 property에서 StoredProcName에서 프로시저 네임을 설정하고 변수도 설정해주고요

    > 코딩은 다음처럼..

    >

    > var strA : String;

    >

    > StoredProc1.Prepare;

    > StoredProc1.ParamByName('@bb').AsString := '20010101';

    > StoredProc1.ParamByName('@cc').AsString := '001234';

    >

    > StoredProc1.ExecProc;

    > strA :=StoredProc1.ParamByName('@a').AsInteger;

    >

    > 그냥 SQL로 하시더라도

    > ssql :='declare @bb char(8),

    > @cc char(10),

    > @a int '+

    > 'select @bb =''20010101'' '+

    > 'select @cc =''001234'' '+

    > 'exec @a = 프로시저_명 @aa ,@bb ';

    >

    > s := query.ExecSql(ssql);

    >

    > strA :=QUERY.ParamByName('@a').AsInteger;

    > 이렇게 주면 되지 않을까 하는 생각이 드는데염...

    > 안해봐서 확실하진 않지만..