Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-01-2008
Avatar de hamiltonfvi
hamiltonfvi hamiltonfvi is offline
Miembro
 
Registrado: ene 2008
Posts: 12
Poder: 0
hamiltonfvi Va por buen camino
Unhappy Uso del maskedit

Alguien puede decirme porque los maskedit modificados no me guardan los datos en la base de datos de SQL 2000 server. Tengo varios maskedit con el formato de la cedula de mi pais, es decir, 000-0000000-0, pero cuando guardo los cambios en el cliente me lo guarda todo menos los datos introducidos en dichos maskedit. Alguien me dijo q utilizará 3 edit normales y que los concatene con guiones, de esta forma funciona, pero siento q no es la correcta. Agradeceria toda la ayuda posible por que es para mi proyecto de monografico y solo falta unos dias para la entrega.
Responder Con Cita
  #2  
Antiguo 02-01-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Bienvenido al club.
Lo que creo es que el tipo de campo no debe ser el adecuado.
Que tipo de campo usas?.
Para mi debería de ser texto, por el tipo de formato.
Saludos
Responder Con Cita
  #3  
Antiguo 02-01-2008
Avatar de hamiltonfvi
hamiltonfvi hamiltonfvi is offline
Miembro
 
Registrado: ene 2008
Posts: 12
Poder: 0
hamiltonfvi Va por buen camino
no existen dbmaskedit

Gracias por la bienvenida y gracias por la ayuda. Disculpa la pregunta, esta mal formulada, ya hable con mi compañera de monografico y me aclaro que el problema se debe a que no existe un maskedit para trabajar con base de datos, es decir, no existe otro maskedit aparte del que hay en la paleta de componentes Additional, o por lo menos ninguno en nuestros conocimientos. Este maskedit no nos permite conectarlo a la base de datos porque no tiene ninguna opcion para hacerlo. Disculpen tantas preguntas sencillas, tenemos poco tiempo programando en delphi y tenemos q terminar nuestro proyecto del monografico ya. Si alguien tiene una idea de como realizar una bitacora le estaria eternamente agradecido si me llegase a pasar esa informacion.
Responder Con Cita
  #4  
Antiguo 02-01-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No entiendo esto de que el maskedit no se puede conectar a la base de datos, quien dice que no se puede extraer la informacion en un maskedit?.
Perdona pero me he quedado con la duda.
Por que asi:
Código Delphi [-]
MaskEdit1.Text:= Table1.field[0].value.
Es una de las muchas maneras de que en un maskedit pueda ver el dato de la base de datos.
Por supuesto como indique antes, depende del dato que contenga el campo, simplemente se cambia el concepto, pero de que se puede se puede.
Eso y mas, es delphi, no Visual Basic.
Saludos
Responder Con Cita
  #5  
Antiguo 02-01-2008
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
El componente DBEdit de la paleta Data Controls, es derivado de un MaskEdit. Lo que sucede es que este componente toma la máscara que hayas colocado en el campo de la base de datos, no se la puedes asignar directamente. Entonces, lo que debes hacer es tomar un Dataset, por ejemplo, una tabla o un Query y desde el diseñador abrir la lista de campos persistentes (haciendo doble clic sobre el Dataset te muestra la lista de campos). Agrega y después selecciona el campo en cuestión, en seguida busca la propiedad EditMask y coloca la máscara tal y como lo haces en un MaskEdit.

Saludos
Responder Con Cita
  #6  
Antiguo 04-01-2008
Avatar de hamiltonfvi
hamiltonfvi hamiltonfvi is offline
Miembro
 
Registrado: ene 2008
Posts: 12
Poder: 0
hamiltonfvi Va por buen camino
Maskedit resuelto

Hey! Muchas gracias a ambos, tenian razon, se puede resolver d ambas formas!!! Aunque la solucion de Hector es la mas correcta.
Responder Con Cita
  #7  
Antiguo 04-01-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Por algo es un maestro, yo apenas soy novato.
Saludos
Responder Con Cita
  #8  
Antiguo 04-01-2008
Avatar de hamiltonfvi
hamiltonfvi hamiltonfvi is offline
Miembro
 
Registrado: ene 2008
Posts: 12
Poder: 0
hamiltonfvi Va por buen camino
Como activar DBGrid?

