elistraus,
Cita:
Empezado por elistraus
...como lograr juntar un Select de 4 bases de datos MySQL distintas, en distintos Host, en un Dbgrid...
|
Revisa este código:
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DB, DBGrids, Provider, DBClient, StdCtrls,
ZAbstractRODataset, ZAbstractDataset, ZDataset, ZAbstractConnection, ZConnection;
type
TForm1 = class(TForm)
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Button1: TButton;
ZConnection1: TZConnection;
ZQuery1: TZQuery;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
ADatabases : Array[0..2] of String = ('DB1.DB', 'DB2.DB', 'DB3.DB');
ATables : Array[0..2] of String = ('User1', 'User2', 'User3');
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
Table : TClientDataset;
i : Integer;
begin
Table := TClientDataset.Create(Application);
Table.FieldDefs.Add('CodUser', ftInteger, 0, False);
Table.FieldDefs.Add('NameUser', ftString, 50, False);
Table.FieldDefs.Add('Date', ftDate, 0, False);
Table.FieldDefs.Add('Status', ftBoolean, 0, False);
Table.CreateDataset;
Table.Open;
for i := 0 to 2 do
begin
ZConnection1.Database := ExtractFilePath(Application.ExeName) + ADatabases[i];
ZConnection1.Protocol := 'sqlite-3';
ZConnection1.Connect;
ZQuery1.Connection := ZConnection1;
with ZQuery1 do
begin
Close;
Sql.Clear;
Sql.Text := 'Select * from ' + QuotedStr(ATables[i]);
Open;
while not eof do
begin
Table.Append;
Table.FieldByName('CodUser').AsInteger := ZQuery1.FieldByName('CodUser').Value;
Table.FieldByName('NameUser').AsString := ZQuery1.FieldByName('NameUser').Value;
Table.FieldByName('Date').AsDateTime := ZQuery1.FieldByName('Date').Value;
Table.FieldByName('Status').AsBoolean := ZQuery1.FieldByName('Status').Value;
Table.Post;
Next;
end;
end;
ZConnection1.Disconnect;
end;
DataSource1.DataSet := Table;
DBGrid1.DataSource := DataSource1;
for i := 0 to Table.Fields.Count - 1 do
DBGrid1.Columns.Items[i].Width := Table.Fields[i].DisplayWidth + 100;
end;
end.
El código anterior en Delphi 7 bajo Windows 7 Professional x32,
permite cargar en un TDBGrid por medio de un TClientDataset la información de tres Tablas contenidas cada una en tres Bases de Datos SQLite diferentes, usando los componentes de acceso de datos ZEOSLib, como se muestra en la siguiente imagen:
Nota: Para el ejemplo se utilizo
SQLite como Motor de BD, en tu caso particular debes sustituir
la propiedad Protocol de TZConnection por la adecuada a tu versión de MySQL.
Revisa este información
Espero sea útil
Nelson.