PDA

Ver la Versión Completa : Problema con Append en MDIChild forms


enecumene
15-08-2007, 03:52:37
Hola compañeros del foro tengo este problemita estoy seguro que es algo sencillo, sucede lo siguiente, tengo un form MdiChild donde hay mucho edits y etcs. conectado a un ADOquery todo bien, pero cuando intento abrir el form via button me sale un error. este es el codigo:

procedure Tincio.BitBtn1Click(Sender: TObject);
begin
FPedido:=TFPedido.Create(self);
FPedido.Show;
FPedido.DataSource1.DataSet.Append; <---Aqui me envia el error
FPedido.titulo.Caption := 'Recibir Pedido';
end;


el error es el siguiente:

Project Sigesped.exe raised exception class EAccessViolation with message 'Access Violation at address 0048963E in module 'Sigesped.exe'. Read of Address 0000000'. Porcess Stopped. Use Step or Run to continue.hay algo que he hecho mal o es que tratandose de Forms mdi hay otra forma? estoy utilizando ADO todo esta conectado a traves de un datasource y un Adoquery..

Saludos

egostar
15-08-2007, 04:00:09
Si lo que quieres es agregar un registro a tu tabla, esta debería estar abierta antes de hacer el append

Algo así


Table1.Open;
Table1.Append


Salud OS.

Al González
15-08-2007, 05:08:17
¡Hola a todos!

Enecumene:

Una causa muy común de los errores AV (excepciones Access Violation), es el intentar acceder a una referencia de objeto inválida. Observando tu código, puede presumirse que uno de estos tres objetos (ya) no es válido en el momento de la llamada al método Append:

FPedido, FPedido.DataSource1 o FPedido.DataSource1.DataSet

Esta invalidez puede consistir en que el elemento en cuestión tiene un valor vacío (Nil al tratarse de objetos) o el objeto al cual apuntaba ha dejado de vivir (fue previamente destruido y liberada su memoria aunque todavía sigue ahí su esqueleto). Considerando que los conjuntos y fuentes de datos (datasets y data sources) suelen integrar a varios otros objetos, el objeto invalidado podría estar en cualquier parte que se relacione con DataSource1 o DataSource1.DataSet.

Pero a juzgar por el texto "Read of Address 0000000" contenido en el mensaje de la excepción (Nil es la dirección de memoria 0), y dado lo común de la pifia, lo más probable es que olvidaste asignar un DataSet a tu componente DataSource1. :p

Pero lo que me resulta bastante extraño, es que el mensaje de la excepción contenga sólo siete ceros en donde dice 'Read of Address 0000000', cuando lo usual es que sean ocho, además de que algunas letras aparecen con un tamaño distinto al acostumbrado. ¿Será que transcribiste a mano el mensaje? :eek: En Delphi (la buena Borland sí piensa en los programadores) existe la posibilidad de presionar Ctrl+C en las ventanas de error, lo cual copia el mensaje íntegro al portapapeles. ;)

Esperamos tus observaciones, no dejes de contarnos.

Un abrazo accesible.

Al González. :)

enecumene
15-08-2007, 20:40:47
Saludos Al Gonzalez, Gracias por tu respuesta, sabes? el error todavia me persiste, pues todos los datasource y dataset estan bien conectados pero aun sigue el mismo problema:

---------------------------
Debugger Exception Notification
---------------------------
Project Sigesped.exe raised exception class EAccessViolation with message 'Access violation at address 004BC154 in module 'Sigesped.exe'. Read of address 00000310'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

el codigo la tengo asi:

procedure Tincio.BitBtn1Click(Sender: TObject);
begin
FPedido:=TFPedido.Create(self);
FPedido.Show;
FConsPed.TbPedido.Append; <--- Me Sombrea Aqui
FPedido.titulo.Caption := 'Recibir Pedido';
end;

es posible que como tengo el dataset en otro form sea la causa del error del Append o tal vez de la base de datos?

Saludos..

egostar
15-08-2007, 21:03:14
Bueno, ya te había comentado en mi primer participación que debes de tener abierta la tabla para que puesas hacer el append,

Trata con esto:


procedure Tincio.BitBtn1Click(Sender: TObject);
begin
FPedido:=TFPedido.Create(self);
FPedido.Show;
FConsPed.TbPedido.Open; <--- Antes del Append deberias tener esto
FConsPed.TbPedido.Append;
FPedido.titulo.Caption := 'Recibir Pedido';
end;


Salud OS.

roman
15-08-2007, 21:06:24
En Delphi (la buena Borland sí piensa en los programadores) existe la posibilidad de presionar Ctrl+C en las ventanas de error, lo cual copia el mensaje íntegro al portapapeles. ;)


:eek: ¡Caramba! Primera vez que me entero de esto :eek:

Ahora que lo sé, me he puesto a jugar y veo que no es obra de Borland, a menos que el NotePad esté programado con herramientas de Borland:


---------------------------
Bloc de notas
---------------------------
El texto en el archivo Sin título ha cambiado.

¿Desea guardar los cambios?
---------------------------
Sí No Cancelar
---------------------------


En cualquier caso, muchas gracias, es un tip para no olvidar :)

// Saludos

maeyanes
15-08-2007, 21:06:59
Otra causa podría ser que el Form donde se encuentra el DataSet ya haya sido destruido o no esté creado al momento de hacer la referencia.


Saludos...

enecumene
15-08-2007, 21:18:56
bueno cambie el dataset al form actual:

egostar

hice lo que me dijiste le inclui el tabla.open todo bien pero ahora me sale este otro error que me habia pasado anteriormente pero ahora no me acuerdo cual era la causa:

---------------------------
Debugger Exception Notification
---------------------------
Project Sigesped.exe raised exception class EConvertError with message ''' is not a valid date and time'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

:confused::confused::confused: si todos los campos de fecha tiene su respectiva propiedad de date/time en la base de datos.

enecumene
15-08-2007, 21:59:34
Bueno ya resolvi todo mi problema al ultimo caso era a causa de los DBTimePicker al parecer no me permite hacer append porque me salia este error:

---------------------------
Debugger Exception Notification
---------------------------
Project Sigesped.exe raised exception class EConvertError with message ''' is not a valid date and time'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

los cambie por DBEdits y me hubiese gustado usar los DBTimePickers. bueno mientras tanto me tendre que conformar con los DBEDits. les agradezcos a todos por tomarse un tiempo en ayudarme a resolver ete problemita. Gracias a todos!!!.

Saludos.