PDA

Ver la Versión Completa : dbexpress


Grupo ISoftware
21-11-2003, 02:34:30
Hola, ya he trabajado dos años con los ibx de D5 y D6 con IB5 y con IB6, ahora quiero trabajar con D6 o D7 y FB1.5, quiero acceder a los datos con dbexpress, mi duda es la siguiente, yo antes tenia un monton de IBDatasets en el modulo de datos conectados a un IBDatabase con un IBTransaction, ahora, que hago??

sospecho que deberia reemplazar el IBDatabase con el SQLConection, los IBDataset con un SQLDataset, la diferencia que veo de estos ultimos es que uno es unidireccional (el SQLDataset) y el otro no, hasta ahi se (o creo), que voy bien.

Despues como conecto los datos con los formularios, me dije, entonces puse un datasetprovider para conectar el ClientDataset con el SQLDataset, todo en el modulo de datos, con lo que ahora tendria un SQLDATASET UN DATASETPROVIDER Y UN CLIENTDATASET POR CADA IBDATASET, esto esta bien o es una locura?, los DatasetProvider y los ClientDataset donde van?, en cada formulario?? (ejemplo cada padron) o esta bien en el modulo de datos?, las transacciones son locales de cada formulario o va una sola en el modulo de datos? que es mas recomendable?, y por ultimo, y esto ya hilando muy fino, cuando el ClientDataset trae los datos a memoria, los trae todos o solo los que estoy viendo???

ahh, me olvidaba, los campos de los SQLDataset se deben agregar con el menu contextual??, o esto se debe hacer en el ClientDataset??, o en los dos??, en cual primero??, se que con muchas preguntas pero un poquito cada uno no le hace mal a ninguno

desdee ya muchas gracias

Humberto Pertuz
22-11-2003, 17:46:25
lo que tienes que hacer con eso es lo siguiente.

1. creas el slqconexion
2. creas los sqltable
3. los dataprovider

esto va en un modulo server. (otra aplicacion es un servicio)

despues en el cliente creas un datamodulo donde tendras todos los cliendataset

1. creas un conexion soat
2. conectas los clientdataset

y tienes un aplicacion netamente cliente servidor.

guillotmarc
22-11-2003, 18:52:21
Hola.

Si tienes problemas con dbExpress, utiliza el driver de Upscene en lugar del de Borland. (Es específico para Firebird, en cambio Borland no tiene ningún interés en que su driver sea compatible con Firebird, por lo que es muy probable que no soporte las nuevas caracteristicas).

http://www.upscene.com/dbx_fb/dbx_fb.htm

Respecto a los componentes. Es correcto lo que imaginas. Tienes que sustituir el IBDatabase por un SQLConnection, y cada IBDataset por la tripleta : SQLQuery + DatasetProvider + ClientDataset.

Respecto a ponerlos en el datamodule o en el formulario, puedes seguir la misma política que hacias con los IBDatasets. (Aunque si tenias los IBDatasets en los formularios, podrias poner los DatasetsProvidres y SQLQuerys en el datamodule, y dejar unicamente los Clientdatasets en los formularios).

Las transacciones son implicitas. Cuando abres un clientdataset, el DatasetProvider correspondiente hace la solicitud al SQLQuery, este abre una transacción, recoge todos los datos y los pasa al clientdataset, y cierra automaticamente la transacción. De la misma forma, cuando guardes los cambios del ClientDataset, este los pasará al DatasetProvider que los enviará directamente a la SQLConnection, esta abrirá una transacción y ejecutará directamente las sentencias INSERT y UPDATE para realizar los cambios solicitudas, cerrando a continuación la transacción.

Por lo que nunca se mantendrán transacciones abiertas. Si quieres tener una transacción abierta, lo tienes que hacer manualmente con un BeginTrans sobre el SQLConnection (aunque normalmente no es necesario usarlas demasiado).

Sobre los datos que se cargan al abrir un clientdataset, como se deduce de lo explicado anteriormente, el SQLQuery carga todos los datos en el ClientDataset (y no unicamente los que se van a ver en la grid actual).

Finalmente, los campos persistentes se tienen que agregar, y primero se hace en el SQLQuery y después en el ClientDataset.

NOTA : Si necesitas unos datos para mostrarlos en una grid, hacer un informe, .... pero no vas a modificarlos, puedes usar un SQLClientDataset (en Delphi 6) o SimpleDataset (en Delphi7). Que es un componente que integra a los 3 habituales : SQLQuery + DatasetProvider + ClientDataset. (Esto no es recomendable si vas a modificar los datos, debido a varias razones, entre ellas que no puedes especificar los campos de clave primaria, por lo que será dificil que se generen correctamente las sentencias UPDATE para actualizar cambios).

NOTA : Respecto a lo que te han comentado, es para realizar una aplicación de 3 niveles, con un servidor de aplicaciones corriendo en un ordenador separado. El cual contiene los SQLQuerys y DatasetsProviders. En la aplicación cliente, solo necesitas los ClientDatasets, que se conectan a los otros dos en el datamodule remoto. Las unicas correcciones a lo que te han dicho, es que mejor utiliza un SQLQuery, y las conexiones SOAT no existen, así que imagino que debe referirse a SOAP. Personalmente nunca utilizo aplicaciones de 3 capas, pero ciertamente es una buena idea si la aplicación tiene que soportar muchos clientes.

Saludos.