Q&A

  • DB 수정하려는데, 에러가 납니다.... 한번 봐 주세요...
Query1.Open;

Query1.Locate('id', Label1.Caption, [loCaseInsensitive]);



ShowMessage(Query1.FieldByName('id').AsString); // 실제로 변경하려는 레코드가 맞는지 확인



Query1.Edit;

Query1.FieldByName('nickname').AsString := Edit1.Text;

Query1.FieldByName('type').AsString := ComboBox1.Text;

Query1.Post;

Query1.Close;





위와 같이 했구요...



Query1.Sql 은요...... select * from person 입니다.



수정하기 위해서 연다고, Update 문을 쓰는건 아니죠????



에러 메시지는 다음과 같습니다...

-------------------------------------------

Project chat.exe raised exception class EDatabaseError with message

'Query1:Cannot modify a read-only dataset'.

Process stopped. Use Step or Run to continue.

-------------------------------------------



데이타셋이 읽기만 되어 있다는데.. Readonly 속성이 Query1 에는 없거든요..

Query1과 연결되어 있는 Table1 에도 Readonly 속성이 False 로 되어 있구요..



False 니까, 읽기만 하는게 아닌, 즉, 쓰기도 가능하다는거 맞죠??



음... 근데, 왜 수정이 안될까요??



한번 봐 주세요~~~



3  COMMENTS
  • Profile
    안정한 2000.04.01 02:26
    Query Component는 Edit Mode가 되지 않는 걸로 알고 있습니다.



    Query Component는 하나이상의 Table을 Join하여 사용하기 때문에

    특정한 Record의 값을 Edit로 정정 할 수 없습니다.

    하나의 Table을 Select하더라도...



    Query Component를 사용했으면 Update문장을 쓰시는게 옳을 줄 압니다.



    Query1.CLose;

    Query1.SQl.Clear;

    Query1.SQL.Add(' update person ');

    Query1.SQl.Add(' set nickname = :pnickname ');

    Query1.SQl.Add(' , type = :ptype');



    조건문이 있으면 좋겠죠..

    Query1.SQl.Add(' where person_id = :pid');

    Query1.parambyname('nickname').AsString := Edit1.Text;

    Query1.parambyByName('type').AsString := ComboBox1.Text;

    Query1.parambyByName('pid').AsString := 'rarara';

    Query1.Execsql;

    Query1.Close;



  • Profile
    노태협 2000.04.01 02:14
    이수정 wrote:

    > Query1.Open;

    > Query1.Locate('id', Label1.Caption, [loCaseInsensitive]);

    >

    > ShowMessage(Query1.FieldByName('id').AsString); // 실제로 변경하려는 레코드가 맞는지 확인

    >

    > Query1.Edit;

    > Query1.FieldByName('nickname').AsString := Edit1.Text;

    > Query1.FieldByName('type').AsString := ComboBox1.Text;

    > Query1.Post;

    > Query1.Close;

    >

    >

    > 위와 같이 했구요...

    >

    > Query1.Sql 은요...... select * from person 입니다.

    >

    > 수정하기 위해서 연다고, Update 문을 쓰는건 아니죠????

    >

    > 에러 메시지는 다음과 같습니다...

    > -------------------------------------------

    > Project chat.exe raised exception class EDatabaseError with message

    > 'Query1:Cannot modify a read-only dataset'.

    > Process stopped. Use Step or Run to continue.

    > -------------------------------------------

    >

    > 데이타셋이 읽기만 되어 있다는데.. Readonly 속성이 Query1 에는 없거든요..

    > Query1과 연결되어 있는 Table1 에도 Readonly 속성이 False 로 되어 있구요..

    >

    > False 니까, 읽기만 하는게 아닌, 즉, 쓰기도 가능하다는거 맞죠??

    >

    > 음... 근데, 왜 수정이 안될까요??

    >

    > 한번 봐 주세요~~~

    >





    !!!! update 하실때는 update문을 사용하세요...

    <예>

    cm_Database.Connected := True;

    cm_Database.StartTransaction;

    with cm_q do

    begin

    sql.clear;

    sql.add(' update memb_reg set ');

    sql.add(' mem_flg = '); sql.add('''' + mem_flg + '''');

    sql.add('where id = ');

    sql.add('''' + id.text + '''');

    try

    Execsql;

    cm_Database.Commit;



    cm_Database.Connected := false;



    except

    close;

    cm_Database.Rollback;

    cm_Database.Connected := false;

    exit;

    end;

    end;











  • Profile
    강인규 2000.04.01 02:11
    쿼리에는 readonly는 없지만 대신 RequestLive라는 속성이 있지요.

    이걸 true로 해주셔야 합니다.







    이수정 wrote:

    > Query1.Open;

    > Query1.Locate('id', Label1.Caption, [loCaseInsensitive]);

    >

    > ShowMessage(Query1.FieldByName('id').AsString); // 실제로 변경하려는 레코드가 맞는지 확인

    >

    > Query1.Edit;

    > Query1.FieldByName('nickname').AsString := Edit1.Text;

    > Query1.FieldByName('type').AsString := ComboBox1.Text;

    > Query1.Post;

    > Query1.Close;

    >

    >

    > 위와 같이 했구요...

    >

    > Query1.Sql 은요...... select * from person 입니다.

    >

    > 수정하기 위해서 연다고, Update 문을 쓰는건 아니죠????

    >

    > 에러 메시지는 다음과 같습니다...

    > -------------------------------------------

    > Project chat.exe raised exception class EDatabaseError with message

    > 'Query1:Cannot modify a read-only dataset'.

    > Process stopped. Use Step or Run to continue.

    > -------------------------------------------

    >

    > 데이타셋이 읽기만 되어 있다는데.. Readonly 속성이 Query1 에는 없거든요..

    > Query1과 연결되어 있는 Table1 에도 Readonly 속성이 False 로 되어 있구요..

    >

    > False 니까, 읽기만 하는게 아닌, 즉, 쓰기도 가능하다는거 맞죠??

    >

    > 음... 근데, 왜 수정이 안될까요??

    >

    > 한번 봐 주세요~~~

    >