PDA

Ver la Versión Completa : Query con dbexpress


ramiretor
23-05-2003, 17:13:47
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:)

guillotmarc
23-05-2003, 17:32:13
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.

ramiretor
23-05-2003, 17:45:58
Muchas gracias Marc. Así si funciona

Salu2 y un abrazo
:)

Mariana
01-07-2005, 17:32:14
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.

supermanpy
08-02-2006, 22:13:13
Buenas Tardes Mariana, Tengo El Mismo Problema, Solucionaste El Inconveniente??? Me Podrias Dar La Solucion???

fredo
12-05-2006, 15:31:13
solo tengo la solucion para MySQL....
si es asi me avisan...

Carmelo Cash
15-08-2008, 20:06:37
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.

Gabriel
16-08-2008, 10:31:34
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

Carmelo Cash
19-08-2008, 14:10:37
Funcionó, Gracias Gabriel.