sql >> Base de Datos >  >> RDS >> Mysql

Muestra la estructura de la base de datos de Delphi (rad studio)

Como ya te explicamos en los comentarios, tu while el bucle debería verse así:

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

(menos los asteriscos, por supuesto). Sin embargo, eso no solucionaría el problema de que su SQL es incorrecto.

Entonces, prueba esto en su lugar:

  1. En un nuevo proyecto de Delphi, coloque TFDConnection, TFDQuery, TDataSource,TDataSource y TListBox en un formulario. Guarde el formulario y el proyecto.

  2. Haga doble clic en FDConnection1 para que aparezca su editor de conexiones y configúrelo para poder conectarlo con éxito a su base de datos.

  3. Conecte DBGrid1 a DataSource1 y Datasource1 a FDQuery1.

  4. Agrega el siguiente código al evento OnCreate del formulario.

  5. Compilar y ejecutar.

  6. Inmediatamente debería ver la causa de su problema. Como le indicó el mensaje de error, no hay ningún campo strDBName en la tabla INFORMATION_SCHEMA.TABLES.

Por lo tanto, debe volver a la ayuda en línea de MySQL, comenzando, p. aquí

https://dev.mysql.com/doc/refman /5.7/es/tablas-tabla.html

y descubra exactamente qué es lo que está buscando, si aún no lo sabe, y cómo obtenerlo desde su proyecto.

Por cierto, si no está seguro de lo que está haciendo, siempre debe probar su SQL primero en la utilidad MySql Workbench.

Código

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

Tengo una base de datos MySql llamada 'MATestDB'. Para obtener una lista de los campos (columnas) en sus tablas, agregaría este código a TForm1.FormCreate:

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

Si desea que FDQuery2 y su cuadrícula rastreen la tabla seleccionada en FDQuery1, puede usar un código como el siguiente para configurar un master-detail relación entre ellos:

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;

Por cierto, no podrá obtener información de esquema para una base de datos de Paradox de la misma manera, pero debería poder buscar en Google cómo averiguar qué información desea recopilar de Paradox.

Por cierto #2:en el Sql que citó en su respuesta eliminada, un problema sería la referencia a DBGrid2.SelectedField.ToString . Si DBGrid2 obtiene sus datos de FDQuery2, es posible que haya querido decir DBGrid**1**.SelectedField.ToString . Si aún tiene problemas con eso, le sugiero que pregunte al respecto en una nueva q, pero asegúrese de incluir todo el código necesario para reproducir el problema.