Tengo una duda, tenemos un dbgrid asociado a nuestra base de datos, todo funciona bien, ya probamos los controles de grabar, modificar, etc. El problema resulta q cuando accesamos al la pantalla q contiene el dbgrib, este no muestra la informacion q contiene nuestra tabla de la base de datos, solo hasta q hayamos introducido o modificado algun registro es q muestra el contenido de los demas registros en el dbgrid. Llegué a pensar q era con el evento onshow del dbgrid, pero no tiene ninguno. Agradesco de antemano toda la ayuda brindada. Si vienen algun dia a mi pais, no duden en contactarse conmigo.
Responder Con Cita
  #9  
Antiguo 04-01-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Un dbgrid, simplemente es un elemento donde se muestra lo que hay en una base de datos, sean una o varias tablas.
Para que se muestren los datos, la tabla o en query tienen que estar abiertos.
Es muy simple:
Donde abres la tabla?.
Que componentes usas?.
Que base de datos usas?
Estos datos no son relevantes, pero ayuda a analizar conceptos.
Saludos
Responder Con Cita
  #10  
Antiguo 04-01-2008
Avatar de hamiltonfvi
hamiltonfvi hamiltonfvi is offline
Miembro
 
Registrado: ene 2008
Posts: 12
Poder: 0
hamiltonfvi Va por buen camino
dggrid

pues la tabla la abro con un adoquery el cual los ponemos en un datamodule donde tambien esta el datasource. Dicho sea de paso usamos la conexion ado, El dbgrid se en cuentra en un form llamado estudiantes, dicho form contiene un dataset q apunta al adoquery donde esta la tabla. Todo funciona bien, solo que no trae los datos d la tabla hasta q empezamos los movimientos como ya habia dicho.

Última edición por hamiltonfvi fecha: 04-01-2008 a las 21:23:32.
Responder Con Cita
  #11  
Antiguo 04-01-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Ya dijiste, como dices tu, antes, que no se muestran los movimientos hasta que empiezan los movimientos, eso ya lo vi.
Pero:
La pregunta no fue contestada:
En que procedimiento, evento, lugar, abres la tabla, en este caso el query.?
Para mi es muy sencillo, sin ver el programa podria decir que lo abre en el formcreate.
Me equivoco?.
Saludos
Edito:
Me parece que si no coloca la informacion en el dbgrid hasta que se actualiza, es por que ahi es donde se abre al tabla.
Simplemente se puede abrir en otro evento.

Última edición por Caral fecha: 04-01-2008 a las 21:40:43.
Responder Con Cita
  #12  
Antiguo 04-01-2008
Avatar de hamiltonfvi
hamiltonfvi hamiltonfvi is offline
Miembro
 
Registrado: ene 2008
Posts: 12
Poder: 0
hamiltonfvi Va por buen camino
Pues no realmente, el evento se presenta al elegir una opcion del menu desde la forma del menu principal, por ejemplo es el codigo q llama al form 'calificaciones' (donde esta dbgrid) desde el form 'menu principal':

procedure TMenPrinc.Calificaciones1Click(Sender: TObject);
begin
FCalificaciones.Show;
end;

al entrar el form calificaciones trae el dbgrid, el cual no tiene asignado ningun tipo d evento, solo esta enlazado normalmente al datasource, pero no muestra nada de la tabla hasta q se hagan los movimientos. Por cierto, nuestra base de datos esta hecha en sql.
Responder Con Cita
  #13  
Antiguo 04-01-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Empecemos por partes:
Este es solo un comentario, para mi no deberia de estar asi.
Si llamas al form con ese codigo quiere decir que ya fue creado, eso debe alentar el programa a la hora de iniciarse, en otras palabras lo tienes en el proyecto.

Por otro lado:
Si en el form que contiene el dbgrid no hay ningun codigo que traiga la informacion, como la traes:?
Seguro la traes en el momento que haces los cambios.
Me gustaria que colocaras aqui el codigo de ese form, asi se vera mejor la cosa.
Saludos
Nota: coloca el codigo con las etiquetas, asi se vera mejor
Responder Con Cita
  #14  
Antiguo 04-01-2008
Avatar de hamiltonfvi
hamiltonfvi hamiltonfvi is offline
Miembro
 
