現在、delphi4のservice pack3のデータベースoracle 8iを使って、プログラムを組んでいるのですが、DBGridに表示されたデータの1つのcell(たとえば、ID)をクリックすることによって、選択されたその行の情報がそれぞれのTEditへ反映させる方法を、恐縮ですが、教えていただけないでしょうか?
流れとしては、まず検索画面で検索して、その内容をDBGridに表示、その中のIDセルをクリックすると、その内容がフォーム上のTEditのID,名前、住所等のスペースに反映。
edID := DBGrid1.SelectedRows.field[0];のように書くのではないかと考えているのですが、いまちにわかりません。
書き方の詳細に教えていただけると、幸いです。
例えば、こんなこと?。
procedure TForm_TmSelect.DBGrid_Select;
var
i : integer;
begin
for i := 0 to DBGrid1.FieldCount - 1 do
case i of
0 : wk_code := DBGrid1.Fields[i].AsString;
1 : wk_mei := DBGrid1.Fields[i].AsString;
2 : wk_kana := DBGrid1.Fields[i].AsString;
end;
end;
迅速な返答ありがとうございます。
書いていただいた内容に関して、何点かお伺いしたいのですが、
TForm_TmSelect.DBGrid_SelectはDBGridのプロパティの中にあるonclickと同じようなコマンドですか?
field[0]の場合は一番左の項目の値、field[1]の場合は左から2番目を指しているのでしょうか?
この作業に対して、for文を使わないといけないでしょうか?
お手数ですが、よろしくお願い致します。
初心者の方のDBGrid1.Fields[i].AsString;は、DBGrid1のi番目の項目を表します。
ただ、TDBEditを使ってみたらどうでしょうか?
> TForm_TmSelect.DBGrid_SelectはDBGridのプロパティの中にあるonclickと同じようなコマンドですか?
onDbclick かな。
procedure TForm1.DBGrid1DblClick(Sender: TObject);
begin
.......
end;
>field[0]の場合は一番左の項目の値、field[1]の場合は左から2番目を指しているのでしょうか?
HOta氏のレスの通りです。
>この作業に対して、for文を使わないといけないでしょうか?
いいえ、特に必要は有りません。
[i]を明示的に指定されても良いと思います。...あくまでも一例です。
HOta氏の、「ただ、TDBEditを使ってみたらどうでしょうか?」が
簡単ではないでしょうか?。
> onDbclick かな。
ご免なさい。
OnCellClickでもいけるかな。
最初は、私もTDBEditをしようと思ったのですが、これを使うと直接データベース上のテーブルを操作しているようなイメージがあるのですが、クエリの項目をTDBEditで取得し、TEditと同じようなwith query do ..selectといった構文でupdate等を行うことができるのでしょうか?
また、DBGridで表記された1つの行のIDをクリックしたときに、そのIDが持つ情報(ここでは名前とする)をTEditへ反映させるときは、以下のような書き方でよろしいでしょうか?
TForm_TmSelect.DBGrid_Select;(←これは、自分で作成するんですか?
それとも、onclickのイベントプロシージャーのときのように、そのような項目があって、ダブルクリックすると自動で作成されるのですか?oncellclickを選んだときとは、表記の仕方が違ったのでお伺いしました)
begin
Mainform.edit_NAME := DBGrid1.Fields[1].AsString;
end;
> TForm_TmSelect.DBGrid_Select;(←これは、自分で作成するんですか?
多分これは、自前の関数だと思います。
例...
procedure TForm2.DBGrid1CellClick(Column: TColumn);
begin
Edit1.Text := DBGrid1.Fields[0].AsString;
Edit2.Text := DBGrid1.Fields[1].AsString;
Edit3.Text := DBGrid1.Fields[2].AsString;
end;
procedure TForm2.DBGrid1DblClick(Sender: TObject);
begin
Edit1.Text := DBGrid1.Fields[0].AsString;
Edit2.Text := DBGrid1.Fields[1].AsString;
Edit3.Text := DBGrid1.Fields[2].AsString;
end;
DbGridのセルは、列・行とも'0'から始まります。
OnDblClickには、それなりの深い意味が有るような!!。
Nullさん、詳しく教えていただき、どうもありがとうございました。
また、HOtaさん・初心者さん、ご協力していただき、ありがとうございました。
ツイート | ![]() |