Tableを使ってデータセット内の前のレコードや次のレコードにカーソルを
移動されたいのですが、うまく動きません。
下記の様に書きましたが、カーソルは移動しませんでした。
Table1.Locate('EDPNO',KeyStr,[ ])
Table1.Prior;
Response.Content:= claim.Content;
・
・
何か良い方法がありましたら教えて下さい。 宜しくお願いします。
Priorでなく、FindPriorでは動きませんか?
TDataSet.FindPriorのヘルプに、例が出ています。
# 当方、Delphi5
にしのさんありがとうございました。 カーソルを移動する事が出来ました。
申し訳ありませんがもう一つ質問したい事があるのですが、ボタンを押して
カーソルを移動して、そのレコードを更新したいと思っているのですが、
それもうまく動きません。下記の様に書きました。
<Table>
KANRINO:= requestUrl.QueryString['KANRINO'];
Table1.FieldByName('KANRINO').AsString:= KANRINO;
if DataBase1.InTransaction then DataBase1.Commit;
dataBase1.StartTransaction;
try
Table1.Post;
DataBase1.Commit;
except
DataBase1.Rollback;
end;
どのレコードにカーソルを移動して更新しても最初のレコードしか更新されない。
<Query>
EDPNO:= requestUrl.QueryString['EDPNO'];
KANRINO:= requestUrl.QueryString['KANRINO'];
Query1.SQL.Add('UPDATE TEST SET kanrino=:KANRINO');
Query1.SQL.Add(' WHERE edpno=:EDPNO');
Query1.Prepare;
Query1.ParamByName('edpno').AsString:= EDPNO;
Query1.ParamByName('kanrino').AsString:= KANRINO;
Query1.ExecSQL;
どのレコードも更新されない。
という結果でした。 何か良い方法がありましたら教えて下さい。
宜しくお願いします。
データベースに関しては疎いので、あっているかどうかわかりませんが^^;
TDataSet.FieldByNameのヘルプを見ると、「注意」のところに、
> 指定した項目の値を取得または設定する場合は,FieldByName ではなく,
> データセットのデフォルトプロパティの FieldValues を使用します。
と書いてありますから、<Table>で行っているFieldByNameを、FieldValuesに変更してみてはどうですか?
早速お返事ありがとうがざいます。 私もヘルプを見たりして試行錯誤を
繰り返していますが、未だにうまく動きません。
にしのさんがおっしゃっているFieldValuesも試してみましたが
やはりTableを使って更新をしようとすると、どこにカーソルがあっても
最初のレコードしか更新されません。
また良い方法がありましたら教えて下さい。
こんなので更新できました。
StartTransactionあたりのヘルプに例があります。
Table1.Edit; { ここに来る前に、カレントレコードの位置を変えておく }
Table1.FieldValues['部署'] := 'BBB'; { 値を変更 }
with Table1 do
begin
Database1.StartTransaction;
try
ApplyUpdates; { 更新内容をデータベースに書き込む }
Database1.Commit; { 成功した場合,変更をコミットする }
except
Database1.Rollback; { 失敗した場合,変更を取り消す }
raise; {CommitUpdates が呼ばれないように例外を生成する }
end;
CommitUpdates; { 成功した場合,キャッシュをクリアする }
end;
1つ忘れてました。
Table1の、CachedUpdatesをTrueに変更です。
にしのさん、また返事をくださってありがとうございます。
にしのさんがおっしゃっていた通り、StatrTransactionのヘルプ参考にして
試してみましたがやはり更新はされませんでした。
最初の1件はちゃんと更新されて表示もされるのですが、他のレコードを更新すると
更新も表示もされず、変更したはずの値が最初のレコードに入ってしまいます。
このヘルプを見て思った事なんですが、このヘルプの例の場合、ボタンを
クリックした場合に更新の処理をする・・・という様に解釈できるのですが、
違いますか?? 私がやりたいのは'->'ボタンや'<-'ボタンを押した時に
1つ前や1つ後のレコードを表示して、値を変更したいレコードの値を変更して
変更ボタンを押すと変更する・・・というプログラムが作りたいと思っています。
さらにWeb上に表示したいと思っています。
説明不足ですし、専門用語もあまりしらないので分かりずらいと思いますが
申し訳ありません。 何度も申し訳ありませんが、また良い方法がありましたら
教えて下さい。 宜しくお願いします。
'->'ボタンって、Navigatorのレコード移動ボタンですか?
個人的には、この場合は自前で用意した方がよいと思います。
ちょっと読みとれなかったので、'->'が次レコードボタンで、'<-'が前レコードボタンだとします。
「前レコードボタンを押したときに、次へ進んで値を変更する」だと、「現在の値を変更する」のと同じ気がしますが、違いますか?
そうなると、やはり「前レコード」を用意するより、「現在の値を○○に変更して更新」ボタンが妥当かと。
Webに表示することと、データを操作することは別で考えた方がいいです。いっぺんに考えて、いっぺんに組み込もうとすると、1つバグが出ただけでいろいろ見なければならなくなるので。
にしのさん、お返事ありがとうがざいます。 また説明不足だった様で
申し訳ありませんでした。 まだ初心者なので何と説明したらうまく伝わるのか
分からない時があります。 その時はまた聞いて下さい。
'->'ボタンや'-<'ボタンはHTMLで書いています。 透過タグで'->'ボタンが
押されたら今表示しているレコードに対して1つ先のレコードを表示、また
'-<'ボタンが押されたら今表示しているレコードに対して1つ前のレコードを
表示する、という事がしたいと思っています。 それはテーブルを使って
動く様になりましたが、更新は未だに出来ていない状態です。 レコードを
移動させる時に元になる値を、レコードが移動する度にHIDDENで格納しているので
それと何か関係があるのかな・・・と考えているのですが・・・。
また分かりずらい説明になってしまいましたが、また何か良い方法がありましたら
教えて下さい。 宜しくお願いします。
Webアプリケーションですか?
動作の基本は同じです。
Actionが呼び出されたときに、データベースを検索・移動・更新させればよいだけです。
Webアプリケーションを走らせる環境に無いので、GUIのボタンでの動作ですが、こんな感じで出来るはずです。
それとも、Webアプリケーションだと動かないのでしょうか。
そうなると環境の問題ですかね。
うちの環境は、
Delphi5 + Oracle8i + ODBC(Oracle ODBC Driver)
です。
begin
Table1.Locate('氏名コード', 'CC',[ ]); { 検索 }
Table1.FindPrior; { 検索したレコードの前のレコードへ移動 }
Table1.Edit; { 編集モード }
Table1.FieldValues['部署'] := 'BBB'; { 値の変更 }
with Table1 do
begin
Database1.StartTransaction;
try
ApplyUpdates; { 更新内容をデータベースに書き込む }
Database1.Commit; { 成功した場合,変更をコミットする }
except
Database1.Rollback; { 失敗した場合,変更を取り消す }
raise; {CommitUpdates が呼ばれないように例外を生成する }
end;
CommitUpdates; { 成功した場合,キャッシュをクリアする }
end;
end;
ツイート | ![]() |