Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-08-2011
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
cual es la mejor forma de llamar a un formulario de modificación de datos

Hola nuevamente hace día he estado trabajando con formularios el cual se me han presentado inconvenientes, me he apoyado en literatura por ejemplo la cara ocultad e delphi, delphi7, delphi handbook (para uso de ribbon). Algunos de ellos brindan técnicas la cual realizo pero una cosa es la teoría y la otra es la practica ustedes deben de saber eso.

Gracias a este foro he encontrado personas que me han ayudado no dándome todo fácil pero si guiándome lo suficiente y a ellos les agradezco.

Siguiendo el asunto de formularios el inconveniente que poseo actualmente es que necesito utilizar mi formulario de ingreso de registros también como formulario de modificación de registro mi código actual algunos los conocen es.


Código Delphi [-]
procedure MuestraVentana(ventana: string; modo: string);
begin
 if ventana = 'Clientes' then
  begin
    if FrmCliente = nil then
    begin
      FrmCliente := TfrmCliente.create(FrmCliente);
      Try
      FrmCliente.Parent := FrmPrincipal.Panel4;
      FrmCliente.Caption := 'Clientes';
      dmacceso.cdsClientes.Active := True;
      dmacceso.cdsClientes.Last;
      dmacceso.cdsClientes.Open;
      dmacceso.cdsClientes.Insert;
      FrmCliente.Show;
      finally
         If FrmCliente.Caption <> ' ' then
         Begin
           FrmPrincipal.TabSet1.Tabs.add(FrmCliente.Caption);
           FrmPrincipal.TabSet1.TabIndex := FrmPrincipal.TabSet1.Tabs.Count - 1;
         end;
   end;
end;

    if modo = 'Editar' then
        begin
            frmCliente.btnModificar.Visible := True;
            frmCliente.btnGuardar.Visible := False;
            dmacceso.cdsClientes.Edit;
            frmCliente.Show;
    end;

  end;

Este es el boton de llamar al formulario para ser modificado

Código Delphi [-]
procedure TfrmFicheroCliente.aModificarExecute(Sender: TObject);
begin
  pais := dmAcceso.cdsClientesPais.text;
  dmacceso.cdsClientes.Edit;
  MostrarRegistroYGuardar;
end;

Este es un procedimiento de modificar en el boton

Código Delphi [-]
procedure TfrmCliente.btnModificarClick(Sender: TObject);
begin
  dmacceso.cdsClientesPAIS.Value := cbexPais.Text;
  dmacceso.cdsclientes.edit;
  dmacceso.cdsClientes.ApplyUpdates(0);

  if Application.MessageBox('Cliente Modificado',
  'Atención',(MB_OK + MB_ICONINFORMATION))= mb_ok then
  begin
    frmcliente.Close;   //            Estas dos lineas de código en particular no 
    frmFicherocliente.Show;//     me hacen nada cuando doy aceptar. Alguna idea como mejorar eso?
  end

end;

Como dije se me están presentando inconvenientes por ejemplo Al estar el formuolario abierto si no le doy clic algun dbEdit no se muestran los datos que quiero modificar..

Saludos;
Responder Con Cita
  #2  
Antiguo 03-08-2011
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
ah se me olvidaba este es mi procedimiento de MostrarRegistroyGuardar

Código Delphi [-]
procedure TfrmFicheroCliente.MostrarRegistroYGuardar;
begin
  utiles.MuestraVentana('Clientes', 'Editar'); //aqui llama al modo de Editar
end;
Responder Con Cita
  #3  
Antiguo 03-08-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Post

mmmm me parece algo complicado tu codigo.. tienes muchas cosas que son redundantes

por ejemplo
Código Delphi [-]
 
dmacceso.cdsClientes.Active := True;  // esto es igual que open
dmacceso.cdsClientes.Last; // no es necesatio cuando insertas pq se va al final
dmacceso.cdsClientes.Open;
dmacceso.cdsClientes.Insert;

yo particularmente hago esto

Boton Modificar del form donde muestro los datos
Código Delphi [-]
 
