![]() |
UIB Components
Hola a todos
Hace poco instale los UIB Components y todo funcion Ok. :confused: La duda que tengo es como se comportan estos componentes en una aplicacion real. Hasta ahora siempre use los IBX, pero quiero despegarme de estos. Saludos TJOSE |
Acerca de los UIB Componentes no los he instalado, sin embargo instale el DRIVER para DBEXPRESS y te puedo decir que no me convencio a primera vista, ya Ejecutas un EXECSQL y no te lo refleja en la base hasta que cierras el SQLDATASET, y lo intente implementando transacciones y no obtuve un resultado favorable. :(
|
Hola.
No acabo de entender el problema que comentas. No se puede ejecutar un ExecSQL sobre un Dataset. Si tienes otro Dataset, no verás los resultados ocasionados por el ExecSQL hasta que no lo vuelvas a cargar. Esto es normal en todos los datasets en caché. Si no me equivoco no has encontrado un problema del driver dbExpress de UIB, sinó que no te has adaptado a la peculiar filosofia de trabajo de los componentes dbExpress. Saludos. |
guillotmarc
usando el driver que trae pordefecto dbexpress para interbase tu haces un EXECSQL y lo ves reflejado en la base de datos, si tu cambias el driver por el de UIB no lo hace. |
Hola.
Ya me parecía que no entendí bien el problema. ¿ A que te refieres con cerrar el SQLDataset ?, no puede estar abierto para poder hacer un ExecSQL, ¿ Te refieres a que hay que cerrar el SQLConnection ?. Tiene todo el aspecto de ser simplemente el nivel de aíslamiento de transacciones al que se configura por defecto la conexión (y no un bug). El driver de Borland lo configura a ReadCommited, en cambio el driver de UIB lo debe configurar a un nivel superior. Revisa ese parámetro. En el driver de Borland se llama Interbase TransIsolation. Saludos. |
Ayer mismo estube probando los UIB, a primera vista tiene buena performance en las querys. También probé los drivers para DBExpress y a simple vista presentaron un buen funcionamiento, claro que lleva su configuración.
Algo también interesante es la forma de creación de consultas, utiliza un control (creo que es synedit) al mejor estilo de IBExpert, realmente simplifica bastante la tarea. El principal problema que encontré es que los dataset que ofrece son unicamente de lectura :( no si si es porque no pude configurarlos bien o por la versión que utilizo. |
Gracias guillotmarc por tu interes :p ,
Cita:
Cita:
Hice un sencillo ejemplo para que vean de lo que estoy hablando, creo que ya viendo el comportamiento con un ejemplo sera mas facil entender lo que trato de decir, y si alguien da alguna explicacion o otro punto de vista sera bien recibida. Para correr los archivos deben estar instalado los dos drivers de DBExpress - el de UIB y el Default para Interbase-, ademas uso el Employee.gdb que viene con delphi asi que pueden bajarlo o usar el que tengan, solo tiene que estar en el mismo directorio de esta aplicacion. Entre los archivos viene un Readme.txt que explica como usarlos para ver la situacion que comento. Binarios Source code Employee.gdb |
Hola.
Tienes razón, no se cual puede ser exactamente el problema. Si cambias el código del update para la utilización explícita de una transacción definida manualmente al nivel de ReadCommited, funciona bien : Código:
procedure TForm1.btUIBClick(Sender: TObject); Saludos. |
Hola, gracias por responder. Al final decidi crear la aplicacion utilizando DBX en lugar de componentes de acceso nativo a FB/IB.
Ya que el hilo se desvió hacia transacciones en DBX y si el moderador considera que podemos seguir en este hilo o bien se podria abrir otro. Alguien sabe como realizar una transaccion distribuida? No tuve la necesidad de realizar esto, pero probando con los IBX lo podia lograr, y quisiera saber si es posible con los DBX. (Con los IBX, a un objeto transaccion le agregaba objetos base de datos, y ejecutaba sentencias SQL contra diferentes las bases dentro de una misma transaccion). Saludos a todos TJOSE |
Hasta donde yo se, no se puede hacer una transacción que implique dos objetos SQLConnection. Este es el problema de usar controles genéricos (dbExpress), que no se pueden usar algunas de las características avanzadas de cada base de datos (eventos del servidor, ...).
Respecto al problema comentado por hecjona, referente al Isolation Level de la transacción, informé al autor de los componentes sobre dicho problema. El autor ya ha actualizado el driver, pero el problema persiste. Vista la celeridad con la que ha actualizado el driver, no creo que tarde mucho en solventarlo. http://www.progdigy.com/boards/index...ST&f=4&t=1464& Saludos. |
Hola,
Cita:
Saludos. Nota: no moví el hilo a "Conexión con bases de datos" (ya que allí se tratan, en general, los temas de componentes de acceso) debido a que tocaba temas demasiado específicos de InterBase. Si abres un hilo nuevo sobre asuntos genéricos de DBX mejor que sea en aquel foro. |
Hola Gydba.
Si te refieres a los datasets obtenidos mediante dbExpress, efectivamente siempre són de solo lectura. Además de no permitir la navegación, són de solo avance, es decir se puede ir al siguiente registro pero nunca al anterior. Por lo que no se puede conectar un dataset obtenido mediante dbExpress a una grid. Esta es la forma como se ha diseñado esta tecnología. Para poder modificar un dataset, u obtener un cursor navegable, tienes que enlazar tu SQLQuery a un ClientDataset mediante un DatasetProvider. El ClientDataset si que permite la modificación y navegación por el dataset. Saludos. |
Gracias guillotmarc, siempre muy completo lo tuyo.
Pero yo me refería a los UIB que traen un componente Dataset propio, pero aparentemente es de solo lectura: Cita:
Por otra parte conozco dbExpress y es una buena alternativa, pero por el momento prefiero componentes nativos en Firebird. Gracias de todas formas |
La franja horaria es GMT +2. Ahora son las 01:59:55. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi