Mysql
 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. Трябва незабавно да видите причината за вашия проблем. Както ви каза съобщението за грешка, няма поле strDBName в таблицата INFORMATION_SCHEMA.TABLES.

Така че трябва да се върнете към онлайн помощта за MySQL, като започнете напр. тук

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

и разберете какво точно търсите, ако все още не знаете, и как да го получите от вашия проект.

Между другото, ако не сте сигурни какво правите, винаги първо трябва да опитате вашия SQL в помощната програма MySql Workbench.

Код

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

Имам MySql база данни, наречена „MATestDB“. За да получа списък с полетата (колоните) в неговите таблици, бих добавил този код към 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 по същия начин, но трябва да можете да потърсите в Google как да разберете каква информация искате да съберете от Paradox.

Между другото #2:В Sql, който цитирахте във вашия изтрит отговор, един проблем би бил препратката към DBGrid2.SelectedField.ToString . Ако DBGrid2 получава своите данни от FDQuery2, тогава може да сте имали предвид DBGrid**1**.SelectedField.ToString . Ако все още имате проблем с това, предлагам да попитате за това в ново q, но се уверете, че сте включили целия код, необходим за възпроизвеждане на проблема.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Празното пространство в полето на базата данни не се премахва от trim()

  2. Миграция Външен ключ срещу Eloquent Relationships в Laravel

  3. Преобразувайте Unix timestamp в четлива от човека дата с помощта на MySQL

  4. mysqli_connect Фатална грешка:изисквам()

  5. MySQL изчисляване на седмица между две дати