Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   error en parametros con ado (https://www.clubdelphi.com/foros/showthread.php?t=10575)

redlyon13 23-05-2004 05:48:45

error en parametros con ado
 
que tal amigos, estoy realizando una consulta en la que uso un adoquery y le paso parametros el codigo es el siguiente

adoquery1.Parameters.ParamByName('oc-cve').Value := edit1.Text ;
adoquery1.SQL.Text:= 'select us-cve from ordcom where oc-cve = :oc-cve';
adoquery1.ExecSQL;

pero a la hora de ejecutar la aplicacion me marca "no value given for one or more required parameters" podrian orientarme acerca de donde estoy mal ?

otra pregunta
como puedo pasar el resultado a una etiqueta
se puede hacer lo siguiente

label1.text := adoquery1.SQL.Text:= 'select us-cve from ordcom where oc-cve = :oc-cve';

soy novato asi que si mi pregunta es muy tonta disculpen pero voy empezando y si uds me ayudan podre apender.
de antemano les agradezco por su atencion

jachguate 23-05-2004 05:56:58

El problema es que es al asignar la sentencia SQL que se "crean" los parámetros; por lo que el valor recien asignado simplemente se pierde.

Además, cuando asignas un select a una sentencia SQL, el TAdoQuery debes "abrirlo" con el método open, y no simplemente "ejecutarlo" con ExecSQL, con el que ejecutas sentencias que no devuelven un cursor, como un update o un delete.

Para obtener el "resultado", te podes valer del método FieldByName.

Al final el trozo de código quedaria algo asi:

Código Delphi [-]
  adoquery1.SQL.Text:= 'select us-cve from ordcom where oc-cve = :oc-cve';
  adoquery1.Parameters.ParamByName('oc-cve').Value := edit1.Text ;
  adoquery1.Open;
  label1.text := adoquery1.fieldbyname('oc-cve').AsString;

Por cierto, te recomiendo el uso de las etiquetas [ code ] [ delphi ] y [ sql ] para publicar trozos de código, que ves que de esta forma se indentan correctamente y hasta se puede resaltar la sintaxis, lo que los hace mucho mas legibles. Hay un mensaje al inicio de cada foro que te aclarará bastante sobre su uso.

Hasta luego.

;)

redlyon13 23-05-2004 06:09:27

como esta eso de que se pierden los valores del parametro no te lo entendi muy bien, otra preguntonta, el parametro lo tengo que definir en algun lugar en especial o lo puedo agregar por ejemplo en el evento onclick de un boton ?

jachguate 23-05-2004 06:17:40

Cita:

Empezado por redlyon13
como esta eso de que se pierden los valores del parametro no te lo entendi muy bien

Que al momento de asignar la sentencia SQL, ADO borra los parámetros del componente (si es que los tiene) y genera una lista totalmente nueva basado en la sentencia recien recibida. Esto provoca que el valor asignado al parámetro se pierda...

Por eso basta cn cambiar el orden...

Cita:

Empezado por redlyon13
el parametro lo tengo que definir en algun lugar en especial o lo puedo agregar por ejemplo en el evento onclick de un boton ?

esto si que no lo entendí...

El parámetro lo podes definir en tiempo de diseño o ejecución sin problemas. Por ejemplo, podes introducir una sentencia SQL con nuevos parámetros... siempre que tengas un mecanismo igualmente dinámico para asignar un valor a ellos antes de ejecutar la sentencia o abrir un cursor.

Hasta luego.

;)

redlyon13 23-05-2004 06:33:45

escribi el codigo en el orden que me comentas pero aun asi me sigue marcando el mismo error.
como le asigno el valor del campo de texto a este parametro que defini ?

jachguate 23-05-2004 06:40:40

Probablemente el error está en un parámetro de la conexión ADO entonces. Has intentado ejecutar un query sin parámetros???

redlyon13 23-05-2004 07:14:30

ejecuto el query sin parametros y funciona,
mira lo que quiero hacer es capturar en un cuadro de texto un numero de orden de compra y al presionar un boton me aparezcan todos los datos de esta orden por eso pensaba realizarla con parametros, la tabla se llama ordcom, el campo es [I]oc-cve[/i], tu como consultarias este dato en la bd ?

jachguate 23-05-2004 07:29:09

Pues en principio está bien como vos lo estas haciendo. Con una sentencia del tipo

adoquery1.ParamByName('talcosa').AsString := 'hola';

Le estas asignando el valor 'hola' al parámetro, y con Open, como ya te explique antes, lo abris...

Intentá asignar el valor del parámetro en tiempo de diseño y ver si asi es posible. Otra posibilidad que se me ocurre, es que el parámetro no soporte el uso del guion menor, pues este en sql normalmente significa una resta... ya ves, es el signo menos.

Mejor usa un nombre de parámetro con guion mayor (_) o sin guiones.

Hasta luego.

;)

redlyon13 23-05-2004 08:47:38

fijate que ahora me marca "syntax error in query expresion select 'ORDCOM where oc-cve = ?' al parecer este es el valor que pasa el parametro.

jachguate 23-05-2004 19:57:08

Te recomiendo escribir el query con comillas dobles. No se como se lo tome MS-SQL, pero creo que cualquier motor interpretará el Select oc-cve como la resta del campo oc menos el campo cve. Si el campo se llama oc-cve, escribilo entre comillas dobles (que debiera ser lo estándar, pero mejor lee la documentación de tu motor).

Algo como:

Código SQL [-]
  Select "uc-cve" from ordcom where "oc-cve" = :occve;

Luego el parámetro se llamaria occve.

Hasta luego.

;)

redlyon13 24-05-2004 01:32:22

muchas gracias, tenias razon era por que estaba usando el guion medio :D , ya lo cambie por guion bajo y si funciono,tanto por ta pequeña cosa jejeje, muchas gracias por tu ayuda :cool:


La franja horaria es GMT +2. Ahora son las 07:04:08.

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