sql >> データベース >  >> RDS >> Mysql

Delphi(rad studio)のデータベース構造を表示する

    コメントですでに説明したように、while ループは次のようになります:

     while **not** FData.FDQuery1.Eof do **begin**
        ShowMessage(FData.FDQuery1.Fields[0].ToString);
        **FData.FDQuery1.Next;**
     end;
    

    (もちろん、アスタリスクを差し引いてください)。ただし、SQLが正しくないという問題を解決することはできません。

    したがって、代わりにこれを試してください:

    1. 新しいDelphiプロジェクトで、TFDConnection、TFDQuery、TDataSource、TDataSource、およびTListBoxをフォームに配置します。フォームとプロジェクトを保存します。

    2. FDConnection1をダブルクリックして接続エディターをポップアップし、データベースに正常に接続できるように構成します。

    3. DBGrid1をDataSource1に接続し、Datasource1をFDQuery1に接続します。

    4. 以下のコードをフォームのOnCreateイベントに追加します。

    5. コンパイルして実行します。

    6. 問題の原因がすぐにわかるはずです。エラーメッセージに示されているように、INFORMATION_SCHEMA.TABLESテーブルにstrDBNameフィールドはありません。

    したがって、MySQLオンラインヘルプに戻る必要があります。ここ

    https://dev.mysql.com/doc/refman /5.7/en/tables-table.html

    探しているものが何であるか、まだわからない場合は、プロジェクト内から取得する方法を正確に把握してください。

    ところで、何をしているのかわからない場合は、常にMySqlWorkbenchユーティリティでSQLを最初に試す必要があります。

    コード

      FDQuery1.SQL.Text := 'SELECT * FROM INFORMATION_SCHEMA.TABLES';
      FDQuery1.Open;
      FDQuery1.GetFieldNames(ListBox1.Items);
    

    'MATestDB'というMySqlデータベースがあります。テーブル内のフィールド(列)のリストを取得するには、このコードをTForm1.FormCreateに追加します:

      FDQuery2.SQL.Text := 'select * from information_schema.columns where table_schema = ''MATestDB''';
      FDQuery2.Open;
    

    FDQuery2とそのグリッドでFDQuery1で選択したテーブルを追跡する場合は、次のようなコードを使用してmaster-detailを設定できます。 それらの間の関係:

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      FDQuery1.SQL.Text := 'SELECT * FROM INFORMATION_SCHEMA.TABLES';
    
      FDQuery2.SQL.Text := 'select table_schema, table_name, column_name, data_type, character_maximum_length, ordinal_position from information_schema.columns where table_schema = :Table_Schema and table_name = :Table_Name';
      FDQuery2.IndexFieldNames := 'table_schema;table_name;ordinal_position';
      FDQuery2.MasterFields := 'table_schema;table_name';
      FDQuery2.MasterSource := DataSource1;
    
      FDQuery1.Open;
      FDQuery1.GetFieldNames(ListBox1.Items);
    
      FDQuery2.Open;
      FDQuery2.GetFieldNames(ListBox2.Items);
    
    end;
    

    ところで、Paradoxデータベースのスキーマ情報を同じ方法で取得することはできませんが、Paradoxから収集する情報を見つける方法をグーグルで検索できるはずです。

    ところで#2:削除された回答で引用したSQLでは、1つの問題はDBGrid2.SelectedField.ToStringへの参照です。 。 DBGrid2がFDQuery2からデータを取得する場合は、DBGrid**1**.SelectedField.ToStringを意味している可能性があります。 。それでも問題が解決しない場合は、新しいqで質問することをお勧めしますが、問題を再現するために必要なすべてのコードを含めるようにしてください。




    1. あるテーブルから別のテーブルへの行の移動(値リストの挿入が列リストと一致しません)

    2. MySQLのトリガーでプリペアドステートメントを使用する代わりに

    3. IN句の要素によるSQLの順序

    4. 自動インクリメントされた行のMySQLREPLACE