MySqlで同一のデーター項目を書き込もうとするとエラーが表示されるのはどうしてでしょうか?。

解決


ヤマッチ  2013-01-09 02:22:13  No: 43615

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を利用した開発者の方々、回避方法がありましたらお教え下さい。宜しくお願いします。


ヤマッチ  2013-01-10 21:38:52  No: 43616

「自己解決」

どうもデーター訂正時に全てのフィールドに変更が無いとこのエラーが出るみたいです。テーブル内に数値型のダミー項目を追加して毎回プラス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;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加