PDA

Ver la Versión Completa : No sé trabajar con parametros...


GustavoCruz
28-02-2013, 02:08:18
Hola amigos del foro. Mi pregunta es si en una consulta usualmente se hace esto:
select * from tabla where campo1 = :midato .
Cómo se hace en SQL Server 2008. Pues he tenido problemas con esto.
uso los componentes ADO
Gracias de antemano por la ayuda

Gustavo Cruz

Caral
28-02-2013, 02:15:29
Hola
Se hace igual.
La consulta esta bien hecha, debe ser otro el problema.
Saludos

olbeup
28-02-2013, 08:34:21
Hola GustavoCruz,

Como le pasas el parametro :midato a la SQL, para ver un poco mas de luz

Un saludo.

Neftali [Germán.Estévez]
28-02-2013, 10:09:03
Nos haría falta ver el trozo de código completo, donde generas la SQL y asignas los parámetros.
Como te han comentado la sintaxis que has colocado parece estar bien.

Si te da algún error, estaría bien que comentaras exactamente el texto que te devuelve.

ecfisa
28-02-2013, 18:25:32
Hola Gustavo.

Como ya te comentaron la consulta SQL es correcta, seguramente tengas problemas con el uso del TADOQuery.

Por si te sirve de ayuda, un ejemplo:

...
with ADOQuery1 do
begin
Close;
SQL.Text:= 'SELECT * FROM TABLA WHERE CAMPO1 = :PARAMETRO';
Parameters.ParamByName('PARAMETRO').Value := Edit1.Text;
Open
end;
...


Saludos.

WkaymQ48
28-02-2013, 19:06:22
Con el TADOQuery hay que crear primero el parámetro para poder usarlo.

Yo utilizo algo como esto (siguiendo con el ejemplo de ecfisa)

with ADOQuery1 do
begin
Close;
SQL.Text:= 'SELECT * FROM TABLA WHERE CAMPO1 = :PARAMETRO';
// Aqui le indicamos que cree los parámetros a partir de la consulta
Parameters.ParseSQL(SQL.Text,TRUE);
Parameters.ParamByName('PARAMETRO').Value := Edit1.Text;
Open
end;

Caral
01-03-2013, 00:17:05
Hola
Con el TADOQuery hay que crear primero el parámetro para poder usarlo.

Primera vez que veo esto.
He usado el AdoQuery infinidad de veces y no se necesita estipular o crear nada.:cool:
Saludos

WkaymQ48
01-03-2013, 08:46:41
Hola

Primera vez que veo esto.
He usado el AdoQuery infinidad de veces y no se necesita estipular o crear nada.:cool:
Saludos

Pues no te lo voy a discutir, pero si pongo el código de arriba en delphi y no incluyo la linea del "ParseSQL" al ejecutar el programa me salta una bonita excepción diciendo que el parámetro no existe.

Sera mi delphi que es caprichoso :D

O puede que le pase a alguien mas:
http://edn.embarcadero.com/es/article/20420

Saludos

ecfisa
01-03-2013, 17:20:14
Pues no te lo voy a discutir, pero si pongo el código de arriba en delphi y no incluyo la linea del "ParseSQL" al ejecutar el programa me salta una bonita excepción diciendo que el parámetro no existe.

Hola WkaymQ48.

No soy tán conocedor de ADO como lo es mi amigo Caral y siendo sincero, desconozco las situaciones en que se debe crear el parámetro. Tampoco es mi intención discutir (para algo está la función), pero te puedo asegurar que el código que adjunté no me genera excepción alguna.

Busqué en la web sobre ParseSQL (http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/DB_TParams_ParseSQL.html) (no había visto tu enlace), pero ninguna de las referencia me dejó claro en que casos específicos es requisito usarlo. Si algún compañero me echa luz sobre ese punto le estaría muy agradecido.

Saludos. :)

nlsgarcia
01-03-2013, 19:39:31
WkaymQ48,


...y no incluyo la linea del "ParseSQL" al ejecutar el programa me salta una bonita excepción diciendo que el parámetro no existe...


Revisa estos links:

1- Data.Win.ADODB.TParameters.ParseSQL
http://docwiki.embarcadero.com/Libraries/XE3/en/Data.Win.ADODB.TParameters.ParseSQL

2- Parse params from an sql query using delphi
http://stackoverflow.com/questions/2547243/parse-params-from-an-sql-query-using-delphi


Call ParseSQL to parse an SQL statement for parameters. For each parameter found in the SQL statement, a TParameter object is added to the calling TParameters object using the name of the parameter in the SQL statement.


Al usar el método ParseSQL con el segundo parámetro en True, estas creando una lista de los parámetros de la sentencia SQL como puedes ver en el Link-2, te sugiero revisar el diseño de tus tablas y verificar si efectivamente dicho atributo (Campo) existe realmente, lo más probable es que no exista como sugiere el Msg #8.

El Query debe funcionar adecuadamente como se indica en el Msg #5 una vez solventado el problema con el atributo.

Revisa esta información:

http://img685.imageshack.us/img685/1093/parsesql.jpg

Espero sea útil :)

Nelson.