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로 했습니다.
조언좀 부탁드려요.
문제가 없겠습니다.
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에 넣도록 해라"라고,
명시하는 것이라는 뜻입니다.
간만에 들어와서 설명할려니.
좀 버벅댄는군여..
어쨌든 이해는 가실것이라는 추측이.... ^^;
그럼..