Ver Mensaje Individual
  #12  
Antiguo 21-09-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Reputación: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
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
    { Private declarations }
  public
    { Public declarations }
  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}

// Visualiza tres Tablas de tres BD diferentes en un TDbGrid por medio de un TClientDataset
procedure TForm1.Button1Click(Sender: TObject);
var
   Table : TClientDataset;
   i : Integer;

begin

   // Crea un TClientDaset
   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;

   // Conecta, lee y carga la información de las Tablas en cada BD en el TClientDataset
   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;

   // Conecta el TClientDataset al TDataSource
   DataSource1.DataSet := Table;

   // Conecta el TDataSource al TDBGrid
   DBGrid1.DataSource := DataSource1;

   // Formatea el tamaño de las columnas del TDBGrid
   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.

Última edición por nlsgarcia fecha: 24-09-2014 a las 09:53:56.
Responder Con Cita