Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-05-2003
ramiretor ramiretor is offline
Miembro
 
Registrado: may 2003
Ubicación: México
Posts: 196
Poder: 21
ramiretor Va por buen camino
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
__________________
Ernesto R.
Responder Con Cita
  #2  
Antiguo 23-05-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
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.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #3  
Antiguo 23-05-2003
ramiretor ramiretor is offline
Miembro
 
Registrado: may 2003
Ubicación: México
Posts: 196
Poder: 21
ramiretor Va por buen camino
Muchas gracias Marc. Así si funciona

Salu2 y un abrazo
__________________
Ernesto R.
Responder Con Cita
  #4  
Antiguo 01-07-2005
Mariana Mariana is offline
Miembro
 
Registrado: sep 2003
Posts: 50
Poder: 21
Mariana Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 08-02-2006
supermanpy supermanpy is offline
Miembro
 
Registrado: feb 2006
Posts: 11
Poder: 0
supermanpy Va por buen camino
Buenas Tardes Mariana, Tengo El Mismo Problema, Solucionaste El Inconveniente??? Me Podrias Dar La Solucion???
Responder Con Cita
  #6  
Antiguo 12-05-2006
Avatar de fredo
fredo fredo is offline
Miembro
 
Registrado: oct 2003
Ubicación: Chile, Valparaiso
Posts: 318
Poder: 21
fredo Va por buen camino
Question ¿papar que base de datos trabajan....?

solo tengo la solucion para MySQL....
si es asi me avisan...
__________________
^_^

http://stna.cl
Responder Con Cita
  #7  
Antiguo 15-08-2008
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
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.
Responder Con Cita
  #8  
Antiguo 16-08-2008
Gabriel Gabriel is offline
Miembro
 
Registrado: may 2003
Ubicación: PalauTordera
Posts: 115
Poder: 21
Gabriel Va por buen camino
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
__________________
Gabriel
Responder Con Cita
  #9  
Antiguo 19-08-2008
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
ok

Funcionó, Gracias Gabriel.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 01:36:46.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi