안녕하세요.
매번 질문만 하게 되네요.
with datamodule do
begin
sqlstr :='';
query1.Close;
query1.sql.clear;
sqlstr := 'select * from C'+xdat+' D,A'+xdat+' D1 ';
sqlstr := sqlstr + 'WHERE (D.PAN = D1.AN) and a_s is null ';
sqlstr := sqlstr + 'ORDER BY D.PAN, D1.AN';
query1.add(sqlstr);
query1.ExecSQL;
query1.RequestLive := true;
with datasource.DataSet do
begin
//{DataSet이 열람가능일때만 작업}
//if State = dsBrowse then
// exit;
First; //첫 레코드로 이동
while not Eof do
begin
Edit;
FieldByName('f1').Asstring := 'aa';
Post;
Next; //다음 레코드로
end; //end of while
end; //end of with
end; // end if with
위와같이 두 테이블을 조인 한 다음에 d1에 있는 필드를 d에 있는 필드값으로 수정을 하려고 하는데요. 에러가 발생합니다.( Cannot modify a read-only dataset )
또 다음과같은 작업을 할때에 위와같이 해야되는 것인지 조차 잘 모르겠습니다.
(위에서는 조건에 맞게 조인한다음 만들어진 테이블을 가지고 처음 레코드부터
끝 레코드까지 Looping하여 수정할 필드의 값을 주는형식입니다, select 문에서
바로 Update 문을 쓸수 없나요...)
선배님들의 많은 도움 부탁합니다.
db는 dbaseIII+를 사용합니다.
> 안녕하세요.
> 매번 질문만 하게 되네요.
>
> with datamodule do
> begin
> sqlstr :='';
> query1.Close;
> query1.sql.clear;
> sqlstr := 'select * from C'+xdat+' D,A'+xdat+' D1 ';
> sqlstr := sqlstr + 'WHERE (D.PAN = D1.AN) and a_s is null ';
> sqlstr := sqlstr + 'ORDER BY D.PAN, D1.AN';
> query1.add(sqlstr);
> query1.ExecSQL;
> query1.RequestLive := true;
>
> with datasource.DataSet do
> begin
> //{DataSet이 열람가능일때만 작업}
> //if State = dsBrowse then
> // exit;
> First; //첫 레코드로 이동
> while not Eof do
> begin
> Edit;
> FieldByName('f1').Asstring := 'aa';
> Post;
> Next; //다음 레코드로
> end; //end of while
> end; //end of with
> end; // end if with
>
> 위와같이 두 테이블을 조인 한 다음에 d1에 있는 필드를 d에 있는 필드값으로 수정을 하려고 하는데요. 에러가 발생합니다.( Cannot modify a read-only dataset )
> 또 다음과같은 작업을 할때에 위와같이 해야되는 것인지 조차 잘 모르겠습니다.
> (위에서는 조건에 맞게 조인한다음 만들어진 테이블을 가지고 처음 레코드부터
> 끝 레코드까지 Looping하여 수정할 필드의 값을 주는형식입니다, select 문에서
> 바로 Update 문을 쓸수 없나요...)
> 선배님들의 많은 도움 부탁합니다.
>
> db는 dbaseIII+를 사용합니다.
>
Tquery 에서 조인한 결과물을 수정할 수는 없다고 도움말에서 봤습니다.
(제가 해봐도 안됐구요)
저같은 경우는 Query문을 수정해서 썼습니다.
--
select * from d1 where aa in select dd from d where bb = :bb;
update 할 컬럼의 테이블을 앞에서 select 하고 조인조건 대신에 Sub Query로 썼는데
저랑 같은 경우인지 잘 모르겠네요....