procedure TfrmCatalogoAnexo.btnModificaClick(Sender: TObject);
begin
  btn_opcion := 1;
  qryAnexos.Edit;
  frmCatalogoAnexod := TfrmCatalogoAnexod.Create(nil);
  frmCatalogoAnexod.Show
end;

y en el create del formulario invocado hago mas o menos esto
Código Delphi [-]
 
 
procedure TfrmCatalogoAnexod.FormCreate(Sender: TObject);
var i: Integer;
begin
  if frmCatalogoAnexo.btn_opcion =1 then
    begin
      edtCodigo.Enabled := False;
      ComboBox1.ItemIndex := StrToInt(frmCatalogoAnexo.qryAnexosTipoAnexo.Value) - 1;
    end;
  if frmCatalogoAnexo.btn_opcion >= 1 then
        edtTipoAnexoExit(sender);
  if frmCatalogoAnexo.btn_opcion = 2 then
    begin
      btnGrabar.Caption := 'Eliminar';
      for i := 0 to (Self.ComponentCount - 1) do  begin
        if (Self.Components[i] is TDBEdit) or (Self.Components[i] is TComboBox) then begin
          TEdit(Self.Components[i]).Enabled := False;
        end;
      end;
    end;
end;

y en el boton de grabar hago mas o menos esto

Código Delphi [-]
 
procedure TfrmCatalogoAnexod.btnGrabarClick(Sender: TObject);
begin
  if frmCatalogoAnexo.btn_opcion <> 2 then
    begin
      frmCatalogoAnexo.qryAnexosTipoAnexo.AsString := FormatFillStringNumber (IntToStr(ComboBox1.ItemIndex + 1),2);
      frmCatalogoAnexo.qryAnexosEmpresa.AsString := dmGlobal.g_CodigoEmpresa;
      frmCatalogoAnexo.qryAnexos.Post;
    end;
  if frmCatalogoAnexo.btn_opcion = 2 then
    frmCatalogoAnexo.qryAnexos.Delete;
  Close;
  frmCatalogoAnexo.dbgAnexo.SetFocus;
end;
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #4  
Antiguo 03-08-2011
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
hola oscarac respecto a lo reduntante he notado que:

Código Delphi [-]
dmacceso.cdsClientes.open; // no me abre el DataSet al llamar el formulario

dmacceso.cdsClientes.Last; // si no lo utilizaba en mi formulario para registrar datos me eliminaba no se ponia de ultimo. y por lo general me eliminaba mi primer registro.

Por eso los utilizo... Se me comporta extraño el formulario cuando uso métodos que se consideran "apropiados".

Saludos;
Responder Con Cita
  #5  
Antiguo 03-08-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
ohh ya
pero eso depende de la instancia y lo que quieras hacer con el registro activo
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #6  
Antiguo 03-08-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Coloca un checkbox en el form:
Código Delphi [-]
procedure TFrmPrincipal.CheckBox1Click(Sender: TObject);
begin
   If Checkbox1.Checked = True then
   begin
   Checkbox1.Caption:= 'Insertar';
   end
   else
   Checkbox1.Caption:= 'Modificar';
end;

procedure MuestraVentana(ventana: string; modo: string);
begin
 if ventana = 'Clientes' then
  begin
    if FrmCliente = nil then
    begin
      FrmCliente := TfrmCliente.create(FrmCliente);
      Try
      FrmCliente.Parent := FrmPrincipal.Panel4;
      FrmCliente.Caption := 'Clientes';
      dmacceso.cdsClientes.Active := True;

      If Checkbox1.Checked = True then
      begin
      // insertar
      dmacceso.cdsClientes.Last;
      dmacceso.cdsClientes.Open;
      dmacceso.cdsClientes.Insert;
      FrmCliente.Show;
      end
      else
      begin
      // modificar
      dmacceso.cdsClientes.Open;
      dmacceso.cdsClientes.Edit;
      FrmCliente.Show;
      end;

      finally
         If FrmCliente.Caption <> ' ' then
         Begin
           FrmPrincipal.TabSet1.Tabs.add(FrmCliente.Caption);
           FrmPrincipal.TabSet1.TabIndex := FrmPrincipal.TabSet1.Tabs.Count - 1;
         end;
   end;
