PDA

Ver la Versión Completa : Problema con Sentencia SQL


darkamerico
12-01-2013, 17:07:29
Hola nuevamente mis amigos de codigo :), el problema es el siguiente:

1 TComboBox llamado cboTipDocIden (que tiene el tipo de Documento de Identidad Nacional: 1.DNI y 2.RUC) y
1 TEdit llamado txtDocIdenSolic (que tiene el Nro del Documento de identidad)

La Consulta SQL que deseo ejecutar esta en un componente TUniQuery y es la siguiente:

SELECT oper_solicitante.id_solicitante, oper_solicitante.ape_pat, oper_solicitante.ape_mat,
oper_solicitante.nombre, oper_solicitante.direcc_idtipcalle, oper_solicitante.direcc_nombrecalle,
oper_solicitante.direcc_nro, oper_solicitante.idvinculo_fk
FROM oper_solicitante
WHERE oper_solicitante.tipDocIden = :TipDocIden AND
oper_solicitante.nroDocIden = :NroDocIden


Ambos parametros son de tipo Text.

Ahora bien, la consulta se ejecuta en el evento OnExit de txtDocIdenSolic, aqui esta el codigo:

procedure TForm1.txtDocIdenSolicExit(Sender: TObject);
var
TipDocIden, NroDocIden:string;
begin
if(length(txtDocIdenSolic.Text)>0) then
begin
TipDocIden:=chr(39)+copy(cboTipDocIden.Text,1,1)+chr(39);
NroDocIden:=chr(39)+trim(txtDocIdenSolic.Text)+chr(39);
q_DetSolicitante.Close;
q_DetSolicitante.Params[0].AsString:=TipDocIden;
q_DetSolicitante.Params[1].AsString:=NroDocIden;
q_DetSolicitante.Open;

if(length(q_DetSolicitante.FieldByName('id_solicitante').AsString)=0) then
begin
stbar.Panels[0].text:='Nuevo Solicitante...';
txtApePat.SetFocus;
end
else
begin
stbar.Panels[0].Text:='Solicitante Reiterativo...';
txtApePat.Text:=q_DetSolicitante.FieldByName('ape_pat').AsString;
txtApeMat.Text:=q_DetSolicitante.FieldByName('ape_mat').AsString;
txtNombre.Text:=q_DetSolicitante.FieldByName('nombre').AsString;
end;
end
else
msg1.Execute;
end;


Finalmente, la estructura de la tabla donde realizo las operaciones se llama oper_solicitante (MySQL) es:

CREATE TABLE `oper_solicitante` (
`id_solicitante` int(11) NOT NULL,
`tipDocIden` char(1) NOT NULL,
`nroDocIden` varchar(11) NOT NULL,
`ape_pat` varchar(50) NOT NULL,
`ape_mat` varchar(50) NOT NULL,
`nombre` varchar(50) NOT NULL,
`direcc_idtipcalle` int(11) NOT NULL,
`direcc_nombrecalle` varchar(80) NOT NULL,
`direcc_nro` varchar(15) NOT NULL,
`idvinculo_fk` int(11) NOT NULL,
PRIMARY KEY (`id_solicitante`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


El asunto es que la consulta no arroja ningun registro, sin embargo cuando cambio los parametros por valores literales ejecuta normalmente.

Ya le di muchas vueltas y no hallo el problema.

Agradeceria una mano

Muchas Gracias

Al González
12-01-2013, 17:43:08
El asunto es que la consulta no arroja ningun registro, sin embargo cuando cambio los parametros por valores literales ejecuta normalmente.
Eso es porque al usar Params, el valor en sí dado al parámetro no debe llevar comillas. Las comillas son para indicarle a Delphi o al motor que lo encerrado entre ellas es una cadena, pero al tener ya un objeto TParam, a éste no es necesario darle el valor entre comillas.

Espero haberme explicado.

Saludos. :)

darkamerico
12-01-2013, 17:50:03
Eso es porque al usar Params, el valor en sí dado al parámetro no debe llevar comillas. Las comillas son para indicarle a Delphi o al motor que lo encerrado entre ellas es una cadena, pero al tener ya un objeto TParam, a éste no es necesario darle el valor entre comillas.

Espero haberme explicado.

Saludos. :)

Gracias Al Gonzalez, cambie mi codigo para dejarlo asi:

TipDocIden:=copy(cboTipDocIden.Text,1,1);
NroDocIden:=trim(txtDocIdenSolic.Text);

y Trabajo

Espero que este post le sirva a otros que les haya ocurrido lo mismo.

:)^\||/