Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > Conexión con bases de datos
Register FAQ Members List Calendar Guía de estilo Search Today's Posts Mark Forums Read

Conexión con bases de datos

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 18/06/2015
fjcg02's Avatar
[fjcg02] fjcg02 is offline
Miembro Premium
 
Join Date: Dec 2003
Location: Zamudio
Posts: 1,419
Poder: 24
fjcg02 Va camino a la fama
Creación de campos en runtime TClientdataset

Hola a todos,
estoy enfrascado en un problemilla y me gustaría saber qué opinais.

Tengo un TClientDataset al que le creo en runtime los campos que necesito. Hasta ahí bien, los creo, doy las altas de registros necesarios, preparo la información, y me funciona perfectamente. Como el Tclientdataset va a su bola, es decir, no extrae los datos de ninguna bbdd, ejecuto CDS.CreateDataset una vez creados los campos.

Sin embargo, cuando lanzo el proceso por segunda vez, cambiando los campos, me da un error. Concretamente cuand ejecuto CDS.CreateDataset. Previamente, he borrado los campos que había creado anteriormente.

También he intentado ejecutar el CreateDataset sólo la primera vez, pero también me da el error.

Sabría alguien decirme qué demonios se me está escapando ?

Gracias y un saludo

Así borro los campos:
Código Delphi [-]
for n:= CDSResultado.Fields.Count-1 downto 0 do
  CdSResultado.Fields[0].Free;
Así creo los campos:
Código Delphi [-]
function crearColumna(CDS:TClientDataset; Campo: string ):boolean;
var F: TStringField; NombreCampo:string;
begin
  F:= TStringField.Create(CDS);
  F.FieldName:= Campo;
  NombreCampo:= AnsiReplaceStr( Campo,' ', '_');
  NombreCampo:= trim(AnsiReplaceStr( NombreCampo,'-', '_'));
  F.Name:= CDS.Name+ NombreCampo;
  F.DataSet:= CDS;
  F.Size := 100;
  F.DisplayLabel:= Campo;
  F.DisplayWidth:= 10;

end;
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Reply With Quote
  #2  
Old 18/06/2015
Casimiro Noteví's Avatar
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Join Date: Sep 2004
Location: En algún lugar.
Posts: 32,702
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Olvido de novato: ¿qué error?
Reply With Quote
  #3  
Old 18/06/2015
fjcg02's Avatar
[fjcg02] fjcg02 is offline
Miembro Premium
 
Join Date: Dec 2003
Location: Zamudio
Posts: 1,419
Poder: 24
fjcg02 Va camino a la fama
Error:

CDS Field 'XX' not found


Obviamente, no debe existir, lo he borrado para volver a crear los campos.


Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Reply With Quote
  #4  
Old 18/06/2015
TOPX's Avatar
TOPX TOPX is offline
Miembro
 
Join Date: May 2008
Location: Bogotá
Posts: 527
Poder: 19
TOPX Va camino a la fama
Hola,

Eso tiene que ver con la propiedad FieldDefs del TClientDataSet.

Más info en ~
¿Y si utiliza un nuevo ClientDataSet para la nueva estructura? En fin, son gustos.
-
__________________
"constructive mind, destructive thoughts"
Reply With Quote
  #5  
Old 18/06/2015
Neftali [Germán.Estévez]'s Avatar
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Join Date: Jul 2004
Location: Barcelona - España
Posts: 19,478
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿No será algún otro componente que tienes "enganchado" a ese ClientDataset, quien está buscando el campo?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Reply With Quote
  #6  
Old 18/06/2015
Caminante's Avatar
Caminante Caminante is offline
Miembro
 
Join Date: Oct 2010
Location: Lima - Peru
Posts: 338
Poder: 16
Caminante Va camino a la fama
Hola

creo que deberia ser

Código Delphi [-]
Clientdataset1.FieldDefs.clear;
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Reply With Quote
  #7  
Old 18/06/2015
Al González's Avatar
[Al González] Al González is offline
In .pas since 1991
 
Join Date: May 2003
Posts: 5,619
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Hola Javier.

Recuerda que puedes presionar Ctrl+C ("copiar") cuando te aparezca un mensaje de error. Así es fácil que nos muestres (Ctrl+V) el mensaje de error íntegro.

Saludos.
__________________
Tras casi seis años de trabajar para una empresa alemana como desarrollador Delphi, se vieron forzados a dejarme ir (temas presupuestales). Así que ahora estoy abierto a escuchar nuevas ofertas.
Reply With Quote
  #8  
Old 18/06/2015
nlsgarcia's Avatar
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Join Date: Feb 2007
Location: Caracas, Venezuela
Posts: 2,206
Poder: 23
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
fjcg02,

Quote:
Originally Posted by fjcg02
...TClientDataset al que le creo en runtime los campos que necesito...me funciona perfectamente...cuando lanzo el proceso por segunda vez, cambiando los campos, me da un error...


Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DBClient, DB, Grids, DBGrids;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    DBGrid1: TDBGrid;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1 : TForm1;
  Table : TClientDataset;
  DS : TDataSource;

implementation

{$R *.dfm}

// Crea campos del CDS
function CreateField(CDS : TClientDataset; FieldName : String) : Boolean;
var
   F : TStringField;

begin

   F := TStringField.Create(CDS);
   F.FieldName := FieldName;
   F.Name := FieldName;
   F.DataSet := CDS;
   F.Size := 100;
   F.DisplayLabel := 'N-' + FieldName;
   F.DisplayWidth := 10;

end;

// Crea el CDS
procedure TForm1.Button1Click(Sender: TObject);
begin
   if not Assigned(Table) then
      Table := TClientDataset.Create(nil);
end;

// Asigna campos al CDS
procedure TForm1.Button2Click(Sender: TObject);
begin
   if Assigned(Table) and (Table.State <> dsBrowse) then
   begin
      CreateField(Table,'C1');
      CreateField(Table,'C2');
      CreateField(Table,'C3');
      CreateField(Table,'C4');
      Table.CreateDataset;
   end;
end;

// Llena los campos del CDS
procedure TForm1.Button3Click(Sender: TObject);
var
   i : Integer;
begin
   if Assigned(Table) and (Table.FieldCount <> 0) then
   begin
     Randomize;
     Table.Open;
     Table.Append;
     for i := 0 to Table.FieldCount - 1 do
        Table.Fields[i].Value := 'Data-' + IntToStr(Random(1000));
     Table.Post;
   end;
end;

// Visualiza el CDS
procedure TForm1.Button4Click(Sender: TObject);
var
   i : Integer;
begin
   if Assigned(Table) then
   begin
      DS := TDataSource.Create(nil);
      DS.DataSet := Table;
      DBGrid1.DataSource := DS;
      for i := 0 to Table.FieldCount - 1 do
         DBGrid1.Columns[i].Width := 100;
   end;
end;

// Libera el CDS
procedure TForm1.Button5Click(Sender: TObject);
var
   i : Integer;

begin

   if Assigned(Table) and (Table.FieldCount <> 0) then
   begin
      DS.DataSet := nil;
      DBGrid1.DataSource := nil;
      for i := Table.Fields.Count - 1 to 0 do
         Table.Fields[i].Free;
      Table.Free;
      Table := nil;
   end;

   if Assigned(Table) then 
   begin
      Table.Free;
      Table := nil;
   end;

end;

// Libera recursos de Form1
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   Action := caFree;
end;

end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, Permite crear y eliminar un TClientDataset de forma dinámica como se muestra en la siguiente imagen:



Espero sea útil

Nelson.

Last edited by nlsgarcia : 18/06/2015 at 17:43.
Reply With Quote
  #9  
Old 18/06/2015
fjcg02's Avatar
[fjcg02] fjcg02 is offline
Miembro Premium
 
Join Date: Dec 2003
Location: Zamudio
Posts: 1,419
Poder: 24
fjcg02 Va camino a la fama
Hola amigos, gracias a todos por las respuestas.

Revisando un poco todo lo que habéis puesto, os apunto lo siguiente:

- El problema ocurre cuando cambio los campos que quiero visualizar. Si los campos son los mismos, no hay problema, se ejecuta perfectamente. Por lo tanto, el ejemplo de nlsgarcia, que es una pasada, en el que los campos son siempre los mismos, no reproduce mi problema.
- La solución que me propone Neftali, también la había probado, desactivando el dataset y el dbgrid del TClientDataset.
- Al, el mensaje que me da es el que he puesto, ni más, ni menos.

