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)
-   -   Problema parametros TAdoQuery (https://www.clubdelphi.com/foros/showthread.php?t=10929)

Tio 01-06-2004 20:14:56

Problema parametros TAdoQuery
 
Utilizo delphi7, y tengo un problema de lo mas extraño desde que me he
pasado a SQL Server, con interbase no me sucedía.

Al grano:

Realizo una query para traer unos campos de una tabla de la base de datos,
esta es la query:

select Propietario, Ubicacion, Nota from PELICULAS

WHERE ID = :MyID

La consulta funciona bien, lo he comprobado, pero cuando quiero ver el único
registro que me ha devuelto hago lo siguiente:



edPropietario.Text :=
qPeliDetalle.Parameters.parambyname('Propietario').Value;
edubicacion.Text :=
qpeliDetalle.Parameters.parambyname('Ubicacion').Value;
mNota.Lines.Text := qPeliDetalle.Parameters.parambyname('nota').value;



Y me dice que El campo pripietario no existe, asi como los otros 2, ¿que
sucede?. He pinchado botón derecho sobre el query, y agregado todos los
campos y si que aparecen en Fields, .....



¿alguna idea?.



Por cierto, el query es un TAdoQuery.

__marcsc 01-06-2004 21:11:18

Buenas :)

Vamos a ver, si te he entendido bien (disculpa si no es así) tienes una pequeña confusión con dos funciones relacionadas con los query.

Una es la función ParamByName que forma parte de la coleción Parameters del ADOQuery. La otra es la función FieldByName que se encuentra en la clase TDataSet.

Si tu tienes una select del tipo

Código SQL [-]
select Propietario, Ubicacion, Nota 
from PELICULAS
WHERE ID = :MyID

significa que que tienes un parámetro variable MyID que debe instanciarse durante la ejecución del programa. Como supongo que ya sabes, debes instanciarlo con un código del tipo

Código Delphi [-]
with Query, Parameters do
begin
  Close;
  ParamByName('MyID').Value:= 1000; //por ejemplo
  Open;
end;

Ahora bien si lo que quieres es recuperar el valor de un campo mediante su nombre debes utilizar la otra función que mencionaba al principio, FieldByName. El código que tu quieres sería algo como:

Código Delphi [-]
edPropietario.Text := qPeliDetalle.FieldByName('Propietario').Value;
edubicacion.Text := qpeliDetalle.FieldByName('Ubicacion').Value;
mNota.Lines.Text := qPeliDetalle.FieldByName('nota').value;

Como ves el error que te salta es normal, dado que el único parámetro que existe en tu query es MyID. Lo otro son los campos resultantes.

Espero haber entendido tu problema y haber sido de ayuda.

Un saludo!

Tio 01-06-2004 22:25:32

Sigo con el problema.
 
¡Hola!

Muchas gracias por tu mensaje, es muy claro, pero no se que me sucede que no me va.....


He corregido como tu dices, pongo

mySTR := dmDatos.qPeliDetalle.fieldbyName('Propietario').Value;

y me da error de "Acces violation"....

El dmDatos está creado, y tengo unos storeProc en él que funcionan bien, uso delphi 7. ¿alguna otra idea?... No se que puede ser, creo que es cosa de los componentes TAdo

__marcsc 01-06-2004 22:58:14

Hola de nuevo,

seguro que te devuelve registros el Query? Quizás el campo al que intentas acceder tiene algún evento asociado que hace que se vuelve loco?

Has probado a usar .AsString, o .AsInteger (según el tipo) en lugar de .Value? Recuerda que Value, al ser usado desde TField, que es lo que devuelve FieldByName, devuelve un tipo Variant.

No sé qué más decirte... :confused:

Tio 02-06-2004 11:50:24

Hola!

Muchas gracias por tu ayuda y comentarios, la verdad es que loco de no saber que podía ser cambién un poco el planteamiento, cree nuevo formulario y en dicho formulario realicé la consulta y ahora si que va, no tengo ni la mejor idea de que puede haber sido, pero anoche me acosté con un tremendo dolor de cabeza.

Mil gracias por tu paciencia!,,, un saludo, nos leemos.


La franja horaria es GMT +2. Ahora son las 05:22:59.

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