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.
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.