Q&A

  • 아직 안주무시죠? dbgrid..
아직 안 주무시죠? 저도 아직 안자고 있습니다.. ^^

아래 두분께서 도와 주신대로 코딩을 했습니다만 조금 부족한 부분이 있어서 재차 질문 드립니다.



procedure TFrmmain.TB_UClick(Sender: TObject); // insert , update query

begin

value_chk; // 필요 충분값 검사

if pagecontrol1.ActivePage = tabsheet1 then // 사외 방문자

begin

with query1 do

begin

try

close;

sql.Clear;

sql.Add(' update io_schedule set stat ="1" ');

sql.Add(' where in_date = :indate ');

sql.Add(' and seq = :seq ');

sql.Add(' and vendcd = :vendcd ');

parambyname('in_date').AsString := dbgrid1.Fields[0].asstring;

parambyname('vendcd').AsString := dbgrid1.Fields[1].AsString;

parambyname('seq').AsString := dbgrid1.Fields[6].AsString;

execsql;

except

if isempty then

begin

showmessage('자료가 수정 되지 않았습니다 . 자료를 확인해 주십시요'); //===> 요기 요부분

exit;

end;



end;

showmessage('자료가 정상적으로 추가 되었습니다'); // 발생되는 message

end;

end;



위의 코드에서 isempth 시 발생되는 showmessage 가 보이네요..

