Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Exibir estrutura de banco de dados do Delphi (rad studio)


Como já foi explicado a você nos comentários, seu while loop deve ser algo assim:
 while **not** FData.FDQuery1.Eof do **begin**
    ShowMessage(FData.FDQuery1.Fields[0].ToString);
    **FData.FDQuery1.Next;**
 end;

(menos os asteriscos, é claro). No entanto, isso não resolveria o problema de seu SQL estar incorreto.

Então, tente isso em vez disso:

  1. Em um novo projeto Delphi, coloque um TFDConnection, TFDQuery, TDataSource, TDataSource e um TListBox em um formulário. Salve o formulário e o projeto.

  2. Clique duas vezes em FDConnection1 para abrir seu editor de conexão e configurá-lo para que você possa conectá-lo com sucesso ao seu banco de dados.

  3. Conecte DBGrid1 a DataSource1 e Datasource1 a FDQuery1.

  4. Adicione o código abaixo ao evento OnCreate do formulário.

  5. Compile e execute.

  6. Você deve ver imediatamente a causa do seu problema. Como a mensagem de erro lhe disse, não há nenhum campo strDBName na tabela INFORMATION_SCHEMA.TABLES.

Então você precisa voltar para a ajuda online do MySQL, começando, por exemplo, aqui

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

e descobrir exatamente o que você está procurando, se você ainda não sabe, e como obtê-lo de dentro do seu projeto.

Aliás, se você não tem certeza do que está fazendo, você deve sempre tentar seu SQL primeiro no utilitário MySql Workbench.

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

Eu tenho um banco de dados MySql chamado 'MATestDB'. Para obter uma lista dos campos (colunas) em suas tabelas, eu adicionaria este código ao TForm1.FormCreate:
  FDQuery2.SQL.Text := 'select * from information_schema.columns where table_schema = ''MATestDB''';
  FDQuery2.Open;

Se você quiser que FDQuery2 e sua grade rastreiem a tabela selecionada em FDQuery1, você pode usar um código como o seguinte para configurar um master-detail relacionamento entre eles:
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;

Aliás, você não poderá obter informações de esquema para um banco de dados do Paradox da mesma maneira, mas poderá pesquisar no Google como descobrir quais informações deseja coletar do Paradox.

Btw # 2:No Sql que você citou em sua resposta excluída, um problema seria a referência a DBGrid2.SelectedField.ToString . Se DBGrid2 obtém seus dados de FDQuery2, então você pode estar querendo dizer DBGrid**1**.SelectedField.ToString . Se você ainda está tendo problemas com isso, sugiro que pergunte sobre isso em um novo q, mas certifique-se de incluir todo o código necessário para reproduzir o problema.