2013-01-12 81 views
1

好了,情況是:我有1 TComboBox稱爲cboTipDocIden和1個TEDIT稱爲txtDocIdenSolic錯誤德爾福/ MySQL的/參數

cboTipDocIden的值爲:"1.DNI","2.RUC"

組件TUniQuery被稱爲q_DetSolicitante

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 

的SQL是在OnExit事件的txtDocIdenSolic,這裏的代碼執行:

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; 

最後,表結構爲:

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; 

那麼,SQL返回Delphi中的零行,但是當我更改SQL的工作原理值的參數時。

感謝您的幫助。

+0

Bienvenido a StackOverflow。 Editétu pregunta paraañadirformato a tu sentencia CREATE TABLE y para eliminar tu firma,ya queaquínoestánpermitidas。不要猶豫不決。 – jachguate

回答

2

刪除參數值周圍的chr(39)個字符。使用Params[].AsString允許數據庫驅動程序正確引用它們,並且您正在添加(加倍)它們,從而導致查詢失敗。

TipDocIden:= copy(cboTipDocIden.Text,1,1); 
NroDocIden:= trim(txtDocIdenSolic.Text); 
q_DetSolicitante.Close; 
q_DetSolicitante.Params[0].AsString := TipDocIden; 
q_DetSolicitante.Params[1].AsString := NroDocIden; 
q_DetSolicitante.Open; 
+0

+1,趕上! – jachguate