![]() |
Query con dbexpress
Hola foro:
Fijense que tengo un problema. Uso Delphi 7 y me conecto a Oracle 8 con DbExpress. Tengo la SQLConection y todo va bien. Pongo un SQLQuery y activo la consulta, hasta ahi todo va bien. Pongo un DAtaSource y lo conecto al SQLQuery, todo bien.Por último pongo un DBGrid para visualizar los registros cargados con el Query, pero al poner la proppiedad DataSource me indica 'Operation not allowed on an unidirectional dataset'. Alguien me puede ayudar ? Gracias y un saludo:) |
Hola.
Eso es debido al propio diseño de dbExpress. Se trata de unos drivers ligeros, que unicamente proporcionan cursores unidireccionales de solo lectura. Es decir que no puedes modificiar los registros obtenidos con un TSQLQuery (con Edit y Post), ni moverte hacia atrás (Prior), solo puedes consultar y moverte hacia adelante. Como en una grid se debe poder mover hacia arriba y abajo, se necesita un cursor bidireccional. La solución es utilizar ClientDataSets (dbExpress se ha diseñado para ser los componentes mínimos imprescindibles para proporcionar datos a un ClientDataSet). Añade un TDataSetProvider al formulario, y enlazalo al TSQLQuery. Ahora añade un TClientDataSet y enlazalo al TDatasetProvider. Ahora tienes disponible (en el ClientDataSet) un cursor bidireccional de lectura/escritura. Solo tienes que modificar tu TDataSource para enlazarlo con el TClientDataSet, de forma que sea éste el que proporcione el DataSet a la Grid. NOTA : Tienes que modificar el código, de forma que todas las operaciones se hagan sobre el TClientDataSet (el Open, las modificacines, ....). El TSQLQuery solo está allí para que el TClientDataSet sepa como recoger los datos de la consulta, pero no se tiene que tocar para nada (es el propio ClientDataSet el que lo utilizará, via el DataSetProvider). Saludos. |
Muchas gracias Marc. Así si funciona
Salu2 y un abrazo :) |
Dbexpress y oracle
Etaba buscando en los foros y tengo un problema muy parecido a este hice el cambio de componentes que se segiere en una de las respuestas, pero mi problema es que no puedo agregar registros a la BD, alguien me puede indicar como se hace?, tengo un append sobre la componentes clientdataset, {cargo los datos de los campos}, luego hago un post, y luego un applyupdates(0) es en este momento donde me da un error "invalid number".
Bueno agradezco la ayuda que me puedan dar. |
Buenas Tardes Mariana, Tengo El Mismo Problema, Solucionaste El Inconveniente??? Me Podrias Dar La Solucion???
|
¿papar que base de datos trabajan....?
solo tengo la solucion para MySQL....
si es asi me avisan... |
Hola Foro:
Este tema es muy viejo. Pero tengo este problema y no lo puedo solucionar, Estoy usando Delphi 6, MS SQL Server 2005 y tengo que usar DBExpress. Ya me conecté a la Base de Datos y tengo acceso a las tabla. Puedo ver los registros para adelante. Ahora Necesito conectar un DBGrid. El problema que tengo es que no puedo conectar el SQLClientDateset con el DatasetProvider Me queda así. SQLConnection>>TSQLQuery>>DatasetProvider/../SQLClientDataset>>DataSouse>>DBGrid. Espero que se entienda el ejemplo. Desde ya Gracias por todo. |
Hola
Quita el SQLClientDataSet i pon un ClientDataSet (a secas) de la paleta de DataAcces, la propiedad del Cliendataset ProviderName , lo pones apuntando al DataSetProvider y listo Salut |
ok
Funcionó, Gracias Gabriel.
|
La franja horaria es GMT +2. Ahora son las 03:55:21. |
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