ADODataSet1.IndexFieldNamesを書き換えるのが原因?

解決


Ca  2007-07-28 01:15:16  No: 27231

(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)


Ru  2007-07-28 01:25:22  No: 27232

テーブルを開いた直後にIndexFieldNamesの値を元にソートの設定をする思います。
テーブル開く前に
ADODataSet1.IndexFieldNames
の設定を消してみてはどうでしょうか?
たぶん別テーブルには指定したフィールドがない為エラーが出ていると思います。間違っていたらごめんなさい。


Ca  2007-07-28 01:35:56  No: 27233

ADODataSet1.IndexFieldNames='';
で解決しました。
迅速で適切なアドバイスをありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加