Queryにより取得したデータをTableに登録する際に同一キーが存在する場合値を合計し更新する方法がわかりません
Tname.Append;
Tname.Fields[0].AsString := Fname.Fields[0].AsString; //Key1
Tname.Fields[1].AsString := Fname.Fields[1].AsString; //Key2
Tname.Fields[2].AsFloat := Data; //値
Tname.Post
間違って送信してしまいました
上記だとキー違反がでてしまうので
Tname.SetKey;
Tname.Fields[0].AsString := Fname.Fields[0].AsString;
Tname.Fields[1].AsInteger := Fname.Fields[1].AsString;
if Tname.GotoKey then
Tname.Edit
else
Tname.Append;
でチェックしてるのですが
「一般SQLエラー ORA-01410:ROWIDが無効です」
と出てしまいます。
まったく原因がわからないのでご教授お願い致します
環境は
Win2000 Delphi7 Oracleです
接続方法は?
BDE?
BDEなら、BDEAdminの設定は?
> まったく原因がわからないのでご教授お願い致します
わたしもOracleに接続しているということしかわかりません。
Delphi7 ってことは、BDEじゃなくDBExpress(よく知らん(^^ゞ)とか?
早速のレスありがとうございます
どう説明したらいいのか・・・・・
簡単に処理の流れを書いて見ます。
はじめにTable内のデータを削除する。
ファイル(CSV)を順次読み込みTableに登録更新を行う。
ファイル内容
Key1,Key2,Data
1, 1, 10
1, 2, 10
1, 3, 10
1, 1, 20
1, 2, 20
1, 2, 30
1, 3, 20
このようなファイルを読み込み
Key1,Key2で集計を行い
1, 1, 30
1, 2, 60
1, 3, 30
でTableに登録したいのですが・・・
ファイル(CSV)そのまま一時Tableにうつして、そのTableに
select sum(Date) from Table名 group by(key1+key2)
のクエリーを発行すればよい(?)のかな?
データーベースは何をお使いでしょうか?
また、テーブルの構造はどうなっていますか?
キーも何もないのでしょうか?
クエリーは
select Key1,Key2,sum(data) from テーブル名 group by Key1,key2
ですね。
1)SELECT で Key1,key2 で絞り込み
2)データがあれば、Update SQLで更新
なければInsert SQLで追加
もしくは、
1)InsertSQLをいきなり発行
2)成功したら終了、失敗したらUpdateSQLで更新する。
以上
Oracleに接続しているってことで、ある程度接続方法は限られてくるが、
接続方法はともかく、SQLでさっくり済ませるのがいいかと思われ。
みなさまレスありがとうございます
みなさまのご意見を参考に
じぶんなりに頑張ってみます!
SQLでさっくり済ませました
みなさんありがとうございましたm(_ _)m
ツイート | ![]() |