[RESUELTO] Ayuda sobre ibDataset y uso
#1
Escrito 15 enero 2010 - 02:20
#2
Escrito 15 enero 2010 - 07:15
No estaría mal si nos muestras las sentencias SQL's que tienes generadas y la estructura de la tabla en cuestión.
Porque el uso de los DataSet en general no tiene mucha ciencia solo se rellena las sentencias y listo, el anda solo.
#3
Escrito 15 enero 2010 - 08:04
#4
Escrito 15 enero 2010 - 09:59
#5
Escrito 15 enero 2010 - 10:08
Esta tarde termino de instalarlo...
Te sugiero que en lugar del IBDataSet (en caso que desees probar un camino diferente) uses un IBSQL. Te da el mismo servicio, es más ligerito pero no tiene todas las prestaciones de un DataSet.
#6
Escrito 17 enero 2010 - 03:46
Estructura de la BD.
CREATE TABLE "LOTES SALIDAS" ( LOTE CODIGO /* CODIGO = VARCHAR(20) NOT NULL */, FECHA DFECHA /* DFECHA = DATE */, TIPO_DOCUMENTO DVARCHAR40 /* DVARCHAR40 = VARCHAR(40) */, NUMERO_DOCUMENTO DVARCHAR12NIFCIF /* DVARCHAR12NIFCIF = VARCHAR(15) */, CODIGO_PRODUCTO CODIGO /* CODIGO = VARCHAR(20) NOT NULL */, CANTIDAD DCANTIDAD /* DCANTIDAD = INTEGER */ );
Datos del IBdataset
DeleteSQL
delete from LOTES_SALIDA where LOTE = :OLD_LOTE
InsertSQL
insert into LOTES_SALIDA (CANTIDAD, CODIGO_PRODUCTO, FECHA, LOTE, NUMERO_DOCUMENTO, TIPO_DOCUMENTO) values (:CANTIDAD, :CODIGO_PRODUCTO, :FECHA, :LOTE, :NUMERO_DOCUMENTO, :TIPO_DOCUMENTO)
ModifiSQL
update LOTES_SALIDA set CANTIDAD = :CANTIDAD, CODIGO_PRODUCTO = :CODIGO_PRODUCTO, FECHA = :FECHA, LOTE = :LOTE, NUMERO_DOCUMENTO = :NUMERO_DOCUMENTO, TIPO_DOCUMENTO = :TIPO_DOCUMENTO where LOTE = :OLD_LOTE
RefreshSQL
Select LOTE, FECHA, TIPO_DOCUMENTO, NUMERO_DOCUMENTO, CODIGO_PRODUCTO, CANTIDAD from LOTES_SALIDA where LOTE = :LOTE
SelectSQL
select * from LOTES_SALIDA
Los demás parámetros son:
AutoCalcFields True
BufferChuncks 10000
ForcedRefresh True
ParamCheck True
UniDirectional True
Database Ibdtabase1
Transaction Ibtransaction1
Los demas en false
Gracias por vuestra ayuda
#7
Escrito 17 enero 2010 - 08:31
Me llama mucho la atención que tengas este DataSet con la propiedad UniDirectional a True. Si muestras estos datos en un Grid debería de mandarte un error al tratar de navegar entre registros anteriores una vez hallas movido el cursor.
Por lo demás, tus sentencias se ven correctas ahora bien esta el asunto de las transacciones, si no te da error al insertar, modificar o eliminar entonces quiere decir que posiblemente el problema ande por el manejo de las transacciones.
Verifica y muéstranos.
#8
Escrito 17 enero 2010 - 09:25
Dos preguntas: ¿La conexión funciona, no te manda errores al conectarse? ¿Es necesario que uses un IBDataSet?
Con la segunda pregunta me refiero a que si es la única alternativa que has probado.
#9
Escrito 18 enero 2010 - 07:25
No no da errores al conectarse, me muestra en un dbgrid los datos que necesito, pero no me deja hacer operaciones.
Muchas gracias por vuestra ayuda como siempre.
#10
Escrito 18 enero 2010 - 08:10
Como bien dices Desart el paso al DataSet es más simple si se viene de utilizar TTable y de hecho ese componente es que utilizo habitualmente.
Al DataSet solo se le debe de configurar sus sentencias SQLs y listo funciona igual que un TTable, con esto respondo a tu pregunta si el Post continua igual. Las sentencias SQLs que mostraste en tu hilo anterior están bien y esas deben de funcionar a plenitud dejándote realizar las actividades rutinarias sin problema alguno.
Me parece, si no te muestra error al momento llamar la sentencia TuDataSet.Insert o TuDataSet.Edit que tu problema anda por el manejo de las Transacciones. Podrías decirnos como tienes configurado el componente IbTransaction.
Después de verlo y continuas con problemas con gusto haremos un ejemplo para ti.
#11
Escrito 18 enero 2010 - 09:29
En true estan activey allowAutoStart
AutoStocpAction en saNone
DefaultAction en TaCommit
idlerTimer 300000
y Params
read_committed rec_version nowait
Lo que me esta pasando ahora, es que me da un nuevo error al compilar que es
"Database not Assigned"
Muchas gracias por vuestra ayuda, de todas maneras, me gustaría que funcionase con el Ibdtaset pero me gustaría también como hacerlo directamente, si no es mucho pedir.
#12
Escrito 18 enero 2010 - 10:57
Utilicé los siguientes componentes:
- IBDataBase
- IBTransaction
- IBDataSet
- DataSource
- DBGrid
- DBNavigator
Se puede realizar el ABM sin problemas.
Salud OS
#13
Escrito 18 enero 2010 - 11:32
#14
Escrito 18 enero 2010 - 01:14
Salud OS
#15
Escrito 19 enero 2010 - 01:56
#16
Escrito 19 enero 2010 - 07:50
Desart no necesitas un ejemplo de nosotros el mismo IbDataSet te genera las sentencias, en tu tabla que vas a realizar las operaciones solo debes tener una clave primaria y listo.
Osea con solo poner la sentencia Select que necesites y luego darle al botón de Generar sentencias el componente hace el trabajo por ti.
Espero haber sido claro!
#17
Escrito 19 enero 2010 - 09:08
el error "Database not Assigned", se debía a que asignaba active a true de un IBQuerry en el OnCreate del Form, en vez de en el OnActive, se cambio y desapareció el problema .
El Segundo error era el que no me dejaba actuar el Ibdataset el de "Stack Overflow", no tenia nada que ver con el Ibdataset, lo que ocurría era que en el evento OnChange de Datasource, tenía un bucle que no me dejaba avanzar, eliminado y sin problemas.
Gracias como siempre por vuestra inestimable ayuda, y lamento haber dado tanto la lata.
#18
Escrito 19 enero 2010 - 09:13
Desart, por eso nuestra insistencia en que el DataSet por sí solo funciona una vez se le asignan las sentencias requeridas; en mi próximo comentario iba dirigido a que revisaras en tu entorno el código que habías desarrollado puesto que no era concebible el hecho de que un DataSet diera problemas así no más.
Es bueno saber que pudiste resolver, de paso cambio el estatus del hilo a Resuelto.