Q&A

  • Updatesql 에서 수정이 안되요..
>테이블을 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;





1  COMMENTS
  • Profile
    이재식 1999.11.19 04:49
    이재식 Wrote :

    안녕하십니까?



    코딩을 보니까, 일단 로컬 DB를 쓰시는 군요.

    그런데, 현 델파이에 있는 업데이트 SQL는 조인에 대해서는

    수정을 할 수 없습니다.

    즉, 조인을 하시고 업데이트 SQL를 썼다해도

    수정 및 입력필드의 소속 테이블을 자체 판단해서

    관리를 해주질 못합니다.

    즉, 조인에 대해서는 현 델파이(4)에서는 되질 않습니다.

    그리고, select 에서 substr(필드명,1, 1) 이런식으로

    불러오면 역시 업데이트를 쓸 수 없죠.

    귀하의 코딩을 보니까, 캐쉬를 쓰시네요.

    캐쉬를 쓰신다면 RequestLive를 쓰지 마세요.

    서로 충돌이 많이 생깁니다.

    이유를 말씀하자면 좀 길어지니 생략하겠습니다.



    업데이트를 쓰신다면 주로 캐쉬만을 써서 작업을 하시는것이

    안전합니다.

    다만, 위에서 언급했듯 조인이나 부분필드 끌어오기를 하시면

    업데이트는 수정 및 입력을 해도 실제 테이블에 반영을 하지 못합니다.



    제가 인터넷에 보니까 갱신된 업데이트가 있더라구요.

    그것은 조인에 대해서도 수정 및 입력을 할 수 있다고 하는데,

    장담을 못한다고 씌여있어라구요.



    천상 하드코딩을 하셔야 겠습니다.



    그럼...