【问题标题】:Error Delphi / MySQL / Parameters错误 Delphi / MySQL / 参数
【发布时间】:2013-01-12 16:23:38
【问题描述】:

好吧,情况是:我有 1 个名为 cboTipDocIden 的 TComboBox 和 1 个名为 txtDocIdenSolic 的 TEdit。

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 在 txtDocIdenSolicOnExit 事件上执行,代码如下:

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 可以工作。

感谢您的有用帮助。

【问题讨论】:

  • Bienvenido 一个 StackOverflow。 Edité tu pregunta para añadir formato a tu sentencia CREATE TABLE y para eliminar tu Firma, ya que aquí no están permitidas。 Un saludo y disfruta de la estancia。

标签: mysql sql delphi parameters


【解决方案1】:

删除参数值周围的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;

【讨论】:

    猜你喜欢
    • 2022-01-20
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 2012-07-25
    • 2012-06-25
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多