DBGridについて

解決


よしの  2008-02-07 21:22:40  No: 29715  IP: 192.*.*.*

Delphi5で以下のようなことを試みてます。
かなり苦戦しています。よろしければ、助けて下さい。

項目        値段    生産地    売買
----------------------------------------
パソコン1  10万    日本      OK
パソコン2  15万    米国      OK
パソコン3  5万     台湾      NG
パソコン4  10万    台湾      OK
パソコン5  10万    日本      NG

上記のようなデータベースファイル(*.db)があります。
1.項目からパソコン3を検索し、パソコン3の行を更新したいです。
  5万を10万に。NGをOKに。といった感じです。
2.各欄のソートをしたいです。
  値段の欄をソートするボタンを押すと、5,10,10,10,15万と並び変わります。

現在作成したデータベースはDelphiのDataSource、Queryコンポーネントを使用し作成しています。

編集 削除
Fusa  2008-02-07 21:40:55  No: 29716  IP: 192.*.*.*

それは、SQL文の質問になるんでしょうか?
こんなもんかな?

> 1.項目からパソコン3を検索し、パソコン3の行を更新したいです。
>   5万を10万に。NGをOKに。といった感じです。

UPDATE [TABLE名] SET 値段='10万', 売買='OK' WHERE 項目='パソコン3'

> 2.各欄のソートをしたいです。
>   値段の欄をソートするボタンを押すと、5,10,10,10,15万と並び変わります。

SELECT 項目,値段,生産地,売買 FROM [TABLE名] 
ORDER BY [値段] (DESC)

DESCを付ける付けないで降順か昇順か変わります。

編集 削除
よしの  2008-02-08 10:18:38  No: 29717  IP: 192.*.*.*

Fusaさん、ありがとうございます。

SQL文での対応しか無理でしょうか?
プログラムで対応したいのですが。

編集 削除
よしの  2008-02-08 19:02:54  No: 29718  IP: 192.*.*.*

nextを使って、行移動し、その行のデータを取得。
そして、その行の情報を変更し、nextで次の行へ移動するという方法で作成してみようと思います。

ただ、ソートの方法が分かりません。
DBGridでのソートについて、知ってることがあれば、教えて下さい。
よろしくお願いします。

編集 削除
DEKO  2008-02-08 19:37:20  No: 29719  IP: 192.*.*.*

この辺を参考にしてみて下さい。

[DBGridでソートするには?]
https://www.petitmonte.com/bbs/answers?question_id=1661

[データセットをソートする (ADO)]
http://www.wwlnk.com/boheme/delphi/dbtips/css0320.htm

編集 削除
HOta  2008-02-08 21:57:12  No: 29720  IP: 192.*.*.*

SQLも立派にプログラムの中だと思います。

編集 削除
よしの  2008-02-12 11:31:45  No: 29721  IP: 192.*.*.*

HOtaさん、すみません。

SQLについて、知りませんでしたので、他の方法で対応したいと思い、
あのような言葉となりました。

SQLを実行するにはどうしたらよいのでしょうか?

編集 削除
よしの  2008-02-13 19:00:51  No: 29722  IP: 192.*.*.*

過去ログなどをみて、少しずつ進めてみました。
ある程度作成できたのですが、データを更新するときに
書込み禁止のエラーが発生し、データを更新しません。
書込み禁止解除はどうすればよいのでしょうか?

編集 削除
BT  2008-02-13 21:17:52  No: 29723  IP: 192.*.*.*

TQueryのRequestLiveプロパティを true  でよいですね。

編集 削除
よしの  2008-02-14 09:02:14  No: 29724  IP: 192.*.*.*

BTさん、ありがとうございます。
TQueryのRequestLiveはTrueになってます。

プログラムです。
LotDataGrid.DataSource.DataSet.Edit;
LotDataGrid.DataSource.DataSet.FieldByName('ProcTime').AsString := strProgTime;
LotDataGrid.DataSource.DataSet.FieldByName('ConvTime').AsString := strConvTime;
LotDataGrid.DataSource.DataSet.FieldByName('Status').AsString := strRenewalStatus;
LotDataGrid.DataSource.DataSet.FieldByName('RestTime').AsString := strRestTime;
LotDataGrid.DataSource.DataSet.Post;

編集 削除
よしの  2008-02-14 19:29:17  No: 29725  IP: 192.*.*.*

過去ログなどを見ながら作成しました。
どうにかカタチになりました。

書き込みエラーがでてたのは、SQLでソートしていた部分が悪さをしていたみたいです。
SQL文よりテーブルをSELECTしてたのですが、
ソートのSQL文でテーブルのSQL文が上書きされていた?みたいです。

編集 削除