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 니까, 읽기만 하는게 아닌, 즉, 쓰기도 가능하다는거 맞죠??
음... 근데, 왜 수정이 안될까요??
한번 봐 주세요~~~
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;