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 Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-12-2005
Velia Velia is offline
Miembro
 
Registrado: oct 2005
Posts: 71
Poder: 19
Velia Va por buen camino
Problemas con la utilización de parametros en el clienDataset!!

Hoola a todos
Estoy trabajando con la tecnología DataSnap y Access como BD. Estoy utilizando ADODataSets en la capa de abajo y clientDataSets en la capa de arriba para visualizar los datos.
Mi problema es el siguiente:

Yo genero en tiempo de ejecución la consulta SQL que se irá formando a partir del tipo de búsqueda elejida por el usuario. Es decir formo una cadena con la sentencia SQL, la cual la asigno al ClientDataSet:

ClientDataSet.CommandText:= strCadenaSQL;

Y esta a su vez pasa a la capa de abajo la cuál la ejecuta.

previamente utilizo parametros para tomar los datos ingresados por los usuarios de esta forma:

clientdataset.Params[1].AsDate:=strtoDate(edit1_Fecha_desde.Text);
clientdataset.Params[2].AsDate:=strtoDate(edit2_Fecha_hasta.Text);

strCadenaSQL:=strCadenaSQL+ '(( WHERE ordenanzas.fecha_sancion >= arametro1) AND (ordenanzas.fecha_sancion<= arametro2)) ';


Pero cuando voy a ejecutar la consulta con los parametros anteriores. La primera vez ésta se ejecuta bien. Pero la segunda vez me sale un error como el siguiente, referido a los parametros del clientDataSet:

error ' List index out of bounds(2)'

No sé que puede ser ya que el clientDataSet lo cierro y abro cada vez que hago una consulta nueva.

Les agredezco la ayuda. Saludos
Velia
Responder Con Cita
  #2  
Antiguo 02-12-2005
Avatar de Thales
Thales Thales is offline
Miembro
 
Registrado: ago 2005
Posts: 48
Poder: 0
Thales Va por buen camino
Te falta usar el método FetchParams del ClientDataSet para que el componente genere la lista de parámetros. Sería algo así;

Código Delphi [-]
with ClientDataSet do
begin
  CommandText:= strCadenaSQL;
  FetchParams;
  // A partir de aquí ya están disponibles los parámetros en el ClientDataSet
  Params.ParamByName('Parametro1').Text := edit1_Fecha_desde.Text;
  Params.ParamByName('Parametro2').Text := edit2_Fecha_hasta.Text;
end;

Un saludo
Responder Con Cita
  #3  
Antiguo 02-12-2005
Velia Velia is offline
Miembro
 
Registrado: oct 2005
Posts: 71
Poder: 19
Velia Va por buen camino
Thumbs up Muchas Gracias por la ayuda pero PORQUE????

Gracias por tu ayuda Thales hice como me dijiste y salio. En realidad ya habia ejecutado el FetchParams.
Pero estaba referenciando los parametros de la siguiente manera y eso me causaba error:

ClientDataSet.params[1].asString:= edit1.text;

Lo que no entiendo porque me puede salir un desbordamiento de límites de un parametro por referenciarlo de esta manera.

Saludos
Responder Con Cita
  #4  
Antiguo 03-12-2005
Avatar de Thales
Thales Thales is offline
Miembro
 
Registrado: ago 2005
Posts: 48
Poder: 0
Thales Va por buen camino
Seguramente el motivo será que te referías a los parámetros como params[1] y params[2], cuando lo correcto hubiera sido más bien hacerlo como params[0] y params[1].

De todas maneras siempre es preferible acceder a ellos con el método ParamByName.

Un saludo
Responder Con Cita
  #5  
Antiguo 03-12-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cita:
Empezado por Thales
De todas maneras siempre es preferible acceder a ellos con el método ParamByName.
Veo que te has adelantado por unos segundos..

podrias explicarnos por que te parece preferible acceder a los parámetros por nombre y no por su índice.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #6  
Antiguo 03-12-2005
Avatar de Thales
Thales Thales is offline
Miembro
 
Registrado: ago 2005
Posts: 48
Poder: 0
Thales Va por buen camino
Cita:
Empezado por jachguate
Veo que te has adelantado por unos segundos..

podrias explicarnos por que te parece preferible acceder a los parámetros por nombre y no por su índice.

Hasta luego.

Pues a bote pronto se me ocurren dos motivos:
El primero es que hace más legible el código pues se entiende mejor una asignación del tipo
Código Delphi [-]
Params.ParamByName('Nombre').Text := ENombre.Text;
que otra del tipo
Código Delphi [-]
Params[1].Text := ENombre.Text;
y segundo que es mucho más fácil cometer errores con esta segunda manera de hacer las cosas pues la ley de murphy dirá en este caso que siempre cogeremos el índice equivocado.
A pesar de que la asignación se haga al parámetro correcto, posteriormente podemos cambiar la definición de la consulta y puede que la ordenación de los parámetros cambie, en cuyo caso la asignación anterior será incorrecta.

Un saludo
Responder Con Cita
  #7  
Antiguo 03-12-2005
Velia Velia is offline
Miembro
 
Registrado: oct 2005
Posts: 71
Poder: 19
Velia Va por buen camino
Abusándome de tu buena voluntad te pregunto alguito mas

Si los referenciaba bien desde 0 hasta 8 porque tengo varios parametros, pero justo me causaban error cuando trabajaba con fechas. Pensé que ese era el problema.

Ahora me surgio otro problemita.

Cuando ejecuto la consulta todo me sale bien. inclusive cambiando los valores que contienen los parametros y ejecutando de vuelta.
O cuando cambio la consulta SQL , y formo otra cadena SQL utilizando diferentes parametros: por ejemplo utilizando el prametro5.
Pero el problema me surge cuando vuelvo a utilizar la consulta anterior es decir la cadena SQL que me contenía el parametro0 (por ejemplo).

Entonces me surge otro error que dice ClientDataSet 'parametro0' not found

Te agradecería que me ayudes.
Si eres de Argentina te prometo que te invito a mi colación que es este 16 de Dic. y justamente este programa tengo que presentar
SALUDOS
Responder Con Cita
  #8  
Antiguo 03-12-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cita:
Empezado por Velia
Entonces me surge otro error que dice ClientDataSet 'parametro0' not found
Si cambias la cadena SQL, lo que procede es llamar nuevamente al método fetchparams.
Cita:
Empezado por Velia
Si eres de Argentina te prometo que te invito a mi colación que es este 16 de Dic. y justamente este programa tengo que presentar
SALUDOS
Pues no soy de argentina... pero si pagas los boletos, prometo asistir

Saludos.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #9  
Antiguo 03-12-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
¿cuantos parámetros tiene tu consulta?

Tenes que estar consciente que al acceder a Params[1] en realidad estas tratando de ir al segundo parámetro del ClientDataSet, pues el arreglo de parámetros está basado en 0.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 12:58:48.


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