Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   error en busqueda sql (https://www.clubdelphi.com/foros/showthread.php?t=43399)

fernando1973 10-05-2007 13:31:10

error en busqueda sql
 
hola gente! como estan? yo como tarzan en dia feriado, quisiera saber si pueden ayudarme con una consulta coloque un componente sqlquery al cual edite la propiedad sql asi

select * from stock
where identificador = 'xcodigo'

luego coloque un boton y en el evento onclick coloque el siguiente codigo

clientdataset1.close;
sqlquery1.FielByName('xcodigo').AsInteger = strtoint(edit1.text);
clientdataset1.Open;

pero al cliclear me este error

project project1.exe raiced exception class EDatabaseError whith message 'SQLQuery1: 'field 'xcodigo' not found'.process stopped. Use step or run to continue.


desde ya agradesco las respuestas.
[IMG]file:///C:/DOCUME%7E1/ADMINI%7E1/CONFIG%7E1/Temp/moz-screenshot.jpg[/IMG]

Bicho 10-05-2007 13:56:53

Hola fernando,

te estás liando un poco, creo yo. xcodigo es un valor que tú le das para filtrar la consulta.
No entiendo muy bien que quieres hacer en éste nuevo evento. Creo que quieres modificar el filtro, es decir, que se filtre por el valor que hay en Edit1.text, no es así?
Si es así lo deberías dejar de la siguiente manera para que te funcione.

Código Delphi [-]
clientdataset1.close;
sqlquery1.FielByName('identificador').AsInteger = strtoint(edit1.text);
clientdataset1.Open;
La razón es que tú le estás asignando a ese campo el valor edit1.

Espero te sirva.

Saludos

fernando1973 10-05-2007 14:14:21

si lo que quiero hacer es que me realice la busqueda de acuerdo al valor numerico que se carga en el edit; Entoces le saco xcodigo y le paso al sqlquery directamente al campo identificador con el valor del edit? gracias por la respuesta Bicho.

karlaoax 10-05-2007 16:34:30

Ok, hecha un vistazo a este ecodigo:

En un Query: // lo llamare qr, o le pones cualquiera
SELECT campos
FROM tabla
WHERE campo=:campo // sera pasado como parametro

En tu Boton:
clientdataset1.close;
qr.SQL.text:='SELECT *FROM tabla WHERE codigo="'+strtoint(edit1.text)+'"';
{ es pasado como parametro del query}
clientdataset1..Open;

Y si necesitas validar si existe o no, X registro en tu tabla, agregas un variable de esta forma:
var
options:tlocateoptions;


y en tu codigo agregas:
if not qr.Locate('campo',edit1.text,options) then
messagebox(handle,'Algun mensaje que advierta que no existe tu registro','error',mb_ok);;
edit1.SetFocus; // Colocas tu foco en el edit
edit1.text:=''; // Si deseas borras lo que estuvo mal escrito


Espero te sirva.

Karla :p

Avisas si fue de ayuda :cool:

Por cierto, que Manejador de Base de datos utilizas?

ContraVeneno 10-05-2007 16:39:41

Establece el código como parámetro:
Código SQL [-]
 select * from stock
where identificador = :Codigo
Luego asignas el valor de tu parametro:
Código Delphi [-]
with TuQuery do begin;
 if active then close;
 ParamByName('Codigo').AsInteger:=strtoint(edit1.text);
 Open;
 if IsEmpty then
  showmessage('vacio');
 ...
 ...
 Close;
end; //with

fernando1973 10-05-2007 17:09:01

Cita:

Empezado por karlaoax
Ok, hecha un vistazo a este ecodigo:

En un Query: // lo llamare qr, o le pones cualquiera
SELECT campos
FROM tabla
WHERE campo=:campo // sera pasado como parametro

En tu Boton:
clientdataset1.close;
qr.SQL.text:='SELECT *FROM tabla WHERE codigo="'+strtoint(edit1.text)+'"';
{ es pasado como parametro del query}
clientdataset1..Open;

Y si necesitas validar si existe o no, X registro en tu tabla, agregas un variable de esta forma:
var
options:tlocateoptions;


y en tu codigo agregas:
if not qr.Locate('campo',edit1.text,options) then
messagebox(handle,'Algun mensaje que advierta que no existe tu registro','error',mb_ok);;
edit1.SetFocus; // Colocas tu foco en el edit
edit1.text:=''; // Si deseas borras lo que estuvo mal escrito


Espero te sirva.

Karla :p

Avisas si fue de ayuda :cool:

Por cierto, que Manejador de Base de datos utilizas?

karla uso mysql, cuando edito el sqlquery si pongo WHERE campo=:campo // sera pasado como parametro me da un error al activarlo que dice "no value for parameter"

ContraVeneno 10-05-2007 17:17:57

¿porque quieres activarlo en tiempo de diseño?

Bueno, de cualquier manera le puedes dar un parametro incial utilizando su propiedad Params

Obviamente si lo activas sin haberle dado el valor del parámetro, te mandará ese error...

fernando1973 10-05-2007 17:52:37

ok, otro de los errores que me da en esta linea
sqlquery1.SQL.text:='SELECT *FROM stock WHERE codigo= "'+strtoint(edit1.text)+'"';

dice que es incompatible los tipos 'string' and 'integer', no tendria que sacarle la funcion 'strtoint'?.

ContraVeneno 10-05-2007 18:00:46

Vamos a ver... no puedes usar los dos métodos al mismo tiempo

O usas la forma de hacerlo por consulta utilizando SQL.Text

o utilizas la forma de utilizar parámetros.

¿cuál vas a usar?

De cualquier manera, el error que te marca es porque la propiedad SQL.Text solo acepta datos tipo cadena (string) y al utilizar la función strtoint() estas cambiando a tipo entero (integer) y por eso te marca ese error. Si quieres utilizar esta forma simplemente quita la función StrToInt y debería funcionar.

karlaoax 10-05-2007 18:14:57

sorry por la demora:

Query:
SELECT campos
FROM tabla
WHERE campo=campo

Bton:
qr.close;
qr.SQL.text:='SELECT *FROM tabla WHERE campo="'+edit.text+'"';
qr.Open;

El codigo funciona al 100%

Lo cheque con MyDac y MySQL
;)

Avisas si queda ok :D

fernando1973 10-05-2007 18:33:45

ok, el codigo de karla funciona perfectamente les agradesco infinitamente a todos por la ayuda.

karlaoax 10-05-2007 18:55:04

Ok :D analiza el codigo y no solo CTRL+C y CTRL+V

Karla :p


La franja horaria es GMT +2. Ahora son las 16:07:34.

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