(1)ListBoxに表示したテーブル名を選択することによって、DBGridにテーブル内容を表示するように、
ADOConnection,ADODataSet,DataSource,DBGridを接続しました。
procedure TForm1.ListBox1Click(Sender: TObject);
var S:string;
begin
S:=ListBox1.Items[ListBox1.ItemIndex]; //tablename
ADODataSet1.Close;
ADODataSet1.CommandText:='select * from '+S;
ADODataSet1.open;
end;
(2)下記procedureでDBGridの固定行をクリックすることによってソートできるようにしました。
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
if ADODataSet1.IndexFieldNames =Column.Field.FieldName then
ADODataSet1.IndexFieldNames:=Column.Field.FieldName+' DESC'
else
ADODataSet1.IndexFieldNames:=Column.Field.FieldName;
end;
プログラムを実行し、ListBoxからテーブル名を選択しソートもできることを確認しました。
しかし、引き続いてListBoxから別のテーブル名を選択しますと、
「要求された名前、または序数に対する項目がコレクションで見つかりません」と怒られます。
ADODataSet1.IndexFieldNamesを書き換えるのが原因のように思われます。
対処法を教えてください。(WinXp,Delphi7,MSDE2000)
テーブルを開いた直後にIndexFieldNamesの値を元にソートの設定をする思います。
テーブル開く前に
ADODataSet1.IndexFieldNames
の設定を消してみてはどうでしょうか?
たぶん別テーブルには指定したフィールドがない為エラーが出ていると思います。間違っていたらごめんなさい。
ADODataSet1.IndexFieldNames='';
で解決しました。
迅速で適切なアドバイスをありがとうございました。
ツイート | ![]() |