Q&A

  • ApplyUpdates에서 에러가 뜹니다. 조언좀....
tlog604_1.db라는 파라독스테이블에 update하려고 하는데요

update문장은
uf_Get_UQuery(
  'Update drvdbtlog604_1.db   '+
  '   Set 수량=수량+11,        '+
  '       중량=중량+12.5       '+
  ' Where 제품코드 = ''12345'' ');


function Tflog604.uf_Get_UQuery(ps_query_str) : longint;
begin
   qryCom.Close;
   qryCom.Sql.Clear;
   qryCom.Sql.Add(ps_query_str);
   try
       qryCom.ExecSql;
       qryCom.ApplyUpdates;   <-----여기에서 에러가 뜹니다.
       qryCom.CommitUpdates;
       qryCom.close;
       qryCom.open;
       Result := C_TRUE;
   except
       Result := C_FALSE;
   end;
end;

메세지는 "qryCom:Dataset not in edit of insert mode " 이예요.

그래서 qryCom.ApplyUpdates;의 앞에 qryCom.Edit;도 해봤는데 역시 안되는군요.
TQuery의 cachedupdates 와 requestLive는 true로 했습니다.
조언좀 부탁드려요.
2  COMMENTS
  • Profile
    김경록 2003.07.14 03:15
    결과적으로 아래 2 line을 제거해 주시면
    문제가 없겠습니다.

          qryCom.ApplyUpdates;   <-----여기에서 에러가 뜹니다.
          qryCom.CommitUpdates;

    이유를 간단히 설명드리면,
    "qryCom.ExecSql"
    위 문장때문에 그렇습니다.
    ExecSQL은 직접적으로 DB에 SQL문장을 수행토록
    하는 것이기때문에..
    Client에서 또다시 ApplyUpdates, CommitUpdate를 수행하여
    Query 내용을 수행하라고 할 수 없습니다.
    다시말해서, ExecSQL은 DB에서 직접적으로 수행되어지고
    Query문 내용은 Error가 없다면, 성공적으로 수행후 제거됩니다.
    하지만, ApplyUpdates는
    Component에서 어떤 data를 조작후에
    그 내용을 직접적으로 DB에 넣어라고 명령하는 것입니다.
    즉,
    "Data 조작이 끝났으니..
    Component 너는 DB에 해당 내용을 DB에 넣도록 해라"라고,
    명시하는 것이라는 뜻입니다.

    간만에 들어와서 설명할려니.
    좀 버벅댄는군여..
    어쨌든 이해는 가실것이라는 추측이....  ^^;
    그럼..



  • Profile
    꼬부랑할마시 2003.07.12 01:14
    qryCom.ApplyUpdates;

    이건 안쓰야 되는거 아닌가요 ?