end;

procedure TfrmCliente.btnModificarClick(Sender: TObject);
begin
  dmacceso.cdsClientesPAIS.Value := cbexPais.Text;
  dmacceso.cdsClientes.ApplyUpdates(0);

  if Application.MessageBox('Cliente Modificado',
  'Atención',(MB_OK + MB_ICONINFORMATION))= mb_ok then
  begin
    frmcliente.Close;   //            Estas dos lineas de código en particular no 
    frmFicherocliente.Show;//     me hacen nada cuando doy aceptar. Alguna idea como mejorar eso?
  end

end;

end;
saludos
__________________
Siempre Novato
Responder Con Cita
  #7  
Antiguo 03-08-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
A cómo dice Oscarac, parece que te has complicado en algo que puede ser simple. No te preocupes, estás empezando y es lo más normal de todo el mundo. En mi caso, fíjate lo que hago:

Declaro dos contructores en la clase (los llamo "visores de registro", para diferenciarlos de los "exploradores de registro"). La declaración de los constructores es más o menos así:
Código Delphi [-]
type
    TClientesViewer =  class(TBaseViewer)
    published
        constructor ShowRecord(AOwner: TComponent; RecordID: Variant;
                               const ReadOnly: Boolean = False;
                               const UpdateTransaction: TpFIBTransaction = nil;
                               ...);
        constructor NewRecord(AOwner: TComponent; const RecordData: PString = nil);

Luego en la implementación de cada constructor preparo el enlace a datos de la forma más adecuada para el modo en el que se trabajará. El proceso de guardar los cambios o ya sea un nuevo registro, es casi lo mismo. En síntesis solo se requiere de una llamada a Post.

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #8  
Antiguo 03-08-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Desde luego, depende de como se hace el enlace, pero no me cuadra mucho lo de los dos constructores. A la ventana de edición de registro debería darle lo mismo si está editando un registro existente o uno nuevo. La diferencia debiera darla quien abre la ventana poniendo el dataset en modo de edición o de inserción.

// Saludos
Responder Con Cita
  #9  
Antiguo 03-08-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Cita:
Empezado por roman Ver Mensaje
La diferencia debiera darla quien abre la ventana poniendo el dataset en modo de edición o de inserción.
Terminarías repitiendo código Román. Tomé este diseño por la experiencia. Si quieres crear un nuevo registro, solo falta con:
Código Delphi [-]
TClientesViewer.NewRecord(Self);
Una simple línea de código.
Si lo que quieres modificar otro registro, también solo faltará con una simple línea de código
Código Delphi [-]
TClientesViewer.ShowRecord(Self, Table1.Fields['id'].AsString);

Cita:
Empezado por roman Ver Mensaje
A la ventana de edición de registro debería darle lo mismo si está editando un registro existente o uno nuevo.
En cierta forma así es. Prácticamente lo único que hacen los constructores es adaptar la interfaz de la ventana para ligeramente diferenciarse entre modificación o inserción de un registro.

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #10  
Antiguo 04-08-2011
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
como dijo roman
Cita:
A la ventana de edición de registro debería darle lo mismo si está editando un registro existente o uno nuevo. La diferencia debiera darla quien abre la ventana poniendo el dataset en modo de edición o de inserción.
Es lo que trato de decirles: En teoría son argumentos que exponen los autores en sus reconocidos libros que "Funcionan" sin embargo en la programación me he percatado que es a base de experiencia lo que realmente manda. Agradezco muchísimo sus aportes caral, roman, chris,oscarac y quien me falta por mencionar la cual son muchos Gracias.

Lo que entiendo de chris es que voy a crear una clase que puedo mas adelante utilizarla eso en teoría la puedo llamar herencia. (Si me equivoco corrijan).

Lo intentare porque no me he puesto a observar y practicar mucho la herencia y el poliformismo en la programación.

Saludos;

Novato_erick
Responder Con Cita
  #11  
Antiguo 04-08-2011
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino


Una pregunta Chris:

Código Delphi [-]
type
    TClientesViewer =  class(TBaseViewer);// de donde proviene TBaseViewer es de un componente?

Porque me manda error. identificador no declarado...


Saludos;

Última edición por novato_erick fecha: 04-08-2011 a las 05:59:08.
Responder Con Cita
  #12  
Antiguo 04-08-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Chris Ver Mensaje
Terminarías repitiendo código Román.
No veo por qué. Se requiere una sóla línea de código para poner en modo de edición o de inserción al dataset. Normalmente, dicho código lo colocaría yo en el evento Execute de una TAction, lo cual te permite llamar al mismo código desde varios lugares. En dicho evento puedes colocar cualquier otra cosa que haga falta para personalizar el visor.

Como dije antes, en mi opinión, es un error de diseño dejar a la clase visora la tarea de escoger ese menester pues, para empezar, dicha clase debería ser agnóstica del dataset.

// Saludos
Responder Con Cita
  #13  
Antiguo 04-08-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por novato_erick Ver Mensaje
Es lo que trato de decirles: En teoría son argumentos que exponen los autores en sus reconocidos libros que "Funcionan" sin embargo en la programación me he percatado que es a base de experiencia lo que realmente manda.
Desde luego. Pero muchos de esos autores escriben sus libros basados en su experiencia .

// Saludos
Responder Con Cita
  #14  
Antiguo 04-08-2011
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
Bueno logre poner en modo de Edición mi procedimiento al llamar el formulario en modo de edición he aquí la forma en que lo deje.
Código Delphi [-]

procedure MuestraVentana(ventana: string; modo: string);

if ventana = 'Clientes' then // lo considero como mi modo 'Normal' al ejecutarlo que significa agregar registros
  begin
    if FrmCliente = nil then
    begin
      FrmCliente := TfrmCliente.create(FrmCliente);
      Try
      FrmCliente.Parent := FrmPrincipal.Panel4;
      FrmCliente.Caption := 'Clientes';
      dmacceso.cdsClientes.Active := True;
      dmacceso.cdsClientes.Insert;
      FrmCliente.Show;
      finally
      If FrmCliente.Caption <> ' ' then
      Begin
      FrmPrincipal.TabSet1.Tabs.add(FrmCliente.Caption);
      FrmPrincipal.TabSet1.TabIndex := FrmPrincipal.TabSet1.Tabs.Count - 1;
      end;
      end;
    end;

    if modo = 'Editar' then
    begin
        frmCliente.btnModificar.Visible := True;// hago que se ponga visible el botón de modificar
        frmCliente.btnGuardar.Visible := False;// aquí oculto el botón de guardar pues esta en modo de edición
        frmCliente := TfrmCliente.Create(nil);
        dmacceso.cdsClientes.Edit;
    end;

  end;

Sin embargo aun pasa algo extraño, no me muestra los datos en seguida en los dbedit al abrir el formulario para ser modificados si no le doy click en algun dbEdit. ¿Alguien tiene alguna idea de como sulucionar este problema en si?

aquí esta como llamo a mi formulario en modo de Edición en el DBGrid con el evento DblClick

Código Delphi [-]
procedure TfrmFicheroCliente.dbgClientesDblClick(Sender: TObject);
begin
 pais := dmAcceso.cdsClientesPais.text;
 MostrarRegistroYGuardar;
end;

aquí llamo el modo de edición con un TButton:

Código Delphi [-]
procedure TfrmFicheroCliente.aModificarExecute(Sender: TObject);
begin
  pais := dmAcceso.cdsClientesPais.text;
  MostrarRegistroYGuardar;
end;

procedure TfrmFicheroCliente.MostrarRegistroYGuardar;
begin
  utiles.MuestraVentana('Clientes', 'Editar');// aquí llama al modo Editar del FrmCliente
end;
Responder Con Cita
  #15  
