Q&A

  • Sql문장에 파라미터를 넘기는곳에서...잉~! T-T
db.starttransaction;



with query1 do

close;

Sql.clear;

sql.add('delete from it_fit_code '+

' where fit_code = :fit_code '+

' and fit_class = :fit_class ');



parambyname('fit_code' ).asstring := edit1.text;

parambyname('fit_class').asstring := edit2.text;



prepare;

execsql;



close;

Sql.clear;

sql.add('delete from it_fit_in '+

' where fit_code = :fit_code '+

' and fit_class = :fit_class ');



parambyname('fit_code' ).asstring := edit1.text;

parambyname('fit_class').asstring := edit2.text;



prepare;

execsql;



end;



db.commit;



이런형태의 소스입니다...



4개의 Form에 같은 형태가 들어갑니다...



그런데 어떤 Form에서는 첫 Sql에 대해선 삭제가 되고 또 어떤곳에선



두번째 Sql문만 실행이 되어 삭제가 됩니다...



SQL 모니터로 확인해보니...두 문장 모두 parameter가 잘 들어가요...



길이...자료...데이터형태 모두...



그런데 roweffected가 0가 될때가 있습니다...



군데 분명 row는 존재 하거든요...



왜 그럴까요? 그리고 대처 방법이?



P.S : Parameter로 하지 않고 sql을 String형태로 만들어 넣으면 되요...아래와 같이...

sql.add('delete from ir_fit_code '+

' where fit_code = '''+edit1.text+''' '+

' and fit_class = '''+edit2.text+''' ');



참고로 델파이 5.0과 오라클8을 사용하고 있습니다.



구럼 고수님들의 답변을 학수고대하며...이만...



3  COMMENTS
  • Profile
    까마귀 2000.11.17 18:31
    안녕하세요. 까마귀입니다.



    그러니까 Parameter로 값을 넘기면 결과가 나오지 않는다는 말이지요?

    그런 비슷한 일이 저도 있었거든요.

    아직 원인은 모르고 있지만... 워낙 허접이라...하하.

    그거 피하려면 Parameter Name에 공백을 없애야 합니다. 제 경우..



    SQL.Add('Delete From it_fit_code '); // 여기는 공백이 있어도 상관없어요.

    SQL.Add('Where fit_code =:fit_code'); // 여기서 Parameter 주변에 공백이 없어야 됩니다.

    SQL.Add(' and fit_class =:fit_class');



    아무튼 Parameter로 값을 넘길경우 Parameter Name 주변에 공백이 있으니까 인수가

    제대로 동작이 않되요.

    어떤경우는 아예 Parameter가 정의되지 않았다고도 나오던데요.

    공백을 없애고 한번 해보세요.







    위대한 단군혼이 살아있는 나라.... 대한민국.



    권경미 wrote:

    > db.starttransaction;

    >

    > with query1 do

    > close;

    > Sql.clear;

    > sql.add('delete from it_fit_code '+

    > ' where fit_code = :fit_code '+

    > ' and fit_class = :fit_class ');

    >

    > parambyname('fit_code' ).asstring := edit1.text;

    > parambyname('fit_class').asstring := edit2.text;

    >

    > prepare;

    > execsql;

    >

    > close;

    > Sql.clear;

    > sql.add('delete from it_fit_in '+

    > ' where fit_code = :fit_code '+

    > ' and fit_class = :fit_class ');

    >

    > parambyname('fit_code' ).asstring := edit1.text;

    > parambyname('fit_class').asstring := edit2.text;

    >

    > prepare;

    > execsql;

    >

    > end;

    >

    > db.commit;

    >

    > 이런형태의 소스입니다...

    >

    > 4개의 Form에 같은 형태가 들어갑니다...

    >

    > 그런데 어떤 Form에서는 첫 Sql에 대해선 삭제가 되고 또 어떤곳에선

    >

    > 두번째 Sql문만 실행이 되어 삭제가 됩니다...

    >

    > SQL 모니터로 확인해보니...두 문장 모두 parameter가 잘 들어가요...

    >

    > 길이...자료...데이터형태 모두...

    >

    > 그런데 roweffected가 0가 될때가 있습니다...

    >

    > 군데 분명 row는 존재 하거든요...

    >

    > 왜 그럴까요? 그리고 대처 방법이?

    >

    > P.S : Parameter로 하지 않고 sql을 String형태로 만들어 넣으면 되요...아래와 같이...

    > sql.add('delete from ir_fit_code '+

    > ' where fit_code = '''+edit1.text+''' '+

    > ' and fit_class = '''+edit2.text+''' ');

    >

    > 참고로 델파이 5.0과 오라클8을 사용하고 있습니다.

    >

    > 구럼 고수님들의 답변을 학수고대하며...이만...

    >

  • Profile
    초보자 2000.11.17 06:38
    권경미 wrote:

    > db.starttransaction;

    >

    > with query1 do

    > close;

    > Sql.clear;

    > sql.add('delete from it_fit_code '+

    > ' where fit_code = :fit_code '+

    > ' and fit_class = :fit_class ');

    >

    > parambyname('fit_code' ).asstring := edit1.text;

    > parambyname('fit_class').asstring := edit2.text;

    >

    > prepare;

    > execsql;

    >

    > close;

    > Sql.clear;

    > sql.add('delete from it_fit_in '+

    > ' where fit_code = :fit_code '+

    > ' and fit_class = :fit_class ');

    >

    > parambyname('fit_code' ).asstring := edit1.text;

    > parambyname('fit_class').asstring := edit2.text;

    >

    > prepare;

    > execsql;

    >

    > end;

    >

    > db.commit;

    >

    > 이런형태의 소스입니다...

    >

    > 4개의 Form에 같은 형태가 들어갑니다...

    >

    > 그런데 어떤 Form에서는 첫 Sql에 대해선 삭제가 되고 또 어떤곳에선

    >

    > 두번째 Sql문만 실행이 되어 삭제가 됩니다...

    >

    > SQL 모니터로 확인해보니...두 문장 모두 parameter가 잘 들어가요...

    >

    > 길이...자료...데이터형태 모두...

    >

    > 그런데 roweffected가 0가 될때가 있습니다...

    >

    > 군데 분명 row는 존재 하거든요...

    >

    > 왜 그럴까요? 그리고 대처 방법이?

    >

    > P.S : Parameter로 하지 않고 sql을 String형태로 만들어 넣으면 되요...아래와 같이...

    > sql.add('delete from ir_fit_code '+

    > ' where fit_code = '''+edit1.text+''' '+

    > ' and fit_class = '''+edit2.text+''' ');

    >

    > 참고로 델파이 5.0과 오라클8을 사용하고 있습니다.

    >

    > 구럼 고수님들의 답변을 학수고대하며...이만...

    >



    delete from ir_fit_code where fit_code =

    '+ edit.text +' and fit_class = '+ edit2.text +'

    Sql문장을 요렇게 한번 해보세요..^^

  • Profile
    권경미 2000.11.17 08:55
    잉~ data type 문제가 아닌디...



    파라미터로 값을 넘겼을때 제대로 실행이 안된다는거져...



    파라미터도 제대루 너머 가여...



    sql monitor로 확인해보니...정말루 잘 들어가요...



    단지 결과가 안나온단거져...흑...