PDA

Ver la Versión Completa : MySQL y parámetros


vroa74
12-09-2007, 15:46:22
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.



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:

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:

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:

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

MyQuery1.ParamByName('iduser').Value:=strtoint(Edit1.Text);

y el varo que recibo de la consultas no es el esperado

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...

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

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:

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;


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:


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 (http://www.clubdelphi.com/foros/member.php?u=9823) y [Delphius] (http://www.clubdelphi.com/foros/member.php?u=3485) Respectivamente por la ayuda.

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