ADO、日付時刻型の更新エラーを回避するには?

解決


奈美  2013-09-30 21:33:16  No: 45351

WindowsXp、Delphi6Proで開発しています。ADOでParadoxを使い操作しているのですが日付時刻型を再更新するプログラムを実行するとエラーが出てしまいます。どこが悪いかお解かりの方教えて下さい。

・まずADOConnectionの接続は問題なく実行出来ています(ODBC→ファイルDSN使用)。

・下記プログラムのフィールドDAYTIMEは日付時刻型です。

ADOQuery1.Open;
while not ADOQuery1.Eof Do
begin
  ADOQuery1.Edit;
  ADOQuery1.FieldByName('DAYTIME').AsDateTime :=Now;
  ADOQuery1.Post;
  ADOQuery1.Next;
end;
ADOQuery1.Close;

※初回実行すると問題無く行えるのですが2回目以降は以下のエラーが出て以降同一エラーが出て実行出来なくなります。

「エラーメッセージ」
行が見つからなかったため、更新出来ません。列の値は最後に読み込まれた後で変更された可能性があります。

※日付時刻型フィールド以外は問題なく更新出来ます。

※DAYTIMEフィールドを削除し再度設定すると初回は実行出来ますが2回目以降はエラーが出て実行出来なくなります。

何分にも初心者です、宜しくお願いします。


Quest  2013-10-01 00:17:49  No: 45352

ADOQuery1のSQL文と、該当テーブルの構造(インデックスなど)はどうなっていますか?


奈美  2013-10-01 16:27:23  No: 45353

ADOQuery1のSQL文はシンプルなselect * from teblenameです。インデッックスは数値型の一次インデックスを使用しています。


HOta  2013-10-01 19:22:10  No: 45354

テーブルの構造(インデックスなど)に対しての答えは、もっと具体的に書かれた方が返事はしやすいのですが。。。。
エラーの種類は特定できませんか?
また、UpdateをSQLでUpdate teblename set Field1=Field1Val
などで更新はできませんか?


snail  2013-10-01 19:31:27  No: 45355

Query 使うなら SQL の UPDATE 文で更新してみてください。

update [表名] set DAYTIME = [あらかじめお使いの日付型にあわせた日時] 
 where [KEY項目] = xxx

PARADOX は大昔すぎて覚えていませんが、.AsDateTime などは
型変換のエラーがでることがあります。自分で string 型に変換して
おいて .AsString で代入するのがトラブルにあわない秘訣です。


奈美  2013-10-02 01:08:38  No: 45356

皆さんどうも有難うです!!

snailさんの・・・

「自分で string 型に変換しておいて .AsString で代入するのがトラブルにあわない秘訣です。」

の通りADOQuery1.FieldByName('DAYTIME').AsString :='2013/01/0101:1:01';
でうまくいきました!


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

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






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