Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Problema con Sentencia SQL (https://www.clubdelphi.com/foros/showthread.php?t=81995)

darkamerico 12-01-2013 17:07:29

Problema con Sentencia SQL
 
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:

Código SQL [-]
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:

Código Delphi [-]
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:

Código SQL [-]
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

Cita:

Empezado por darkamerico (Mensaje 453315)
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

Pues estabas en lo correcto!
 
Cita:

Empezado por Al González (Mensaje 453317)
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:

Código Delphi [-]
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.

:)^\||/


La franja horaria es GMT +2. Ahora son las 08:38:57.

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