Finalmente, la sentencia mágica que ha hecho que funcione todo bien, es la que ha apuntado Caminante, demostrando que no hay camino, se hace camino al andar .

Código Delphi [-]
CDS.FieldDefs.Clear;


Por lo tanto , queda resuelto mi problema, ya sólo me queda poner edulcorantes al formulario para tener toda la artillería montada.


Lo dicho, muchas gracias a todos de nuevo y un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Reply With Quote
  #10  
Old 18/06/2015
ecfisa's Avatar
ecfisa ecfisa is offline
Moderador
 
Join Date: Dec 2005
Location: Tres Arroyos, Argentina
Posts: 10,508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola fjcg02.

Fijate si este ejemplo se parece a lo que estas buscando,
Código Delphi [-]
// Crear columna
procedure CrearColumna(ClientDataSet: TClientDataSet; const FieldName: string;
  const FieldType: TFieldType; const FieldSize: Integer = 0);
begin
  with ClientDataSet do
  begin
    with FieldDefs.AddFieldDef do
    begin
      DataType := FieldType;
      Name     := FieldName;
      //...
      if FieldSize > 0 then Size := FieldSize;
    end;
  end;
end;

// Crear unas columnas y cargar (1)
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  with ClientDataSet1 do
  begin
    Close;
    FieldDefs.Clear;
    CrearColumna(ClientDataSet1, 'Integer', ftInteger);
    CrearColumna(ClientDataSet1, 'String', ftString, 30);
    CrearColumna(ClientDataSet1, 'Float', ftFloat);
    CreateDataSet;
    Open;
    for i:= 1 to 1000 do
    begin
      Append;
      FieldByName('Integer').AsInteger := i;
      FieldByName('String').AsString   := 'Valor '+IntToStr(i);
      FieldByName('Float').AsFloat     := PI * i;
      Post;
    end;
    First;
  end;
end;

// Crear unas columnas y cargar (2)
procedure TForm1.Button2Click(Sender: TObject);
var
  i: Integer;
begin
  with ClientDataSet1 do
  begin
    Close;
    FieldDefs.Clear;
    CrearColumna(ClientDataSet1, 'String', ftString, 15);
    CrearColumna(ClientDataSet1, 'DateTime', ftDateTime);
    CrearColumna(ClientDataSet1, 'Currency', ftCurrency);
    CreateDataSet;
    Open;
    for i:= 1 to 1000 do
    begin
      Append;
      FieldByName('String').AsString     := 'Valor '+IntToStr(i);
      FieldByName('DateTime').AsDateTime := Now();
      FieldByName('Currency').AsFloat    := PI * i;
      Post;
    end;
    First;
  end;
end;

Saludos

Edito: Perdón fjcg02, no ví tu último mensaje mientras tenía este abierto.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Last edited by ecfisa : 18/06/2015 at 19:04.
Reply With Quote
  #11  
Old 18/06/2015
fjcg02's Avatar
[fjcg02] fjcg02 is offline
Miembro Premium
 
Join Date: Dec 2003
Location: Zamudio
Posts: 1,419
Poder: 24
fjcg02 Va camino a la fama
No importa Daniel, faltaría más, muchas gracias.

La verdad es que da gusto leer el código vuestro, no sé porqué siempre me parece mejor que el mío

También los links que ha propuesto TOPX me han sido bastante útiles, aunque volveré a echarles otro vistazo.

Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Reply With Quote
  #12  
Old 18/06/2015
nlsgarcia's Avatar
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Join Date: Feb 2007
Location: Caracas, Venezuela
Posts: 2,206
Poder: 23
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
fjcg02,

Quote:
Originally Posted by fjcg02
...la sentencia mágica que ha hecho que funcione todo bien, es la que ha apuntado Caminante (CDS.FieldDefs.Clear)...


Quote:
Originally Posted by fjcg02
...El problema ocurre cuando cambio los campos que quiero visualizar...Si los campos son los mismos, no hay problema...el ejemplo de nlsgarcia...en el que los campos son siempre los mismos, no reproduce mi problema...


Revisa este código (Solo para complementar):
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DBClient, DB, Grids, DBGrids, Math;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    DBGrid1: TDBGrid;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Table : TClientDataset;
  DS : TDataSource;
  B : Boolean;

implementation

{$R *.dfm}

// Crea campos del CDS
function CreateField(CDS : TClientDataset; FieldName : String) : Boolean;
var
   F : TStringField;

begin

   F := TStringField.Create(CDS);
   F.FieldName := FieldName;
   F.Name := FieldName;
   F.DataSet := CDS;
   F.Size := 100;
   F.DisplayLabel := 'N-' + FieldName;
   F.DisplayWidth := 10;

end;

// Crea el CDS
procedure TForm1.Button1Click(Sender: TObject);
begin
   if not Assigned(Table) then
      Table := TClientDataset.Create(nil);
end;

// Asigna campos aleatorios al CDS
procedure TForm1.Button2Click(Sender: TObject);
begin

   Randomize;

   B := Not B;

   if Assigned(Table) and (Table.State <> dsBrowse) and B then
   begin
      CreateField(Table,'C' + IntToStr(RandomRange(10,19) + 1));
      CreateField(Table,'C' + IntToStr(RandomRange(20,29) + 1));
      CreateField(Table,'C' + IntToStr(RandomRange(30,39) + 1));
      CreateField(Table,'C' + IntToStr(RandomRange(40,49) + 1));
      Table.CreateDataset;
   end;

   if Assigned(Table) and (Table.State <> dsBrowse) and not B then
   begin
      CreateField(Table,'C' + IntToStr(RandomRange(50,59) + 1));
      CreateField(Table,'C' + IntToStr(RandomRange(60,69) + 1));
      CreateField(Table,'C' + IntToStr(RandomRange(70,79) + 1));
      CreateField(Table,'C' + IntToStr(RandomRange(80,89) + 1));
      Table.CreateDataset;
   end;

end;

// Llena los campos del CDS
procedure TForm1.Button3Click(Sender: TObject);
var
   i : Integer;
begin
   if Assigned(Table) and (Table.FieldCount <> 0) then
   begin
     Randomize;
     Table.Open;
     Table.Append;
     for i := 0 to Table.FieldCount - 1 do
        Table.Fields[i].Value := 'Data-' + IntToStr(Random(1000));
     Table.Post;
   end;
end;

// Visualiza CDS
procedure TForm1.Button4Click(Sender: TObject);
var
   i : Integer;
begin
   if Assigned(Table) then
   begin
      DS := TDataSource.Create(nil);
      DS.DataSet := Table;
      DBGrid1.DataSource := DS;
      for i := 0 to Table.FieldCount - 1 do
         DBGrid1.Columns[i].Width := 100;
   end;
end;

// Libera CDS
procedure TForm1.Button5Click(Sender: TObject);
var
   i : Integer;

begin

   if Assigned(Table) and (Table.FieldCount <> 0) then
   begin
      DS.DataSet := nil;
      DBGrid1.DataSource := nil;
      for i := Table.Fields.Count - 1 to 0 do
         Table.Fields[i].Free;
      Table.Free;
      Table := nil;
   end;

   if Assigned(Table) then 
   begin
      Table.Free;
      Table := nil;
   end;

end;

// Libera recursos de Form1
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   Action := caFree;
end;

end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, Permite crear y eliminar un TClientDataset con campos aleatorios de forma dinámica como se muestra en la siguiente imagen:



Nota: El ejemplo mostrado es básicamente similar al indicado en el Msg #8, la diferencia radica en que los campos creados son aleatorios.

Espero sea útil

Nelson.
Reply With Quote
  #13  
Old 18/06/2015
fjcg02's Avatar
[fjcg02] fjcg02 is offline
Miembro Premium
 
Join Date: Dec 2003
Location: Zamudio
Posts: 1,419
Poder: 24
fjcg02 Va camino a la fama
Gracias de nuevo, nlsgarcia.

Buen código, la diferencia que hay con el mío es que yo el TClientDataSet lo tengo ya creado en el formulario, y tú lo creas cada vez que pulsas el botón.

Puede ser una buena alternativa, ya que también me puede valer perfectamente. Lo voy a valorar.

Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Reply With Quote
  #14  
Old 18/06/2015
ecfisa's Avatar
ecfisa ecfisa is offline
Moderador
 
