Mysql
 sql >> Database >  >> RDS >> Mysql

Visualizza la struttura del database da Delphi (rad studio)

Come già spiegato nei commenti, il tuo while il ciclo dovrebbe assomigliare a questo:

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

(meno gli asterischi, ovviamente). Tuttavia, ciò non risolverebbe il problema che il tuo SQL non è corretto.

Quindi, prova invece questo:

  1. In un nuovo progetto Delphi, inserire un TFDConnection, TFDQuery, TDataSource, TDataSource e un TListBox su un form. Salva il modulo e il progetto.

  2. Fare doppio clic su FDConnection1 per far apparire il suo editor di connessione e configurarlo in modo da poterlo collegare correttamente al database.

  3. Collega DBGrid1 a DataSource1 e Datasource1 a FDQuery1.

  4. Aggiungi il codice seguente all'evento OnCreate del modulo.

  5. Compila ed esegui.

  6. Dovresti vedere immediatamente la causa del tuo problema. Come ti dice il messaggio di errore, non c'è nessun campo strDBName nella tabella INFORMATION_SCHEMA.TABLES.

Quindi è necessario tornare alla guida in linea di MySQL, iniziando ad es. qui

https://dev.mysql.com/doc/refman /5.7/it/tabelle-tabella.html

e scopri esattamente cosa stai cercando, se non lo sai già, e come ottenerlo dall'interno del tuo progetto.

A proposito, se non sei sicuro di quello che stai facendo, dovresti sempre provare prima il tuo SQL nell'utilità MySql Workbench.

Codice

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

Ho un database MySql chiamato 'MATestDB'. Per ottenere un elenco dei campi (colonne) nelle sue tabelle, aggiungerei questo codice a TForm1.FormCreate:

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

Se vuoi che FDQuery2 e la sua griglia tengano traccia della tabella selezionata in FDQuery1, puoi usare un codice come il seguente per impostare un master-detail rapporto tra loro:

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;

A proposito, non sarai in grado di ottenere informazioni sullo schema per un database Paradox allo stesso modo, ma dovresti essere in grado di cercare su Google come scoprire quali informazioni vuoi raccogliere da Paradox.

A proposito n. 2:nell'Sql che hai citato nella risposta eliminata, un problema sarebbe il riferimento a DBGrid2.SelectedField.ToString . Se DBGrid2 ottiene i suoi dati da FDQuery2, potresti aver inteso DBGrid**1**.SelectedField.ToString . Se hai ancora problemi con quello, ti suggerisco di chiederlo in una nuova q, ma assicurati di includere tutto il codice necessario per riprodurre il problema.