Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wyświetl strukturę bazy danych z Delphi (rad studio)

Jak już wyjaśniono w komentarzach, Twoje while pętla powinna wyglądać mniej więcej tak:

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

(oczywiście bez gwiazdek). Nie rozwiązałoby to jednak problemu, że Twój SQL jest niepoprawny.

Spróbuj więc zamiast tego:

  1. W nowym projekcie Delphi umieść w formularzu TFDConnection, TFDQuery, TDataSource,TDataSource i TListBox. Zapisz formularz i projekt.

  2. Kliknij dwukrotnie FDConnection1, aby wyświetlić jego edytor połączeń i skonfigurować go tak, abyś mógł pomyślnie połączyć go z bazą danych.

  3. Podłącz DBGrid1 do DataSource1 i Datasource1 do FDQuery1.

  4. Dodaj poniższy kod do zdarzenia OnCreate formularza.

  5. Skompiluj i uruchom.

  6. Powinieneś natychmiast zobaczyć przyczynę swojego problemu. Jak powiedział komunikat o błędzie, w tabeli INFORMATION_SCHEMA.TABLES nie ma pola strDBName.

Musisz więc wrócić do pomocy online MySQL, zaczynając m.in. tutaj

https://dev.mysql.com/doc/refman /5.7/pl/tabele-tabela.html

i ustal dokładnie, czego szukasz, jeśli jeszcze tego nie wiesz, i jak uzyskać to z poziomu swojego projektu.

Btw, jeśli nie jesteś pewien, co robisz, zawsze powinieneś najpierw wypróbować swój SQL w narzędziu MySql Workbench.

Kod

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

Mam bazę danych MySql o nazwie 'MATestDB'. Aby uzyskać listę pól (kolumn) w swoich tabelach, dodałbym ten kod do TForm1.FormCreate:

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

Jeśli chcesz, aby FDQuery2 i jego siatka śledziły wybraną tabelę w FDQuery1, możesz użyć kodu podobnego do poniższego, aby skonfigurować master-detail związek między nimi:

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;

Btw, nie będziesz w stanie uzyskać informacji o schemacie dla bazy danych Paradox w ten sam sposób, ale powinieneś być w stanie wyszukać w Google, jakie informacje chcesz zebrać z Paradox.

Btw #2:W Sql, który zacytowałeś w usuniętej odpowiedzi, jednym problemem byłoby odwołanie do DBGrid2.SelectedField.ToString . Jeśli DBGrid2 pobiera swoje dane z FDQuery2, możesz mieć na myśli DBGrid**1**.SelectedField.ToString . Jeśli nadal masz z tym problem, sugeruję, abyś zapytał o to w nowym q, ale upewnij się, że zawierasz cały kod niezbędny do odtworzenia problemu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wielopoziomowa pętla w PHP

  2. Dobry poradnik, jak zaktualizować bazę danych Mysql za pomocą formularza PHP?

  3. Jak korzystać z pakietu zbiorczego MySQL

  4. Usuń zduplikowane wiersze o liczbie większej niż 1 w mysql

  5. schemat bazy danych przyjaźni