Join Date: Dec 2005
Location: Tres Arroyos, Argentina
Posts: 10,508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola fjcg02.

Otra situación que se te puede presentar, es agregar campos luego de haber creado el ClientDataSet. Para hacerlo sin perder los datos que llevas cargados, podes hacer como en este ejemplo:
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
  cds : TClientDataSet;  // (me dan pereza los nombres largos)
  clon: TClientDataSet; // cds auxiliar
  i   : Integer;
begin
  cds  := ClientDataSet1;
  clon := TClientDataSet.Create(nil);
  try
    // Salvar datos anteriores
    clon.CloneCursor(cds, False, True );
    clon.First;
    // Agregar nuevos campos
    cds.Close;
    cds.FieldDefs.Update;
    cds.FieldDefs.Add('Campo3', ftCurrency, 0, False);
    cds.FieldDefs.Add('Campo4', ftFloat, 0, False);
    cds.CreateDataSet;
    cds.Open;
    // Recuperar los datos anteriores
    while not clon.Eof do
    begin
      cds.Append;
      cds.FieldByName('Campo1').AsInteger := clon.FieldByName('Campo1').AsInteger;
      cds.FieldByName('Campo2').AsString  := clon.FieldByName('Campo2').AsString;
      //...
      cds.Post;
      clon.Next;
    end;
    cds.First;
  finally
    clon.Free;
  end;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Reply With Quote
  #15  
Old 18/06/2015
fjcg02's Avatar
[fjcg02] fjcg02 is offline
Miembro Premium
 
Join Date: Dec 2003
Location: Zamudio
Posts: 1,419
Poder: 24
fjcg02 Va camino a la fama
Hola Daniel,
el caso que me planteas no se contempla en los casos de uso, ni creo que se dé.

El truco es bueno, clonar el clientdataset, añadir los campos y copiarlos luego.

Gracias, todas las ideas son buenas.

Finalmente he optado por la opción de destruir el clientdataset y volverlo a crear, pero tras hacerlo, ahora los datos que obtengo no son correctos, aunque como dicen los buenos moderadores:

"otro problema, otro hilo"

Ahora me voy a dormir, a ver si después de descansar encuentro el gazapo que antes no tenía.

Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Reply With Quote
  #16  
Old 18/06/2015
Al González's Avatar
[Al González] Al González is offline
In .pas since 1991
 
Join Date: May 2003
Posts: 5,619
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
¡Joder, qué buenas aportaciones! El Club es grande.
__________________
Tras casi seis años de trabajar para una empresa alemana como desarrollador Delphi, se vieron forzados a dejarme ir (temas presupuestales). Así que ahora estoy abierto a escuchar nuevas ofertas.
Reply With Quote
  #17  
Old 19/06/2015
fjcg02's Avatar
[fjcg02] fjcg02 is offline
Miembro Premium
 
Join Date: Dec 2003
Location: Zamudio
Posts: 1,419
Poder: 24
fjcg02 Va camino a la fama
Quote:
Originally Posted by Al González View Post
¡Joder, qué buenas aportaciones! El Club es grande.
A veces da miedo preguntar, te responden tanto y tan bueno, que luego estás haciendo deberes varios días.

Al final he hecho un mix, el datasource lo creo en diseño, y el el tclientdataset lo genero , libero y vuelvo a generar tantas veces como necesite. Funciona de maravilla.

A mis compañeros les ha gustado lo que he hecho: Sobre una consulta abierta, seleccionas campos para cabeceras de filas, campo para columnas, campo a utilizar, función de agregado ( count, sum, avg, max, min ) y voilá, te hace una pívot table en vivo y en directo que te muestra tan ricamente.

Gracias a todos y un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Reply With Quote
Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Creacion de grupos en Runtime Willo Impresión 1 16/11/2012 20:05
Problema de creación en Runtime hgiacobone OOP 7 16/09/2011 15:19
Creación de TFields en Runtime vinguel Conexión con bases de datos 5 16/11/2010 15:16
Creación de jpg en RunTime sierraja Gráficos 4 06/10/2005 04:26
Creación de Forms en runtime con Tipo dinámico Aprendiz OOP 2 29/09/2004 10:35


All times are GMT +2. The time now is 12:34.


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
Copyright 1996-2007 Club Delphi