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回目以降はエラーが出て実行出来なくなります。
何分にも初心者です、宜しくお願いします。
ADOQuery1のSQL文と、該当テーブルの構造(インデックスなど)はどうなっていますか?
ADOQuery1のSQL文はシンプルなselect * from teblenameです。インデッックスは数値型の一次インデックスを使用しています。
テーブルの構造(インデックスなど)に対しての答えは、もっと具体的に書かれた方が返事はしやすいのですが。。。。
エラーの種類は特定できませんか?
また、UpdateをSQLでUpdate teblename set Field1=Field1Val
などで更新はできませんか?
Query 使うなら SQL の UPDATE 文で更新してみてください。
update [表名] set DAYTIME = [あらかじめお使いの日付型にあわせた日時]
where [KEY項目] = xxx
PARADOX は大昔すぎて覚えていませんが、.AsDateTime などは
型変換のエラーがでることがあります。自分で string 型に変換して
おいて .AsString で代入するのがトラブルにあわない秘訣です。
皆さんどうも有難うです!!
snailさんの・・・
「自分で string 型に変換しておいて .AsString で代入するのがトラブルにあわない秘訣です。」
の通りADOQuery1.FieldByName('DAYTIME').AsString :='2013/01/0101:1:01';
でうまくいきました!
ツイート | ![]() |