>테이블을 Join하신 후, 수정하시려고 하신다면 UpdateSQL컴포넌트를 사용하셔야 합니
>다. UpdateSQL컴포넌트의 사용법은 도움말을 참고하시기 바랍니다.
Updatesql을 사용했는데요 에러( Cannot modify a read-only dataset )는 나오지
않는데 필드의 값이 수정되지 않습니다...
newdatamodule.newQuery1.UpdateObject := newdatamodule.UpdateSQL1;
newdatamodule.newQuery1.CachedUpdates := true;
sqlstr :='';
newquery1.Close;
newquery1.sql.clear;
sqlstr := 'select * from cdong c,adong a where c.pan=a.an';
newQuery1.sql.add(sqlstr);
newQuery1.ExecSQL;
newquery1.Open;
newquery1.RequestLive := true;
with newquery1 do
begin
i:=0;
First; //첫 레코드로 이동
while not Eof do
begin
edit;
fieldvalues['duc'] := 555;
post;
inc(i);
Next; //다음 레코드로
end; //end of while
end; //end of with}
newdatabase1.TransIsolation := tiDirtyRead;
with newquery1 do
begin
newDatabase1.StartTransaction;
try
ApplyUpdates;
newDatabase1.Commit;
except
newDatabase1.Rollback;
raise;
end;
CommitUpdates; {on success, clear the cache}
end;
안녕하십니까?
코딩을 보니까, 일단 로컬 DB를 쓰시는 군요.
그런데, 현 델파이에 있는 업데이트 SQL는 조인에 대해서는
수정을 할 수 없습니다.
즉, 조인을 하시고 업데이트 SQL를 썼다해도
수정 및 입력필드의 소속 테이블을 자체 판단해서
관리를 해주질 못합니다.
즉, 조인에 대해서는 현 델파이(4)에서는 되질 않습니다.
그리고, select 에서 substr(필드명,1, 1) 이런식으로
불러오면 역시 업데이트를 쓸 수 없죠.
귀하의 코딩을 보니까, 캐쉬를 쓰시네요.
캐쉬를 쓰신다면 RequestLive를 쓰지 마세요.
서로 충돌이 많이 생깁니다.
이유를 말씀하자면 좀 길어지니 생략하겠습니다.
업데이트를 쓰신다면 주로 캐쉬만을 써서 작업을 하시는것이
안전합니다.
다만, 위에서 언급했듯 조인이나 부분필드 끌어오기를 하시면
업데이트는 수정 및 입력을 해도 실제 테이블에 반영을 하지 못합니다.
제가 인터넷에 보니까 갱신된 업데이트가 있더라구요.
그것은 조인에 대해서도 수정 및 입력을 할 수 있다고 하는데,
장담을 못한다고 씌여있어라구요.
천상 하드코딩을 하셔야 겠습니다.
그럼...