MySqlを使って開発を行っています。ADOテーブルコンポーネントでデーターを操作しているのですが単純な箇所でエラーが表示され悩んでいます。
下記の様に登録済みのデータ−に同一の値を書き込もうとするとエラーが毎回表示されます。環境はDelphi6、OSはWindowsXpです。
// エラーが表示される場合(データーは空だったと仮定します。)
ADOTable1.Open;
ADOTable1.Append;
ADOTable1.FieldByName('FIELD1').AsInteger :=100:
ADOTable1.Post;
ADOTable1.Edit;
ADOTable1.FieldByName('FIELD1').AsInteger :=100:
ADOTable1.Post;
// エラーが表示さない場合(データーは空だったと仮定します。)
ADOTable1.Open;
ADOTable1.Append;
ADOTable1.FieldByName('FIELD1').AsInteger :=100:
ADOTable1.Post;
ADOTable1.Edit;
ADOTable1.FieldByName('FIELD1').AsInteger :=999:
ADOTable1.Post;
「エラーメッセージ」
行が見つからなかったため、更新できません。列の値は最後に読み込まれた後で変更された可能性があります。
質問1...これはDelphiかMysqlのバグでしょうか?
質問2...プロパティー0の設定等で回避する方法はありますでしょうか?
質問3...バグでないとすると何の意味でMysql側からこのメッセージが出るのでしょうか?
Mysqlを利用した開発者の方々、回避方法がありましたらお教え下さい。宜しくお願いします。
「自己解決」
どうもデーター訂正時に全てのフィールドに変更が無いとこのエラーが出るみたいです。テーブル内に数値型のダミー項目を追加して毎回プラス1するとデーターは変更されるのでエラーは出ませんでした。
// エラーが回避方法(データーは空だったと仮定します。)
ADOTable1.Open;
ADOTable1.Append;
ADOTable1.FieldByName('FIELD1').AsInteger :=100:
ADOTable1.FieldByName('COUNTER').AsInteger :=ADOTable1.FieldByName('COUNTER').AsInteger +1;
ADOTable1.Post;
ADOTable1.Edit;
ADOTable1.FieldByName('FIELD1').AsInteger :=100:
ADOTable1.FieldByName('COUNTER').AsInteger :=ADOTable1.FieldByName('COUNTER').AsInteger +1:
ADOTable1.Post;
ツイート | ![]() |