Registrado: ene 2008
Posts: 12
Poder: 0
hamiltonfvi Va por buen camino
este es el codigo de la unidad del form asignaturas, te pongo esta porque es la mas sencilla de las formas.

Cita:
unit UAsignatura;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, DB, Mask, DBCtrls, Buttons, ComCtrls, Grids,
DBGrids;
type
TFAsignatura = class(TForm)
Label1: TLabel;
EdCodigoas: TDBEdit;
DataSource1: TDataSource;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
GroupBox1: TGroupBox;
Label7: TLabel;
Edcodigoemp: TDBEdit;
Image1: TImage;
CBNombreas: TDBComboBox;
CBGradoas: TDBComboBox;
CBCicloas: TDBComboBox;
CBNivelas: TDBComboBox;
CBSemestreas: TDBComboBox;
BtnNuevo: TBitBtn;
BtnGuardar: TBitBtn;
BtnModificar: TBitBtn;
BtnEliminar: TBitBtn;
BtnSalir: TBitBtn;
Panel1: TPanel;
StatusBar1: TStatusBar;
Label8: TLabel;
DBEdit1: TDBEdit;
DataSource2: TDataSource;
Label9: TLabel;
DBEdit2: TDBEdit;
DBGAsignatura: TDBGrid;
Panel2: TPanel;
procedure BtnNuevoClick(Sender: TObject);
procedure EdCodigoasKeyPress(Sender: TObject; var Key: Char);
procedure CBGradoasKeyPress(Sender: TObject; var Key: Char);
procedure CBCicloasKeyPress(Sender: TObject; var Key: Char);
procedure CBNombreasKeyPress(Sender: TObject; var Key: Char);
procedure CBNivelasKeyPress(Sender: TObject; var Key: Char);
procedure CBSemestreasKeyPress(Sender: TObject; var Key: Char);
procedure EdcodigoempKeyPress(Sender: TObject; var Key: Char);
procedure BtnGuardarClick(Sender: TObject);
procedure BtnModificarClick(Sender: TObject);
procedure BtnEliminarClick(Sender: TObject);
procedure BtnSalirClick(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FAsignatura: TFAsignatura;
implementation
uses UDTM;
{$R *.dfm}
procedure TFAsignatura.BtnNuevoClick(Sender: TObject);
begin
dtm.ASIGNATURA.Open;
dtm.ASIGNATURA.Insert;
dtm.ASIGNATURA.Edit;
Edcodigoas.Enabled:=true;
CBNombreas.Enabled:=true;
CBGradoas.Enabled:=true;
CBCicloas.Enabled:=true;
CBNivelas.Enabled:=true;
CBSemestreas.Enabled:=true;
EdCodigoemp.Enabled:=true;
end;
procedure TFAsignatura.EdCodigoasKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
CBNombreas.SetFocus;
end;
end;
procedure TFAsignatura.CBGradoasKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
CBcicloas.SetFocus;
end;
end;
procedure TFAsignatura.CBCicloasKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
CBNivelas.SetFocus;
end;
end;
procedure TFAsignatura.CBNombreasKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
CBgradoas.SetFocus;
end;
end;
procedure TFAsignatura.CBNivelasKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
CBsemestreas.SetFocus;
end;
end;
procedure TFAsignatura.CBSemestreasKeyPress(Sender: TObject;
var Key: Char);
begin
if key = #13 then
begin
EdCodigoemp.SetFocus;
end;
end;
procedure TFAsignatura.EdcodigoempKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
btnGuardar.SetFocus;
end;
end;
procedure TFAsignatura.BtnGuardarClick(Sender: TObject);
begin
dtm.ASIGNATURA.Post;
Edcodigoas.Enabled:=false;
CBNombreas.Enabled:=false;
CBGradoas.Enabled:=false;
CBCicloas.Enabled:=false;
CBNivelas.Enabled:=false;
CBSemestreas.Enabled:=false;
EdCodigoemp.Enabled:=false;
btnguardar.SetFocus;
end;
procedure TFAsignatura.BtnModificarClick(Sender: TObject);
begin
if MessageDlg('Esta seguro que desea modificar este registro', mtInformation, [mbyes, mbno], 0) = mryes then
begin
dtm.ASIGNATURA.Open;
dtm.ASIGNATURA.Edit;
Edcodigoas.Enabled:=true;
CBNombreas.Enabled:=true;
CBGradoas.Enabled:=true;
CBCicloas.Enabled:=true;
CBNivelas.Enabled:=true;
CBSemestreas.Enabled:=true;
EdCodigoemp.Enabled:=true;
BtnGuardar.SetFocus;
end
end;
procedure TFAsignatura.BtnEliminarClick(Sender: TObject);
begin
if MessageDlg('Esta seguro que desea eliminar este registro', mtInformation, [mbyes, mbno], 0) = mryes then
begin
dtm.ASIGNATURA.Delete;
end
else
abort;
end;
procedure TFAsignatura.BtnSalirClick(Sender: TObject);
begin
Fasignatura.Close;
end;
procedure TFAsignatura.FormShow(Sender: TObject);
begin
dtm.ASIGNATURA.Open;
end;
end.

Última edición por hamiltonfvi fecha: 04-01-2008 a las 22:57:32.
Responder Con Cita
  #15  
Antiguo 04-01-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Como soy casi adivino, lo sabia, abres la tabla en el formshow, que es casi lo mismo que el formcreate.
Solucion:
Coloca un nuevo boton (Actualiza).
y el codigo quedaria asi:
Código Delphi [-]
unit UAsignatura;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, DB, Mask, DBCtrls, Buttons, ComCtrls, Grids,
DBGrids;
type
TFAsignatura = class(TForm)
Label1: TLabel;
EdCodigoas: TDBEdit;
DataSource1: TDataSource;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
GroupBox1: TGroupBox;
Label7: TLabel;
Edcodigoemp: TDBEdit;
Image1: TImage;
CBNombreas: TDBComboBox;
CBGradoas: TDBComboBox;
CBCicloas: TDBComboBox;
CBNivelas: TDBComboBox;
CBSemestreas: TDBComboBox;
BtnNuevo: TBitBtn;
BtnGuardar: TBitBtn;
BtnModificar: TBitBtn;
BtnEliminar: TBitBtn;
BtnSalir: TBitBtn;
Panel1: TPanel;
StatusBar1: TStatusBar;
Label8: TLabel;
DBEdit1: TDBEdit;
DataSource2: TDataSource;
Label9: TLabel;
DBEdit2: TDBEdit;
DBGAsignatura: TDBGrid;
Panel2: TPanel;
procedure BtnNuevoClick(Sender: TObject);
procedure EdCodigoasKeyPress(Sender: TObject; var Key: Char);
procedure CBGradoasKeyPress(Sender: TObject; var Key: Char);
procedure CBCicloasKeyPress(Sender: TObject; var Key: Char);
procedure CBNombreasKeyPress(Sender: TObject; var Key: Char);
procedure CBNivelasKeyPress(Sender: TObject; var Key: Char);
procedure CBSemestreasKeyPress(Sender: TObject; var Key: Char);
procedure EdcodigoempKeyPress(Sender: TObject; var Key: Char);
procedure BtnGuardarClick(Sender: TObject);
procedure BtnModificarClick(Sender: TObject);
procedure BtnEliminarClick(Sender: TObject);
procedure BtnSalirClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure BtnCtualizaClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FAsignatura: TFAsignatura;
implementation
uses UDTM;
{$R *.dfm}

// aqui empieza la parte nueva
procedure TFAsignatura.BtnActualizaClick(Sender: TObject);
begin
dtm.ASIGNATURA.Close;
dtm.ASIGNATURA.Open;
end;
// aqui termina

procedure TFAsignatura.BtnNuevoClick(Sender: TObject);
begin
// dtm.ASIGNATURA.Open; ya esta abierta la tabla en el FormShow
dtm.ASIGNATURA.Insert;
// dtm.ASIGNATURA.Edit; esto es innecesario
Edcodigoas.Enabled:=true;
CBNombreas.Enabled:=true;
CBGradoas.Enabled:=true;
CBCicloas.Enabled:=true;
CBNivelas.Enabled:=true;
CBSemestreas.Enabled:=true;
EdCodigoemp.Enabled:=true;
end;
procedure TFAsignatura.EdCodigoasKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
CBNombreas.SetFocus;
end;
end;
procedure TFAsignatura.CBGradoasKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
CBcicloas.SetFocus;
end;
end;
procedure TFAsignatura.CBCicloasKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
CBNivelas.SetFocus;
end;
end;
procedure TFAsignatura.CBNombreasKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
CBgradoas.SetFocus;
end;
end;
procedure TFAsignatura.CBNivelasKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
CBsemestreas.SetFocus;
end;
end;
procedure TFAsignatura.CBSemestreasKeyPress(Sender: TObject;
var Key: Char);
begin
if key = #13 then
begin
EdCodigoemp.SetFocus;
end;
end;
procedure TFAsignatura.EdcodigoempKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
btnGuardar.SetFocus;
end;
end;
procedure TFAsignatura.BtnGuardarClick(Sender: TObject);
begin
dtm.ASIGNATURA.Post;
Edcodigoas.Enabled:=false;
CBNombreas.Enabled:=false;
CBGradoas.Enabled:=false;
CBCicloas.Enabled:=false;
CBNivelas.Enabled:=false;
CBSemestreas.Enabled:=false;
EdCodigoemp.Enabled:=false;
btnguardar.SetFocus;
end;
procedure TFAsignatura.BtnModificarClick(Sender: TObject);
begin
if MessageDlg('Esta seguro que desea modificar este registro', mtInformation, [mbyes, mbno], 0) = mryes then
begin
// dtm.ASIGNATURA.Open;   Ya esta abierta
dtm.ASIGNATURA.Edit;
Edcodigoas.Enabled:=true;
CBNombreas.Enabled:=true;
CBGradoas.Enabled:=true;
CBCicloas.Enabled:=true;
CBNivelas.Enabled:=true;
CBSemestreas.Enabled:=true;
EdCodigoemp.Enabled:=true;
BtnGuardar.SetFocus;
end
end;
procedure TFAsignatura.BtnEliminarClick(Sender: TObject);
begin
if MessageDlg('Esta seguro que desea eliminar este registro', mtInformation, [mbyes, mbno], 0) = mryes then
begin
dtm.ASIGNATURA.Delete;
end
else
abort;
end;
procedure TFAsignatura.BtnSalirClick(Sender: TObject);
begin
Fasignatura.Close;
end;
procedure TFAsignatura.FormShow(Sender: TObject);
begin
dtm.ASIGNATURA.Open;
end;
end.
Espero lo entiendas.
Saludos
Responder Con Cita
  #16  
Antiguo 05-01-2008
Avatar de hamiltonfvi
hamiltonfvi hamiltonfvi is offline
Miembro
 
Registrado: ene 2008
Posts: 12
Poder: 0
hamiltonfvi Va por buen camino
dbgrid

gracias caral, pero la solucion q propones es practicamente la misma q utilizar el boton 'nuevo' o 'modificar'. Lo q nosotros queriamos es q el dbgrid nos trajera los datos al abrir la forma sin pulsar nada, pero ni modo, agregaremos el boton 'actualizar'. Gracias por todo.
Responder Con Cita
  #17  
Antiguo 05-01-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No mal entiendas, el concepto es lo que importa.
No es necesario poner un boton, lo inportante es el concepto, eso lo puedes hacer en cualquier evento del form, no específicamente en un boton.
Lo puse asi, para que lo captaras, no para que fuera exactamente asi.
Saludos
Responder Con Cita
  #18  
Antiguo 05-01-2008
Avatar de hamiltonfvi
hamiltonfvi hamiltonfvi is offline
Miembro
 
Registrado: ene 2008
Posts: 12
Poder: 0
hamiltonfvi Va por buen camino
dbgrid solucionado

Mil gracias, ahora si entendi, funciona a las mil maravillas, no se que haria sin tu ayuda. Hey, por cierto, muy bueno el minitutorial q preparaste, gente como tu hacen falta para que el mundo sea un sitio mejor.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
MaskEdit NuncaMas Varios 11 07-01-2010 13:11:08
MaskEdit es la solucion? kepacha Varios 4 24-01-2005 13:07:22
MaskEdit!! JCarlos OOP 3 19-01-2005 20:45:32
MaskEdit scooterjgm OOP 5 20-09-2004 07:13:12
problema con maskedit superhopi OOP 1 12-05-2003 09:29:03


La franja horaria es GMT +2. Ahora son las 01:18:03.


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