Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Pasar datos de un Table a un GRID (https://www.clubdelphi.com/foros/showthread.php?t=77296)

Lenny 12-01-2012 16:44:11

Pasar datos de un Table a un GRID
 
Estimados, de antemano espero que tuvieran muy felices fiestas en familia y con amigos, y, nuevamente los molesto...

Tengo una base de datos de correos y usuarios (internos de una empresa, no spam) los cuales podrian ir cambiando segun el ingreso/egreso de personal, cambios de areas, etc... el problema, es que necesito cargar todos los datos a un GRID ¿Por? mi idea es tener 2 grid, en uno la lista completa de usuarios/mails para al hacer doble click en uno de estos se pase al segundo grid y trabajar con la lista de mail's/usuarios previamente cargados, por que no DBGrid? por que esta en linea en varios equipos, y si elijo o hago algun cambio en la lista de correos/usuarios quien ejecute el programa despues vera estos cambios... por lo mismo necesito sea local y cuando quiera nuevamente hacer la seleccion la lista se cargue de nuevo porsi ocurrieron cambios en ese rato... se entiende???

Lo de pasar la info entre Grid's lo tengo claro, solo necesito saber como pasar los datos de la Base de Datos al Grid independiente de los cambios en la base de datos, de antemano muchas gracias...

PD: Utilizo Delpho 2010, MySQL, Zeos...

Neftali [Germán.Estévez] 12-01-2012 17:08:54

Cita:

Empezado por Lenny (Mensaje 422774)
...solo necesito saber como pasar los datos de la Base de Datos al Grid independiente de los cambios en la base de datos, de antemano muchas gracias...

No se si te he entendido bien.

Quieres pasar los datos de una tabla de la Base de Datos a un "Grid independiente". Lo que no tengo claro es lo del grid independiente.
¿Te refieres a un TStringGrid, por ejemplo o a un DBGrid que no esté conectado con esa tabla?
Tampoco tengo claro qué vas a hacer luego con los datos que pases a ese segundo Grid.

Intenta aclarar eso y tal vez podamos ser un poco más concretos.

Para un TStringGrid, debería bastar con un recorido por la tabla tipo:

Código Delphi [-]
i := 0;
table1.First;
while (not (Tabla1.eof)) do begin

  StringGrid1.cell[1,i] : tabla1.FieldByName('codigo').AsString;
  StringGrid1.cell[2,i] : tabla1.FieldByName('Name').AsString;
  ...


  table1.Next;
  i := i + 1;
end;

Para el segundo caso, creo que lo mejor es utilizar un TClientDataSet con la misma estructura del primero, pero como te he dicho, antes de continuar, a ver si puedes aclarar los temas que antes te he comentado..

Lenny 12-01-2012 19:37:25

Muchas gracias estimado, te explico mejor:

Tengo una base de datos, de los cuales existe una lista de usuarios y mails. Estos dependiendo de la necesidad se utilizan, en este caso para informar a los usuarios de X situacion, por lo cual quien envia este mail deve seleccionar de toda la lista a quienes es envia el mail.
Como comentaba antes, podria hacerlo desde un DBGrid, pero segun la idea que tengo no serviria, ya que entorpeseria a otro usuario si quiere enviar mails, que necesito???

2 Grids, uno con todos los mails cargados desde la base de datos, y el otro en blanco, para cuando haga doble click en el primero se borre y cargue en el segundo, con esto al terminar solo saque los mails del grid 2, y al cerrar/abrir borrar ambos grid y vovler a cargar los datos, se entiende??? Todo menos lo de cargar los datos al grid lo tengo mas menos claro, solo falta eso.

Eso estimado, prove tu codigo y quedo asi:

Código Delphi [-]
var
i : Integer;
begin
i := 0;
BDatos.Usuarios_T.First;
while (not (BDatos.Usuarios_T.eof)) do
begin
StringGrid1.Cells [1,i] := BDatos.Usuarios_T.FieldByName('NOMBRE').AsString;
StringGrid1.cells[2,i] := BDatos.Usuarios_T.FieldByName('CORREO').AsString;
BDatos.Usuarios_T.Next;
  i := i + 1;
end;
end;

Funciona de perlas, pero necesito agrege mas lineas en caso de ser mas usuarios, te pasaste, te agradesco nuevamente...

kapcomx 12-01-2012 20:53:07

grid
 
Lenny, tengo un ejemplo que pasa el resultado de una consulta a un stringgrid, espero te sirva

este ejemplo toma los datos de una consulta (queryex2) y los pasa a un string grid.

se me ocurre que al momento de darle doble clic al registro en tu primer grid generes una consulta con la clave de ese registro y posteriormente llenes la segunda grid con los datos que te resulten de esa consulta.


Código Delphi [-]
 
procedure TFORMCAJACHICA.CONSTRUYECREDITOClick(Sender: TObject);

var
  i,x:Integer;  //x para controlar el numero de fila i ciclo for
  r: real;

begin

  // con esto limpia el stringgrid
 
   for I := 1 to StringGrid1.RowCount - 1 do
    StringGrid1.Rows[i].Clear;
 
 
 
    stringgrid1.Rowcount:=(queryex2.recordcount + 5);  //defino el numero de filas del stringgrid en base al numero de registros y le agrego 5 mas 
    stringgrid1.ColCount:=12; //defino las columnas

 with StringGrid1 do
 begin
  // defino el Título de las columnas en base a los de los campos de la consulta
  Cells[0, 0] := '';
  Cells[1, 0] := 'FOLIO';
  Cells[2, 0] := 'FECHA';
  Cells[3, 0] := 'CHOFER';
  Cells[4, 0] := 'GRUA';
  Cells[5, 0] := 'CLIENTE';
  Cells[6, 0] := 'SERVICIO';
  Cells[7, 0] := 'SUBTOTAL';
  Cells[8, 0] := 'I.V.A.';
  Cells[9, 0] := 'RET.';
  Cells[10, 0] := 'TOTAL';
  Cells[11, 0] := 'FACTURA';

  end;
//persoonalizo el ancho de las columnas

   stringgrid1.ColWidths[0]:=25;
   stringgrid1.ColWidths[1]:=70;
   stringgrid1.ColWidths[2]:=80;
   stringgrid1.ColWidths[3]:=70;
   stringgrid1.ColWidths[4]:=60;
   stringgrid1.ColWidths[5]:=280;
   stringgrid1.ColWidths[6]:=105;
   stringgrid1.ColWidths[7]:=70;
   stringgrid1.ColWidths[8]:=70;
   stringgrid1.ColWidths[9]:=70;
   stringgrid1.ColWidths[10]:=70;
   stringgrid1.ColWidths[11]:=70;
 
x:=1;
 
queryEX2.first;
while not (queryEX2.eof) do
begin
 with StringGrid1 do
 begin

  Cells[0, x] := '';
     if   QUERYEX2.fieldvalues['folio']=null then
  Cells[1, x] := ''
  else
  Cells[1, x] :=QUERYEX2.fieldvalues['folio'];
 
  if (QUERYEX2.FieldValues['FECHA'] <> null) then
  begin
 Present:= QUERYEX2.FieldValues['FECHA'];
  DecodeDate(Present, Year, Month, Day);
  case month of
  1: mes := 'Ene';
  2: mes := 'Feb';
  3: mes := 'Mar';
  4: mes := 'Abr';
  5: mes := 'May';
  6: mes := 'Jun';
  7: mes := 'Jul';
  8: mes := 'Ago';
  9: mes := 'Sep';
  10: mes := 'Oct';
  11: mes := 'Nov';
  12: mes := 'Dic';
end;
 
     Cells[2, x] :=  IntToStr(Day) + '-' + mes  + '-' + IntToStr(Year);
  end;
    if   QUERYEX2.fieldvalues['cHOFER']=null then
  Cells[3, x] := ''
  else
  Cells[3, x] :=(QUERYEX2.fieldvalues['CHOFER']);
   if   QUERYEX2.fieldvalues['GRUA']=null then
  Cells[4, x] := ''
  else
  Cells[4, x] :=(QUERYEX2.fieldvalues['GRUA']);
   if   QUERYEX2.fieldvalues['ASEG']=null then
  Cells[5, x] := ''
  else
  Cells[5, x] :=(QUERYEX2.fieldvalues['ASEG']);
   if QUERYEX2.fieldvalues['TIPO2']=null then
  Cells[6, x] := ''
  else
  Cells[6, x] :=(QUERYEX2.fieldvalues['TIPO2']);

  if ((QUERYEX2.fieldvalues[sub]=null) OR (QUERYEX2.fieldvalues[sub]=0))then
  Cells[7, x] := ''
  else
  begin
  r:= queryex2.fieldvalues[sub];
  Cells[7, x] :=Format('%0:2f',[r]);
  end;
   if ((QUERYEX2.fieldvalues['IVA']=null) OR (QUERYEX2.fieldvalues['IVA']=0))then
  Cells[8, x] := ''
  else
  begin
  r:= queryex2.fieldvalues['IVA'];
  Cells[8, x] :=Format('%0:2f',[r]);
  end;
    if ((QUERYEX2.fieldvalues['IMPRET']=null) OR (QUERYEX2.fieldvalues['IMPRET']=0))then
  Cells[9, x] := ''
  else
  begin
  r:= queryex2.fieldvalues['IMPRET'];
  Cells[9, x] :=Format('%0:2f',[r]);
  end;
    if ((QUERYEX2.fieldvalues['IMPNETO']=null) OR (QUERYEX2.fieldvalues['IMPNETO']=0))then
  Cells[10, x] := ''
  else
  begin
  r:= queryex2.fieldvalues['IMPNETO'];
  Cells[10, x] :=Format('%0:2f',[r]);
  end;

  if QUERYEX2.fieldvalues['fac']=null then
  Cells[11, x] := ''
  else
  Cells[11, x] :=(QUERYEX2.fieldvalues['fac']);

      Inc(x);
  end;
  queryEX2.Next;
end;
  StringGrid1.Row:=X;
 

end;

este ejemplo lo tengo en delphi 7. componentes zeos Mysql 5.0
cualquier cosa que no entiendas me avisas. :cool:

Neftali [Germán.Estévez] 13-01-2012 13:11:27

Cita:

Empezado por Lenny (Mensaje 422794)
Eso estimado, prove tu codigo y quedo asi:

Código Delphi [-]
var
  i : Integer;
begin
  i := 0;
  BDatos.Usuarios_T.First;
  while (not (BDatos.Usuarios_T.eof)) do begin
    StringGrid1.Cells [1,i] := BDatos.Usuarios_T.FieldByName('NOMBRE').AsString;
    StringGrid1.cells[2,i] := BDatos.Usuarios_T.FieldByName('CORREO').AsString;
    BDatos.Usuarios_T.Next;
    i := i + 1;
  end;
end;

Funciona de perlas, pero necesito agrege mas lineas en caso de ser mas usuarios, te pasaste, te agradesco nuevamente...

Esto último no lo entiendo....
Con este código rellenas tantas líneas del StringGrid como registros en la tabla.
Lo que no entiendo es qué quieres decir con "...necesito agrege mas lineas en caso de ser mas usuarios". Esto no me ha quedado claro.


La franja horaria es GMT +2. Ahora son las 16:15:09.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi