Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-04-2007
eldiegofg eldiegofg is offline
Miembro
 
Registrado: mar 2007
Ubicación: Colón - Entre Ríos
Posts: 54
Poder: 18
eldiegofg Va por buen camino
Error al utilizar una tabla en varios formularios

Hola, soy nuevo y mi consulta es debido a que estoy intentando acceder a una tabla definida en un form1 desde un form2 (por ejemplo para ofrecer una ventana de ingreso de datos) y cuando quiero insertar un registro en dicha tabla me da un error de "Access Violation". Alguien que pueda ayudarme por favor??
Responder Con Cita
  #2  
Antiguo 07-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Bienvenido al foro, como es costumbre, se aconseja darle un vistazo a las normas del foro.

Te sugiero que añadas un Datamodule (File -> new -> busca, no sé bien donde anda). El TTable o Tquery lo sitúas en ese Datamodule Después en cada Form haces un "uses Datamodule1" y ya tienes acceso.

El Datamodule es un contenedor de objetos, no se verá en ejecución, así que puedes crearlo desde el principio de la aplicación (antes que el form1 y form2).

El problema que tienes, es que el Form1 no está creado al intentar acceder desde Form2, (o incluso puede que se haya destruido por llamar a form1.Free), por eso de da un Error de Violación de Acceso a memoria.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 09-04-2007
eldiegofg eldiegofg is offline
Miembro
 
Registrado: mar 2007
Ubicación: Colón - Entre Ríos
Posts: 54
Poder: 18
eldiegofg Va por buen camino
Hola, probe con el Datamodule y sigue pasando los mismo. Elimine todas las lineas de codigo y me quede solo con una que es la que intenta modificar la tabla y me sale el siguiente error:

Project Project1.exe raised exception class EAccessViolation with message 'Access Violation at adress "xx" in module 'Project1.exe'. Read of adress 00000000. Process stopped. Use step or run to continue.

El problema se da cada vez que quiero modificar una tabla (agregar o eliminar registros) desde un form (o una unit) diferente a la primera, o sea, cuando no lo hago desde el form1 (unit1) me da ese error...

Lo unico que deje para probar es en el form1 un boton que abre el form2 y en el form2 la linea que intenta modificar la tabla. Estoy desconcertado...
Responder Con Cita
  #4  
Antiguo 09-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
ya que el proyecto será muy pequeño, adjunta en el foro (dentro de un zip) los archivos:
programa.dpr
form1.pas
form1.dfm
form2.pas
form2.dfm

Y así vemos por donde puede venir el error.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 11-04-2007
eldiegofg eldiegofg is offline
Miembro
 
Registrado: mar 2007
Ubicación: Colón - Entre Ríos
Posts: 54
Poder: 18
eldiegofg Va por buen camino
Hola, te paso lo que me pediste en el zip, tambien deje la tabla de pruebas. Espero me puedas ayudar. Muchas gracias y saludos
Archivos Adjuntos
Tipo de Archivo: zip project2.zip (8,9 KB, 12 visitas)
Responder Con Cita
  #6  
Antiguo 11-04-2007
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
Código Delphi [-]
var
  Form3: TForm3; 
  table1:ttable; // aquí es donde está el problema

implementation

uses Unit2, Unit1;

{$R *.dfm}

procedure TForm3.BitBtn1Click(Sender: TObject);
begin
  table1.insertrecord([8,'juan','garcia']);  {aqui aparecen los errores}
  table1.delete;                             {cuando quiero alterar la tabla}
end;

Hola, el problema es que declaras table1 dentro del unit, lo que tienes que utilizar es el table1 que está dentro del datamodule. La cosa quedaría así:
Código Delphi [-]
var
  Form3: TForm3; 

implementation

uses Unit2, Unit1;

{$R *.dfm}

procedure TForm3.BitBtn1Click(Sender: TObject);
begin
  DataModule2.table1.insertrecord([8,'juan','garcia']);
  DataModule2.table1.delete;                             
end;
Responder Con Cita
  #7  
Antiguo 14-04-2007
eldiegofg eldiegofg is offline
Miembro
 
Registrado: mar 2007
Ubicación: Colón - Entre Ríos
Posts: 54
Poder: 18
eldiegofg Va por buen camino
Muchas gracias, ahora si funciona todo bien. Errores de novato, jeje. Muchas gracias y 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
usar un procedure en varios formularios adonai Varios 21 30-03-2007 17:42:34
¿Cómo crear una DLL con varios formularios? Javi2 Varios 3 25-05-2006 10:35:06
Borrar varios registro de una tabla molina669 Conexión con bases de datos 2 10-11-2005 19:58:00
CTRL-P en varios formularios magm2000 Varios 2 20-10-2004 09:38:09
cargar tabla en varios combos Delphos Conexión con bases de datos 2 04-10-2003 19:09:11


La franja horaria es GMT +2. Ahora son las 00:56:01.


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