Ir al contenido


Foto

[RESUELTO] Ayuda sobre ibDataset y uso


  • Por favor identifícate para responder
17 respuestas en este tema

#1 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 15 enero 2010 - 02:20

Hola compañeros, os solicito ayuda sobre el uso de un ibdataset, e leido varios enlaces, algún documento y de mas, pero no logro que me funcione el sistema, el problema es que para ver no tengo problema, pero al intertar insertar, modificar, borrar, etc me da fallos, estoy usando Delphi 2010 y windows vista y windows 7, el error que más me suele dar es Staroverflow (o parecido). Las Sql estan rellenadas con el generate del Editor del Ibdataset. Si teneis una demos con explicaciones, manual que me pueda ayudar se agradece.
  • 0

#2 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 15 enero 2010 - 07:15

Saludos.

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.
  • 0

#3 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 15 enero 2010 - 08:04

¿Stack Overflow? Posiblemente tu conexión a Firebird o Interbase está "fuera del aire" o la tienes mal definida. Como dice Rolphy, sólo les proporcionas el SQL y la conexión y funcionan casi por sí mismas.
  • 0

#4 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 15 enero 2010 - 09:59

Esta tarde termino de instalarlo en el equipo de casa y mañana os pongo la estructura y las sentencias Sql de las diferentes opciones, hará falta algún dato más.  GRACIAS
  • 0

#5 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

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.
  • 0

#6 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 17 enero 2010 - 03:46

Siento el retraso pero aqui expongo los datos  trabajao con firebird 2.0

Estructura de la BD.


delphi
  1. CREATE TABLE "LOTES SALIDAS" (
  2.     LOTE              CODIGO /* CODIGO = VARCHAR(20) NOT NULL */,
  3.     FECHA            DFECHA /* DFECHA = DATE */,
  4.     TIPO_DOCUMENTO    DVARCHAR40 /* DVARCHAR40 = VARCHAR(40) */,
  5.     NUMERO_DOCUMENTO  DVARCHAR12NIFCIF /* DVARCHAR12NIFCIF = VARCHAR(15) */,
  6.     CODIGO_PRODUCTO  CODIGO /* CODIGO = VARCHAR(20) NOT NULL */,
  7.     CANTIDAD          DCANTIDAD /* DCANTIDAD = INTEGER */
  8. );



Datos del IBdataset

DeleteSQL


delphi
  1. delete from LOTES_SALIDA
  2. where
  3.   LOTE = :OLD_LOTE



InsertSQL


delphi
  1. insert into LOTES_SALIDA
  2.   (CANTIDAD, CODIGO_PRODUCTO, FECHA, LOTE, NUMERO_DOCUMENTO, TIPO_DOCUMENTO)
  3. values
  4.   (:CANTIDAD, :CODIGO_PRODUCTO, :FECHA, :LOTE, :NUMERO_DOCUMENTO, :TIPO_DOCUMENTO)



ModifiSQL


delphi
  1. update LOTES_SALIDA
  2. set
  3.   CANTIDAD = :CANTIDAD,
  4.   CODIGO_PRODUCTO = :CODIGO_PRODUCTO,
  5.   FECHA = :FECHA,
  6.   LOTE = :LOTE,
  7.   NUMERO_DOCUMENTO = :NUMERO_DOCUMENTO,
  8.   TIPO_DOCUMENTO = :TIPO_DOCUMENTO
  9. where
  10.   LOTE = :OLD_LOTE



RefreshSQL


delphi
  1. Select
  2.   LOTE,
  3.   FECHA,
  4.   TIPO_DOCUMENTO,
  5.   NUMERO_DOCUMENTO,
  6.   CODIGO_PRODUCTO,
  7.   CANTIDAD
  8. from LOTES_SALIDA
  9. where
  10.   LOTE = :LOTE




SelectSQL



delphi
  1. 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



  • 0

#7 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 17 enero 2010 - 08:31

Saludos.

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.
  • 0

#8 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 17 enero 2010 - 09:25

Al igual que Rolphy, me llama la atención que tengas Unidirectional en True, cuando el valor por omisión es false.

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.
  • 0

#9 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 18 enero 2010 - 07:25

Gracias por vuestros aportes, pero modificando el unidirectional sigue sin funcionar, el motivo de usar el Ibdataset, es  que no se aún como hacer las diferentes operaciones en código Sql, si podeis darme un ejemplo, con insert, edit, refresh y delete, os lo agradecería, tabien saber si el post, seguiria funcionando y si tendria que hacer muchos más cambios. Despues de tantos años, trabajando en tablas planas con agun querry para consultas y tables para operaciones normales, me resultaba practico el Ibdataset, ya que se supone que el hace las opercaciones, con muy poco trabajo, pero fuera de eso estoy perdido.

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.
  • 0

#10 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 18 enero 2010 - 08:10

Saludos.

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.
  • 0

#11 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 18 enero 2010 - 09:29

Como no Rolphy Reyes, el componente que uso es el IBTransaction1
En true estan activey allowAutoStart
AutoStocpAction en saNone
DefaultAction en TaCommit
idlerTimer 300000
y Params


delphi
  1. read_committed
  2. rec_version
  3. 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.
  • 0

#12 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 18 enero 2010 - 10:57

Pues si que es raro, acabo de hacer una prueba con un  IBDataSet y funciona sin problemas.

Utilicé los siguientes componentes:

- IBDataBase
- IBTransaction
- IBDataSet
- DataSource
- DBGrid
- DBNavigator

Se puede realizar el ABM sin problemas.

Salud OS
  • 0

#13 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 18 enero 2010 - 11:32

Horror tengo dos módulos del programa que me dan el mismo fallo, voy a tener que empezar otra vez estos módulos, he hecho una prueba como comenta Egostar y funciona, ya os contare, de todas maneras sigo solicitando si es posible con un ejemplo de uso simple sin el Ibdataset, como siempre gracias
  • 0

#14 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 18 enero 2010 - 01:14

A que te refieres con un ejemplo simple, lo mas simple es usar un IBTable, pero no es lo mas recomendable, la otra posible solución es usar un IBQuery con un IBUpdateSQL, pero para eso es mejor usar el IBDataSet.

Salud OS
  • 0

#15 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 19 enero 2010 - 01:56

Me refiero a las sentencias Sql necesarias para los diferentes opciones (insert, Delete, Edit, etc.), tener una estructura básica de como se tendria que hacer.
  • 0

#16 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 19 enero 2010 - 07:50

Saludos.

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!
  • 0

#17 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 19 enero 2010 - 09:08

Gracias Rolphy Reyes, por lo que entiendo de tu comentario las mismas sentencias que crea el Ibdtatset, valen para sentencias Sql y uso digamos, manual. De todas maneras, he encontrado los errores que no me dejaban funcionar el Ibdtaset, uno no tiene que ver pero lo expongo por si le pasa a alguíen  más.

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.



  • 0

#18 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 19 enero 2010 - 09:13

Saludos.

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.
  • 0




IP.Board spam blocked by CleanTalk.