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

Vis databasestruktur fra Delphi (rad studio)

Som allerede forklaret for dig i kommentarer, din while loop skal se nogenlunde sådan ud:

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

(minus stjernerne, selvfølgelig). Det ville dog ikke løse problemet med, at din SQL er forkert.

Så prøv dette i stedet:

  1. I et nyt Delphi-projekt skal du placere en TFDConnection, TFDQuery, TDataSource, TDataSource og en TListBox på en formular. Gem formularen og projektet.

  2. Dobbeltklik på FDConnection1 for at åbne dens forbindelseseditor og konfigurere den, så du kan forbinde den til din database.

  3. Forbind DBGrid1 til DataSource1 og Datasource1 til FDQuery1.

  4. Tilføj koden nedenfor til formularens OnCreate-begivenhed.

  5. Kompiler og kør.

  6. Du bør straks se årsagen til dit problem. Som fejlmeddelelsen fortalte dig, er der ikke noget strDBName-felt i tabellen INFORMATION_SCHEMA.TABLES.

Så du skal tilbage til MySQL online hjælpen, startende f.eks. her

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

og find ud af præcis, hvad det er, du leder efter, hvis du ikke allerede ved, og hvordan du får det inde fra dit projekt.

Btw, hvis du ikke er sikker på, hvad du laver, bør du altid prøve din SQL først i MySql Workbench-værktøjet.

Kode

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

Jeg har en MySql-database kaldet 'MATestDB'. For at få en liste over felterne (kolonnerne) i dens tabeller, ville jeg tilføje denne kode til TForm1.FormCreate:

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

Hvis du ønsker, at FDQuery2 og dets gitter skal spore den valgte tabel i FDQuery1, kan du bruge kode som følgende til at opsætte en master-detail forholdet mellem dem:

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;

Forresten, du vil ikke kunne få skemainfo til en Paradox-database på samme måde, men du burde kunne google, hvordan du finder ud af, hvilken information du vil indsamle fra Paradox.

Btw #2:I den SQL, du citerede i dit slettede svar, ville et problem være henvisningen til DBGrid2.SelectedField.ToString . Hvis DBGrid2 får sine data fra FDQuery2, så har du måske ment DBGrid**1**.SelectedField.ToString . Hvis du stadig har problemer med det, foreslår jeg, at du spørger om det i en ny q, men sørg for at inkludere al den nødvendige kode for at genskabe problemet.




  1. SQLAlchemy masseopdateringsstrategier

  2. Stream hentet fra Postgres med jOOQ returnerer ikke resultater fra klassen

  3. Sådan sorteres emnerne og derefter sorteres igen efter en anden betingelse ved hjælp af SQL

  4. Hvorfor er SQLAlchemy count() meget langsommere end den rå forespørgsel?