sql >> Database >  >> RDS >> Mysql

Geef de databasestructuur weer van Delphi (rad studio)

Zoals al aan u uitgelegd in opmerkingen, uw while loop zou er ongeveer zo uit moeten zien:

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

(minus de sterretjes natuurlijk). Dat zou echter niet het probleem oplossen dat uw SQL onjuist is.

Dus, probeer dit in plaats daarvan:

  1. Plaats in een nieuw Delphi-project een TFDConnection, TFDQuery, TDataSource,TDataSource en een TListBox op een formulier. Sla het formulier en het project op.

  2. Dubbelklik op FDConnection1 om de verbindingseditor te openen en configureer het zodat u het met succes kunt verbinden met uw database.

  3. Verbind DBGrid1 met DataSource1 en Datasource1 met FDQuery1.

  4. Voeg de onderstaande code toe aan het OnCreate-evenement van het formulier.

  5. Compileren en uitvoeren.

  6. U zou onmiddellijk de oorzaak van uw probleem moeten zien. Zoals de foutmelding u vertelde, is er geen strDBName-veld in de INFORMATION_SCHEMA.TABLES-tabel.

U moet dus teruggaan naar de MySQL-online-help, b.v. hier

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

en zoek uit waar u precies naar op zoek bent, als u dat nog niet weet, en hoe u dit binnen uw project kunt krijgen.

Trouwens, als je niet zeker weet wat je doet, moet je altijd eerst je SQL proberen in het hulpprogramma MySql Workbench.

Code

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

Ik heb een MySql-database genaamd 'MATestDB'. Om een ​​lijst van de velden (kolommen) in de tabellen te krijgen, zou ik deze code toevoegen aan TForm1.FormCreate:

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

Als u wilt dat FDQuery2 en het bijbehorende raster de geselecteerde tabel in FDQuery1 volgen, kunt u code zoals de volgende gebruiken om een ​​master-detail in te stellen relatie tussen hen:

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;

Trouwens, je zult schema-informatie voor een Paradox-database niet op dezelfde manier kunnen krijgen, maar je zou moeten kunnen googlen hoe je erachter kunt komen welke informatie je uit Paradox wilt halen.

Tussen haakjes #2:in de SQL die u in uw verwijderde antwoord hebt geciteerd, zou een probleem de verwijzing naar DBGrid2.SelectedField.ToString zijn . Als DBGrid2 zijn gegevens uit FDQuery2 haalt, dan bedoelde je misschien DBGrid**1**.SelectedField.ToString . Als je daar nog steeds problemen mee hebt, raad ik je aan ernaar te vragen in een nieuwe q, maar zorg ervoor dat je alle code opneemt die nodig is om het probleem te reproduceren.




  1. Hoe kan ik gegevens uit ASCII (ISO/IEC 8859-1) importeren in mijn Rails/PGSQL-database?

  2. Welk PostgreSQL-kolomtype moet worden gebruikt om een ​​Java BigDecimal op te slaan?

  3. Twee perioden binnen dezelfde tabel vergelijken

  4. Hoe een UITLEG ANALYSE te begrijpen?