Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   MySQL y parámetros (https://www.clubdelphi.com/foros/showthread.php?t=47977)

vroa74 12-09-2007 15:46:22

MySQL y parámetros
 
Buenos dias:
soy novato en sql de hecho son mis primeras ssentencias en sql que escribo. el problema es : como debo escribir el Query para que la información que tengo en un componente sea integre en el query y de esa forma se puede ejecutar. No se si lleva parametros como es scan de lenguaje c.


Código Delphi [-]
MyQuery1.SQL.Add('SELECT * FROM n24_usuario, n24_notaria');
MyQuery1.SQL.Add('where n24_notaria.iduser = n24_usuario.iduser');
MyQuery1.SQL.Add('AND n24_notaria.status ="TRUE"')
MyQuery1.SQL.Add('AND n24_notaria.iduser = 1' );

Nota: Este query se ejecuta muy bien en mysql mas no en delphi.

enecumene 12-09-2007 16:07:18

intenta eso:

Código SQL [-]
MyQuery1.SQL.Clear;
MyQuery1.SQL.Add('SELECT * FROM n24_usuario, n24_notaria');
MyQuery1.SQL.Add('where n24_notaria.iduser = :iduser');
MyQuery1.SQL.Add('AND n24_notaria.status ="TRUE"')
MyQuery1.SQL.Add('AND n24_notaria.iduser = 1' );
MyQuery1.ParamByName('iduser').Value:=MyQuery1.fieldbyname('n24_usuario.iduser').asString;
MyQuery1.ExecSQL;

vroa74 12-09-2007 16:37:31

Perdona mi ignorancia en este aspecto, eso funciona de esa forma cuando los datos son pasados por componentes como el Tedit(string, foalt,integer), CheckBox(bool),..etc etc etc ????

enecumene 12-09-2007 16:44:09

Hola, si los datos vienen de un TEdit, ComboBox, Etc. entonces seria de esta manera:

Código SQL [-]
MyQuery1.SQL.Clear;
MyQuery1.SQL.Add('SELECT * FROM n24_usuario, n24_notaria');
MyQuery1.SQL.Add('where n24_notaria.iduser = :iduser');
MyQuery1.SQL.Add('AND n24_notaria.status ='+Quotedstr('TRUE')+'')
MyQuery1.SQL.Add('AND n24_notaria.iduser = 1' );<---CREO QUE ESTO ESTA DEMAS
MyQuery1.ParamByName('iduser').Value:=Edit1.Text;
MyQuery1.ExecSQL;

vroa74 12-09-2007 16:56:33

tengo dado de alta varios campo y varios registros.
lo rado del codigo es:

Código Delphi [-]
MyQuery1.SQL.Clear;
MyQuery1.SQL.Add('SELECT * FROM n24_usuario, n24_notaria');
MyQuery1.SQL.Add('where n24_notaria.iduser = :iduser');
MyQuery1.SQL.Add('AND n24_notaria.status ='+Quotedstr('TRUE')+'')
MyQuery1.SQL.Add('AND n24_notaria.iduser = 1' );
MyQuery1.ParamByName('iduser').Value:=Edit1.Text;
MyQuery1.ExecSQL;

id es un valor entero.
lo hice de esa forma y
Código Delphi [-]
 MyQuery1.ParamByName('iduser').Value:=strtoint(Edit1.Text);
y el varo que recibo de la consultas no es el esperado
Código SQL [-]
MyQuery1.ExecSQL; 
// por elguna raso  {MyQuery1.ExecSQL;}  no me funciono y escribi:
MyQuery1.Open;
// que si me funciono.

Delphius 12-09-2007 16:59:53

Hola! Creo que esto debería andar...

Código Delphi [-]
MyQuery1.SQL.Add('SELECT * FROM n24_usuario, n24_notaria');
MyQuery1.SQL.Add('where n24_notaria.iduser = n24_usuario.iduser');
MyQuery1.SQL.Add('AND n24_notaria.status ="TRUE"')
MyQuery1.SQL.Add('AND n24_notaria.iduser = :ID_USER' );
// ID_USER es un parámetro. Para reconocer un parámetro
// de otra "cosa" se debe anteponer los dos puntos (:)

// Se declara el paramátro y se le indica de donde obtener el
// valor. Cuidado con este tema: Asumo que se espera un integer
MyQuery1.ParamByName('ID_USER').vALUE := IntToStr(Edit1.Text);

// Ejecuto la consulta:
myQyery1.Open; // Es OPEN! No ExecSQL

Saludos,

EDITO: ve que ya vieron el error... llegue tarde

vroa74 12-09-2007 17:10:35

Mi pregunta sigue:

perdonen si doy lata
Código Delphi [-]
MyQuery1.SQL.Add('SELECT * FROM n24_usuario, n24_notaria');
MyQuery1.SQL.Add('where n24_notaria.iduser = n24_usuario.iduser');
MyQuery1.SQL.Add('AND n24_notaria.status ="TRUE"'); // este es un campo bool que puede el valor es dado por un checkbox= como intrego el checkbos al query ????
MyQuery1.SQL.Add('AND n24_notaria.iduser = :ID_USER' ); // id user es un campo entero dado por un edit textcomo lo intero al Query ???????
MyQuery1.ParamByName('ID_USER').vALUE := IntToStr(Edit1.Text);
MyQuery1.Open;

Delphius 12-09-2007 17:27:20

A ver... acabo de ver algo que posiblemente este mal. La asignación de los valores de parámetros debe hacerse una vez... y por lo que he visto se comparaba dos veces con el ID. Esto lo verán en la consulta.

Bueno... no se a que te refieres a integrarlo con un query. Si te explicas mejor... No se si te entendí bien... pero que haces referencia a algo como:

Código Delphi [-]
MyQuery1.SQL.Add('SELECT * FROM n24_usuario, n24_notaria');
  MyQuery1.SQL.Add('where n24_notaria.iduser = :ID_USER'); //ID_USER debe aparecer
  // una sola vez... para que hacer comparaciones innecesarias!
  MyQuery1.SQL.Add('AND n24_notaria.status = :ESTATUS);
  MyQuery1.ParamByName('ID_USER').vALUE := IntToStr(Edit1.Text);
  MyQuery1.ParamByName('ESTATUS').value := str_status;
  MyQuery1.Open;

Código Delphi [-]
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  // Estoy suponiendo que en el campo se ingresa en forma string
  // str_status es una variable global o de acceso público
  if CheckBox1.Checked
     then str_status := 'TRUE'
     else str_status := 'FALSE';
end;

Lo que hago es cambiar el valor de str_status de modo que cuando se lanze la consulta se pase TRUE o FALSE...

No si está bien lo que dije... pero bueno... creo dar la idea.
Saludos,

vroa74 12-09-2007 17:32:03

Comentario final

le doy gracias a todos ustedes por apoyarme. Por el momento llegue a esta colclusion:

Código Delphi [-]
            MyQuery1.SQL.Clear;
            MyQuery1.SQL.Add('SELECT * FROM n24_usuario, n24_notaria');
            MyQuery1.SQL.Add('where n24_notaria.iduser = n24_usuario.iduser');
            MyQuery1.SQL.Add('and n24_notaria.iduser ='+ Edit1.Text+'');
            if CheckBox1.Checked then
            MyQuery1.SQL.Add('and n24_notaria.status = true')
            else
            MyQuery1.SQL.Add('and n24_notaria.status = false');
            MyQuery1.Open;

la verdad no se si es por la version de mydac, o quizas sean otros aspectos.
la verdad es que me esta funcionando.

Si alguien encuentra alguna forma de optimizar el codigo o ve algo para mejorarlo, escribanlo.

Mucha gracias enecumene y [Delphius] Respectivamente por la ayuda.

Caundo termine espro poder colgar ayudar con respecto a todos los problemas que he tenido para realizar este sistema.


La franja horaria es GMT +2. Ahora son las 12:56:42.

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