Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Error al insertar o borrar registros en firebird (https://www.clubdelphi.com/foros/showthread.php?t=25510)

pepitu 25-09-2005 11:31:48

Error al insertar o borrar registros en firebird
 
Hola a todos.
Hace muy poco que estoy tanto en Delphi como en Firebird y no encuentro la causa de que no se inserten o borren registros en una tabla firebird.
Intentaré explicarme al máximo. Cualquier otro dato que requieran sólo tienen que pedírmelo.

Hice la base de datos con IBExpert con una clave principal llamada ID que tiene un Generador (autoincrementa) y un Trigger que lo dispara. Debido a ésto, quito este campo de la sentencia SQL del DataSet, es decir,en la propiedad InsertSQL del IBDataSet pongo sólo los demás campos:
INSERT INTO FACTUCOMP
(TITULAR, NUMFAC, FECHA, PROVEEDOR, TOTAL)
VALUES(:TITULAR, :NUMFAC, :FECHA, :PROVEEDOR, :TOTAL)

En la propiedad DeleteSQL del IBDataSet pongo:
DELETE FROM FACTUCOMP
WHERE ID=:OLD_ID

Consideraciones iniciales:
-Tengo un IBDataBase, un IBTransaction, un IBDataSet y un DataSource (sólo para un grid). Todo en un DataModule. Todos "activos" y parece que bien conectados.
-La propiedad ForcedRefresh del IBDataSet está en True


En la aplicación, la configuración que he usado es la siguiente:
1.- En los eventos AfterPost y AfterDelete del IBDataSet coloqué un CommitRetaining.

2.-En el botón de "Añadir registro" pongo:
DM_FC.IBDataSetFC.Edit;
DM_FC.IBDataSetFC.InsertSQL;

3.-En el botón de "Borrar registro" pongo:
DM_FC.IBDataSetFC.Edit;
DM_FC.IBDataSetFC.DeleteSQL;

4.-Pongo un botón para grabar los resultados con:
DM_FC.IBDataSetFC.post;

5.-Por si acaso, pongo otro botón para cancelar la inserción de un registro (si fuese el caso) con:
DM_FC.IBDataSetFC.Open;
DM_FC.IBTransactionFC.RollbackRetaining;

PROBLEMAS
A.-Al hacer clic en botón "Añadir registro"....no observo que se añada ningún registro nuevo.
Desde el IBExpert puedo añadir sin problemas.
B.-Al hacer clic en botón "Borrar registro"...no se borra ningun registro y sale un mensaje del tipo : "Access violation...."
C.-Me pregunto si uso bien ese RollbackRetaining del punto 5.
D.-Quiero que cuando se muestre un registro...se realicen una serie de cálculos (de sus campos) cuyos resultados se muestren en unos DBEdits. Para ello, supongo que tengo que añadir New Fields al IBDataSet (que se conectarán mediante el DataSource a los distintos DBEdits)y poner las "fórmulas" en el evento OnCalcFields..... No???
Puedo hacerlo de otra forma?
E.-Necesitaría más manuales en castellano sobre Firebird, aparte de los disponibles en http://www.firebird.com.mx/modules/mydownloads/
. Existen??

Agradezco opiniones de todo tipo.
Un saludo.

vtdeleon 25-09-2005 22:25:18

Saludos

Cita:

A.-Al hacer clic en botón "Añadir registro"....no observo que se añada ningún registro nuevo.
Desde el IBExpert puedo añadir sin problemas.
B.-Al hacer clic en botón "Borrar registro"...no se borra ningun registro y sale un mensaje del tipo : "Access violation...."
InsertSql no es un método, en sí no hace ninguna acción. Al utilizar Insertsql habilitas el dataset a usar el método Insert o Append. Si usas DeleteSql habilitas el método Delete,... y asi sucesivamente.

Cita:

D.-Quiero que cuando se muestre un registro...se realicen una serie de cálculos (de sus campos) cuyos resultados se muestren en unos DBEdits. Para ello, supongo que tengo que añadir New Fields al IBDataSet (que se conectarán mediante el DataSource a los distintos DBEdits)y poner las "fórmulas" en el evento OnCalcFields..... No???
Puedo hacerlo de otra forma?
Sí, un campo calculado.

Cita:

E.-Necesitaría más manuales en castellano sobre Firebird, aparte de los disponibles en http://www.firebird.com.mx/modules/mydownloads/
. Existen??
Uufff, por montones, haz una búsqueda por aquí, y en google;P
Suerte

pepitu 26-09-2005 09:28:18

Gracias...iremos probando....
 
Vtdeleon...gracias por la respuesta. Me has aclarado mucho con lo de que InsertSQL, etc....no son métodos directamente. Me solucionastes ese apartado ;)

Con lo de los manuales ya realicé búsquedas (quizás malas) y realmente encontré algunos pero no se explayan demasiado.

Quizás una mejor solución para los que recién empezamos sería disponer de algun pequeño ejemplo con el que poder ver 'in situ' el funcionamiento de los Insert, campos calculados, etc.... Voy a buscar...

Mil gracias por tus orientaciones.
Un saludo.

rastafarey 26-09-2005 14:56:57

Resp
 
Mira no veo el motivo para que llamr directamente a inser o apen o delete o x por que simplememte no miras la paleta standard y usas el componete taction y a lo botones los relacionas con una accion y listo y te evitas tanto rollo y codigo.

Recuerden que lo que esta echo no s evuelve hacer ok.


La franja horaria es GMT +2. Ahora son las 02:42:53.

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