Antiguo 04-08-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
mmm me atrevo a preguntar si los dbedits estan asociados a un datasource?
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #16  
Antiguo 04-08-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Yo veo raro tu código. Aparentemente, el código de inserción de un nuevo registro se ejecuta aún cuando lo que quieras sea editar un registro existente. Es más, en tal caso creas la ventana frmCliente ¡dos veces!

Por otra parte, creo que sería mejor mostrar la ventana con ShowModal, a menos que haya alguna razón especial que no conozco.

// Saludos
Responder Con Cita
  #17  
Antiguo 04-08-2011
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
Así es oscarac

Este esta en

dmAcceso.cdsClientes

DataSource properties

AutoEdit = True
DataSet = dmAcceso.cdsClientes
Enable = True
Name = dsClientes
Tag = 0

Saludos;
Responder Con Cita
  #18  
Antiguo 04-08-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Yo tambien pienso que te estas complicando la existencia.... anteriormente te deje unos ejemplos de como lo hago yo.. quiza no seas una de las mejores formas pero me parece mucho mas sencillo que el tuyo

segun entiendo.. en un formulario de modificacion de datos puedes ejecutar 3 acciones

1.- agregar registros (append)
2.- modificar registros (edit)
3.- eliminar registros (delete)

la informacion en el form en cualquiera de los 3 casosa (con reservas en el modo insertar) es la misma y el procedimiento de aperturar el form deberia ser el mismo

segun YO cuando preguntas si el formulario = nil, es porque no tienes un control del flujo del programa....

creas un formulario y cuando lo cierras lo destruyes.. eso te evita preguntar si esta nil
del mismo modo con los botones... tienes 2 botonos 1 para crear y el otro para modificar... cuando deberias tener solo 1 que puedes cambiar el caption segun la accion y dentro del onclick manejar las "acciones" a seguir... segun hice referencia en los ejemplos que te deje anteriormente

sin animos de desanimarte ni mucho menos de hacerte cambiar de opinion (porque puede existir una buena razon del porque lo haces de esa forma), esos son mis comentarios

salvo error u omision o alguien con mas conocimientos me pueda corregir y de paso aprender mas..

saludos
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #19  
Antiguo 04-08-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Cita:
Empezado por novato_erick Ver Mensaje


Una pregunta Chris:

Código Delphi [-]
type
    TClientesViewer =  class(TBaseViewer);// de donde proviene TBaseViewer es de un componente?

Porque me manda error. identificador no declarado...


Saludos;
Lo que sucede es que TBaseViewer no es una clase que venga con Delphi. Es una clase que yo he escrito. Es el ancestro de todos los visores de registro que utilizo en mi aplicación. TBaseViewer implementa la funcionalidad básica y general de un visor de registro.

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #20  
Antiguo 04-08-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
De hecho, ¿por qué frmCliente tiene un botón Modificar y uno Guardar? Yo pondría sólo el botón Guardar que sirve para lo mismo en ambos casos (inserción y edición): guardar los datos. Es más, si el formulario se muestra modalmente, dicho botón Guardar únicamente pondría la propiedad ModalResult del formulario en mrOk para que la ventana que lo abrió sepa que se aceptan los cambios y se haga el Post a la base de datos.

Por otra parte, oscarac, no me queda claro que el mismo formulario se use para borrar registros. Creo que esa operación quedaría mejor en un explorador de registros, siguiendo la terminología de Chris.

// Saludos
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
Cual es la mejor forma de conectar con la BD GerTorresM Conexión con bases de datos 1 11-01-2010 16:51:47
Cuál es la mejor forma de conectar la base de datos a mi programa? martinzcr Varios 8 06-09-2007 16:28:41
cual es la mejor forma ? martita Varios 14 07-07-2005 19:35:55
Cual es la mejor forma de pasar datos de MSaccess a MySQL ctronx Conexión con bases de datos 7 04-08-2004 01:04:53
Cual es la mejor forma de Conectarse a una base de Datos Acces? catapulta Conexión con bases de datos 1 07-05-2003 05:04:21


La franja horaria es GMT +2. Ahora son las 07:21:51.


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