PDA

Ver la Versión Completa : Información sobre IBClienDataset


mosorio
21-05-2003, 09:11:46
Hola,
Tengo D6, estoy haciendo un aplicativo utilizando DM y DBExpress, los conecto de la forma que aparece en los manuales y como siempre lo he hecho pero me esta dando problemas ya que tengo unas plantillas con un FDatasource como propiedad para manejar todas las transacciones en la plantilla y olvidarme de hacerlo constantemente para cada una de los modulos, pero el problema consiste en que al insertar un nuevo registro, en la pagina de los componentes siempre me aparece el registro anterior y no me deja o no graba la inf despues de hacer el post y en el evento afterpost le doy el applyupdate(0).
La plantilla consiste en un menu, toolbar, dos paginas una donde esta la grilla y la otra para editar los datos y las respectivas lineas para insertar, etc. es sencilla, de hecho el otro aplicativo que estaba haciendo me funcionaba perfectamente con esto y los cds, sqlconn, dsp, etc. para permitir el procesado de la info.

Pero ahora he hecho la prueba con el IBClientDataset, lo poco que he leido es que trae incorporado el dsp, qry, pero no se si sea optimo para la programación con el firebird si no hay problemas de velocidad, etc.
He perdido totalmente la conexion con el lenguaje y se que es mortal para retomar la programación, pero como dice el dicho "Lo bien aprendido nunca se olvida" solo que cuesta trabajo retomar lo que se ha hecho antes.

Solicito la ayuda de usd. para poder continuar con esto.

Gracias de antemano.

guillotmarc
21-05-2003, 11:15:37
Hola.

Te desaconsejo la utilización de IBClientDataSets, todos estos clientdatasets integrados (SQLClientDataSet, IBClientDataSet, BDEClientDataSet, ...) tienen ciertas deficiencias, y Borland no recomienda su utilización.

¿ Que error te da, con un query dbExpress y un ClientDataSet ?

Por cierto, si usas Firebird 1.5 RC2, seguramente tendrás problemas con el driver dbExpress de Borland. A mi me ha pasado que consultas que funcionaban, devuelven error. La solución pasa por utilizar un driver dbExpress específico para Firebird, como el de http://www.upscene.com

NOTA : La mala noticia es que los campos en coma flotante, en lugar de reconocerlos como TFMTBCDField los reconoce como TFloatField, por lo que hay que cambiar todos los campos persistentes de ese tipo. Aunque es un cambio inevitable, puesto que Delphi 7 también lo ha hecho, para hacer compatible los campos devueltos por el driver dbExpress de InterBase, con los de otras bases de datos.

Saludos.

mosorio
21-05-2003, 11:58:53
Hola,
Debido a esta información que me has dado en el otro hilo, que por cierto me había equivocado, he vuelto a la versión anterior de firebird 1.0.2, el error que me da con dbexpress es que no puede realizar una transaccion en un componente de una sola dirección, algo asi.
Los componente que tengo son:
SQLConnection, Comprobada la conexión con la BD, StoredProcedure, SQLQry de DBExpress, en el cual hago la sentencia SQL, ClientDataSet de los normalitos sin cambiar las propiedades, solo asignando las que son: providername.
La conexion la abro en el datamodulo, tambien los CDS

Al momento de salvar es cuando sale el error, siendo que hago el post en el boton de guardar y en el evento afterpost hago el applyupdate.
Ademas que cuando hago la inserción como dije anteriormente me deja los mismos datos del registro anterior.

Gracias por la ayuda

guillotmarc
21-05-2003, 12:20:57
Hola.

Mírate bien el mensaje de error. No creo que sea que no se puede abrir una transacción en un dataset unidireccional. Mas bien parece que tengas el error : No se puede actualizar un dataset unidireccional (o algo similar).

El tema de las transacciones en dbExpress se hace a nivel de la conexión, y cuando abres una conexión, se hace independientemente de las consultas que vayas a ejecutar posteriormente. Por eso dudo de que ese error esté relacionado con las transacciones.

Asegúrate que en el Provider no tengas activada la opción ResolveToDataSet que por defecto está desactivada. En este caso el ClientDataSet pasaría la modificación al SQLQuery, y como este es unidireccional y de solo lectura, saltaria un error de que no se puede actualizar.

Normalmente el error de que no se puede actualizar un dataset unidireccional, estaría porqué los cambios los haces sobre el SQLQuery, en lugar de sobre el ClientDataSet.

¿ Puedes indicarnos el mensaje de error exacto que te sale ?

Saludos.

mosorio
21-05-2003, 13:36:47
Hola,
Siiii, el error es el que indicas y claro que tienes razón, he cambiado la propiedad de que resuelva a través del dataset, es decir he colocado a true la propiedad de resolvetodataset en true. Cuando llegue a casa lo miro y sis todo va bien continuaré.

Gracias miles