update 문에서는 execsql로 open 을 대신 실행한다고 들었는데 이부분이 아닌지요? 위에서 변수 값으로 받을 값들은 seq, in_date,vendcd 3개중에 틀린 부분이 있지 않나 싶습니다.. dbgrid 에서 뿌려 주는 값을 각각의 필드 순으로 받아서(in_date 0번, vendcd 2번, seq를 7번째에 필드(dbgrid 는 첫번째 필드를 0번으로 표현하는 것이 맞지요?)로 받는데 값이 안 넘어 가네요.. db상에서의 query 는 잘 되는듯 한데.. 소스 상에 문제가 혹시 있나요? 고언을 바랍니다..

참고로 위의 try except 문을 삭제 하면 access violation error 이 뜨네요.. 부탁 드립니다..

7  COMMENTS
  • Profile
    돌파리 2001.10.06 02:07
    목동 wrote:

    > 아직 안 주무시죠? 저도 아직 안자고 있습니다.. ^^

    > 아래 두분께서 도와 주신대로 코딩을 했습니다만 조금 부족한 부분이 있어서 재차 질문 드립니다.

    >

    > procedure TFrmmain.TB_UClick(Sender: TObject); // insert , update query

    > begin

    > value_chk; // 필요 충분값 검사

    > if pagecontrol1.ActivePage = tabsheet1 then // 사외 방문자

    > begin

    > with query1 do

    > begin

    > try

    > close;

    > sql.Clear;

    > sql.Add(' update io_schedule set stat ="1" ');

    > sql.Add(' where in_date = :indate ');

    > sql.Add(' and seq = :seq ');

    > sql.Add(' and vendcd = :vendcd ');

    > parambyname('in_date').AsString := dbgrid1.Fields[0].asstring;

    > parambyname('vendcd').AsString := dbgrid1.Fields[1].AsString;

    > parambyname('seq').AsString := dbgrid1.Fields[6].AsString;

    > execsql;

    > except

    > if isempty then

    > begin

    > showmessage('자료가 수정 되지 않았습니다 . 자료를 확인해 주십시요'); //===> 요기 요부분

    > exit;

    > end;

    >

    > end;

    > showmessage('자료가 정상적으로 추가 되었습니다'); // 발생되는 message

    > end;

    > end;

    >

    > 위의 코드에서 isempth 시 발생되는 showmessage 가 보이네요..

    > update 문에서는 execsql로 open 을 대신 실행한다고 들었는데 이부분이 아닌지요? 위에서 변수 값으로 받을 값들은 seq, in_date,vendcd 3개중에 틀린 부분이 있지 않나 싶습니다.. dbgrid 에서 뿌려 주는 값을 각각의 필드 순으로 받아서(in_date 0번, vendcd 2번, seq를 7번째에 필드(dbgrid 는 첫번째 필드를 0번으로 표현하는 것이 맞지요?)로 받는데 값이 안 넘어 가네요.. db상에서의 query 는 잘 되는듯 한데.. 소스 상에 문제가 혹시 있나요? 고언을 바랍니다..

    > 참고로 위의 try except 문을 삭제 하면 access violation error 이 뜨네요.. 부탁 드립니다..



    parambyname('in_date').AsString ---> ParamByName('indate').AsString

  • Profile
    코스엑스 2001.10.05 11:41
    목동 wrote:

    > 아직 안 주무시죠? 저도 아직 안자고 있습니다.. ^^

    > 아래 두분께서 도와 주신대로 코딩을 했습니다만 조금 부족한 부분이 있어서 재차 질문 드립니다.

    >

    > procedure TFrmmain.TB_UClick(Sender: TObject); // insert , update query

    > begin

    > value_chk; // 필요 충분값 검사

    > if pagecontrol1.ActivePage = tabsheet1 then // 사외 방문자

    > begin

    > with query1 do

    > begin

    > try

    > close;

    > sql.Clear;

    > sql.Add(' update io_schedule set stat ="1" ');

    > sql.Add(' where in_date = :indate ');

    > sql.Add(' and seq = :seq ');

    > sql.Add(' and vendcd = :vendcd ');

    > parambyname('in_date').AsString := dbgrid1.Fields[0].asstring;

    > parambyname('vendcd').AsString := dbgrid1.Fields[1].AsString;

    > parambyname('seq').AsString := dbgrid1.Fields[6].AsString;

    > execsql;

    > except

    > if isempty then

    -----------------------------------------------

    execsql 은 항상 isEmpty 입니다 이유는 리턴 된

    Result Set 이 없기 때문이죠.

    if RowsAffected = -1 then 으로 바꾸시져..







    > begin

    > showmessage('자료가 수정 되지 않았습니다 . 자료를 확인해 주십시요'); //===> 요기 요부분

    > exit;

    > end;

    >

    > end;

    > showmessage('자료가 정상적으로 추가 되었습니다'); // 발생되는 message

    > end;

    > end;

    >

    > 위의 코드에서 isempth 시 발생되는 showmessage 가 보이네요..

    > update 문에서는 execsql로 open 을 대신 실행한다고 들었는데 이부분이 아닌지요? 위에서 변수 값으로 받을 값들은 seq, in_date,vendcd 3개중에 틀린 부분이 있지 않나 싶습니다.. dbgrid 에서 뿌려 주는 값을 각각의 필드 순으로 받아서(in_date 0번, vendcd 2번, seq를 7번째에 필드(dbgrid 는 첫번째 필드를 0번으로 표현하는 것이 맞지요?)로 받는데 값이 안 넘어 가네요.. db상에서의 query 는 잘 되는듯 한데.. 소스 상에 문제가 혹시 있나요? 고언을 바랍니다..

    > 참고로 위의 try except 문을 삭제 하면 access violation error 이 뜨네요.. 부탁 드립니다..







    다시써본 코드.

    procedure TFrmmain.TB_UClick(Sender: TObject); // insert , update query

    begin

    value_chk; // 필요 충분값 검사

    if pagecontrol1.ActivePage = tabsheet1 then // 사외 방문자

    with query1 do

    begin

    // try <-- 익셉션 핸들링 이 잘못됐음다.

    close;

    sql.Clear;

    sql.Add(' update io_schedule set stat ="1" ');

    sql.Add(' where in_date = :indate ');

    sql.Add(' and seq = :seq ');

    sql.Add(' and vendcd = :vendcd ');

    parambyname('in_date').AsString := dbgrid1.Fields[0].asstring;

    parambyname('vendcd').AsString := dbgrid1.Fields[1].AsString;

    parambyname('seq').AsString := dbgrid1.Fields[6].AsString;



    try

    execsql;

    if RowsAffected = -1 then

    showmessage('자료가 수정 되지 않았습니다 . 자료를 확인해');

    else

    Showmessage('자료가 정상적으로 추가 되었습니다'); // 발생되는 message



    except

    ShowMessage('에러발생');

    end;

    end;

    end;



  • Profile
    자유지역 2001.10.05 10:22
    sql.Add(' update io_schedule set stat ="1" '); // 그럼 이부분에서

    "1" 을 ""를 지우고 그냥 1로 바꾸어 보시면 가능할 것 같은데.. 함 해보세염..

    그럼 수고하세염..











    목동 wrote:

    > 아직 안 주무시죠? 저도 아직 안자고 있습니다.. ^^

    > 아래 두분께서 도와 주신대로 코딩을 했습니다만 조금 부족한 부분이 있어서 재차 질문 드립니다.

    >

    > procedure TFrmmain.TB_UClick(Sender: TObject); // insert , update query

    > begin

    > value_chk; // 필요 충분값 검사

    > if pagecontrol1.ActivePage = tabsheet1 then // 사외 방문자

    > begin

    > with query1 do

    > begin

    > try

    > close;

    > sql.Clear;

    > sql.Add(' update io_schedule set stat ="1" ');

    > sql.Add(' where in_date = :indate ');

    > sql.Add(' and seq = :seq ');

    > sql.Add(' and vendcd = :vendcd ');

    > parambyname('in_date').AsString := dbgrid1.Fields[0].asstring;

    > parambyname('vendcd').AsString := dbgrid1.Fields[1].AsString;

    > parambyname('seq').AsString := dbgrid1.Fields[6].AsString;

    > execsql;

    > except

    > if isempty then

    > begin

    > showmessage('자료가 수정 되지 않았습니다 . 자료를 확인해 주십시요'); //===> 요기 요부분

    > exit;

    > end;

    >

    > end;

    > showmessage('자료가 정상적으로 추가 되었습니다'); // 발생되는 message

    > end;

    > end;

    >

    > 위의 코드에서 isempth 시 발생되는 showmessage 가 보이네요..

    > update 문에서는 execsql로 open 을 대신 실행한다고 들었는데 이부분이 아닌지요? 위에서 변수 값으로 받을 값들은 seq, in_date,vendcd 3개중에 틀린 부분이 있지 않나 싶습니다.. dbgrid 에서 뿌려 주는 값을 각각의 필드 순으로 받아서(in_date 0번, vendcd 2번, seq를 7번째에 필드(dbgrid 는 첫번째 필드를 0번으로 표현하는 것이 맞지요?)로 받는데 값이 안 넘어 가네요.. db상에서의 query 는 잘 되는듯 한데.. 소스 상에 문제가 혹시 있나요? 고언을 바랍니다..

    > 참고로 위의 try except 문을 삭제 하면 access violation error 이 뜨네요.. 부탁 드립니다..

  • Profile
    목동 2001.10.05 10:31
    자유지역 wrote:

    > sql.Add(' update io_schedule set stat ="1" '); // 그럼 이부분에서

    > "1" 을 ""를 지우고 그냥 1로 바꾸어 보시면 가능할 것 같은데.. 함 해보세염..

    > 그럼 수고하세염..

    >

    >

    넹.. 여전히 수고 하고 있습니다.. 헥헥..

    stat 값은 db 에서 char(1) 로 잡혀 있습니다.. 미리 말씀 드렸어야 하는데.. 말씀 못 드렸네요..

    저 혹시 access violation 메세지 겪어 보신적이 있으신지요?

    지금 try-except 를 지우고 해보고 있는데 그 메세지가 뜨네요.. 이 메세지가 어떤때에 주로 뜨는지 알고 계신가요?

  • Profile
    자유지역 2001.10.05 10:55
    access violation 에러는 대부분 sql 문법 오류가 많구여, 가장 흔한게 데이터 타입이 맞질 않거나 해서 생기는 오류이구여, 간혹 철자 오류로 없는 테이블에 접근하려고 하면 생깁니다.. 뭐저도 초보라 정확히는 모르겠구여.. 경험상 그렇더라고여..

    그리구 어떤 DB쓰시는지?

    위에서 나열한 것들 한번 확인 해보시기 바랍니다.. 수고하세염..





    목동 wrote:

    > 자유지역 wrote:

    > > sql.Add(' update io_schedule set stat ="1" '); // 그럼 이부분에서

    > > "1" 을 ""를 지우고 그냥 1로 바꾸어 보시면 가능할 것 같은데.. 함 해보세염..

    > > 그럼 수고하세염..

    > >

    > >

    > 넹.. 여전히 수고 하고 있습니다.. 헥헥..

    > stat 값은 db 에서 char(1) 로 잡혀 있습니다.. 미리 말씀 드렸어야 하는데.. 말씀 못 드렸네요..

    > 저 혹시 access violation 메세지 겪어 보신적이 있으신지요?

    > 지금 try-except 를 지우고 해보고 있는데 그 메세지가 뜨네요.. 이 메세지가 어떤때에 주로 뜨는지 알고 계신가요?

  • Profile
    목동 2001.10.05 11:01
    자유지역 wrote:

    > access violation 에러는 대부분 sql 문법 오류가 많구여, 가장 흔한게 데이터 타입이 맞질 않거나 해서 생기는 오류이구여, 간혹 철자 오류로 없는 테이블에 접근하려고 하면 생깁니다.. 뭐저도 초보라 정확히는 모르겠구여.. 경험상 그렇더라고여..

    > 그리구 어떤 DB쓰시는지?

    > 위에서 나열한 것들 한번 확인 해보시기 바랍니다.. 수고하세염..

    >

    >

    예.. 감사 합니다.. 전 sql 6.5 사용합니다.. 계속 수고 하고 있겠습니다.. ^^

    차근차근 다시 살펴 봐야 겠네요.. 그런 오류라면.. 흠.....

    늦은 시간까지 고생하시네요...

  • Profile
    목동 2001.10.05 10:16
    꾸벅 감사 합니다.. 저도 금방 발견했는데요.. 그 부분은 고쳤네요.. 게시판에 올려 놓고 보니까 눈에 안 보이던 에러가 보이네요..

    그 부분은 고쳐서 다시 컴파일 해 봤습니다만.. 흠.. 아직 update가 안되고 있네요...

    조금더 살펴 보아 주실수 있을런지요?