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 29-12-2011
jocaro jocaro is offline
Miembro
 
Registrado: sep 2011
Posts: 104
Poder: 13
jocaro Va por buen camino
Access violation

Hola, a ver si me podéis ayudar.

He creado un form para acceder a base de datos con el siguiente código:

unit BasDat;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBAccess, Uni, UniProvider, SQLiteUniProvider;

type
TFormBasDat = class(TForm)
ProveedorSqlite: TSQLiteUniProvider;
ConexionBDSqlite: TUniConnection;
private
{ Private declarations }
public
{ Public declarations }
end;

var
FormBasDat : TFormBasDat ;

implementation

{$R *.dfm}

end.


El .dpr tiene el siguiente código

program Sdiapp;

uses
Forms,
SDIMAIN in 'SDIMAIN.PAS' {SDIAppForm},
BasDat in 'BasDat.pas' {FormBasDat};

{$R *.RES}

begin

with TFormBasDat.Create(Application)do
begin
Visible:= False;
end;

Application.Initialize;
Application.CreateForm(TSDIAppForm, SDIAppForm);
Application.Run;
end.

Cuando intento acceder desde el evento create de SDIAppForm (form principal), en el que he metido el uses de FormBasDat, me devuelve un access violation. El evento oncreate tiene el siguiente código

procedure TSDIAppForm.EstablecerInicio(Sender: TObject);
begin

FormBasDat.ConexionBdSqlite.Connected := True;
FormBasDat.ConexionBDSqlite.StartTransaction;

end;

He recorrido el código con debug y encuentro que el form de base de datos se ejecuta sin problemas, pero en la primera línea ejecutada en el oncreate anterior (FormBasDat.ConexionBdSqlite.Connected := True me devuelve "inaccessible value". Que es lo que estoy haciendo mal

Un saludo
Responder Con Cita
  #2  
Antiguo 30-12-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración.
Responder Con Cita
  #3  
Antiguo 30-12-2011
jocaro jocaro is offline
Miembro
 
Registrado: sep 2011
Posts: 104
Poder: 13
jocaro Va por buen camino
Access violation (llamada a componente de otro form)!!

Hola

He leido la guía, he buscado en google y en la búsqueda del foro, he puesto la consulta en "Varios" ya que no sabía en que apartado ponerlo y en la búsqueda encontré varios mensajes sobre el tema. He intentado explicarme y documentar con detalle el problema, he puesto en distinto color el código, etc. Si me comentas lo de la guía por un motivo específico me gustaría que me lo indicaras para tenerlo en cuenta y no reincidir.

En cuanto a la consulta no encuentro respuesta, me imagino que será algún detalle trivial que no alcanzo a ver, porque no tengo experiencia en delphi y voy aprendiendo sobre muchos conceptos de éste, a la vez. Si, a partir de la información que os presento, alguien conoce el motivo o lo sospecha, por el cual me falla el código le agradecería que me lo comentara.

Un saludo y gracias de antemano.
Responder Con Cita
  #4  
Antiguo 30-12-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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 jocaro.

Por favor cuando incluyas código en tus mensajes usa TAG's para que sea más legible:


En cuanto al código, no entiendo la lógica de la creación. Pareciera que deseas que FormBasDat sea el form principal, se oculte y se muestre SDIAppForm.

Si es así, probá si de este modo logras lo que estás buscando:
Código Delphi [-]
...
  Application.Initialize;
  Application.CreateForm(TFormBasDat, FormBasDat);
  Application.ShowMainForm:= False;
  Application.CreateForm(TSDIAppForm, SDIAppForm);
  SDIAppForm.Show;
  Application.Run;
...


Saludos.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 30-12-2011 a las 16:17:12.
Responder Con Cita
  #5  
Antiguo 30-12-2011
jocaro jocaro is offline
Miembro
 
Registrado: sep 2011
Posts: 104
Poder: 13
jocaro Va por buen camino
Access violation (llamada a componente de otro form)

Hola

He seguido leyendo y probando y he conseguido resolver el problema

Con el código original en el cual el form FormBasDat se creaba en el fichero.dpr la aplicación lanzaba un "access violation". Parece que el form no se ha creado cuando se utiliza en el siguiente form codificado en fichero.dpr (SDIMAIN), aunque desconozco el motivo

Con la creación de FormBasDat en el evento oncreate del form SDIMAIN, justo antes de referirse a él, la aplicación funciona correctamente

procedure TSDIAppForm.EstablecerInicio(Sender: TObject);
begin

FormBasDat := TFormBasDat.Create(Application);

FormBasDat.ConexionBdSqlite.Connected := True;
FormBasDat.ConexionBDSqlite.StartTransaction;

end;


Un saludo y gracias
Responder Con Cita
  #6  
Antiguo 30-12-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por favor, tal y como te ha comentado ecfisa, recuerda poner etiquetas (tags) al código, gracias por tu colaboración.
Ejemplo:



.
Responder Con Cita
  #7  
Antiguo 30-12-2011
jocaro jocaro is offline
Miembro
 
Registrado: sep 2011
Posts: 104
Poder: 13
jocaro Va por buen camino
Access violation (llamada a componente de otro form)

Gracias ecfisa, tendré en cuenta lo que me comentas de poner tags el código.

En cuanto a la lógica te comento que el form principal es SDIAppForm, de hecho al principio era el único existente, ahí estaba todo el código de la aplicación. Posteriormente me planteé organizar un poco dicho código y saque lo referente a base de datos (es decir componentes de conexión, data sources, etc.) a otro form llamado FormBasDat. La idea era crear el form de base de datos al principio y posteriormente crear el form principal, hacerlo visible y poder acceder desde él a FormBasDat, para utilizar sus conexiones.

He conseguido mi propósito cambiando el lugar donde creo FormBasDat como indico en otro de los mensajes.

Espero haberme explicado al menos lo suficiente para hacerme entender.

Un saludo y gracias por vuestro tiempo y atención.
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
Access Violation Alejo15x API de Windows 2 09-11-2010 02:36:04
access violation chona Varios 2 31-10-2006 01:36:04
Access violation at .... Perio Varios 5 07-02-2006 15:50:36
Access Violation ..... MADV01 Varios 2 24-03-2004 16:01:33
Access violation Giasl Varios 6 07-05-2003 12:35:51


La franja horaria es GMT +2. Ahora son las 07:53:14.


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