Ver Mensaje Individual
  #1  
Antiguo 19-01-2018
javicho_villa javicho_villa is offline
Miembro
 
Registrado: feb 2005
Ubicación: Lima - Perú
Posts: 99
Reputación: 20
javicho_villa Va por buen camino
Excepción: El proc. o la func. 'Insertar' esperaba el param. @Mi, que no se ha espec.

Buenas tardes, Gracias por la atención:
Tengo un problema al usar un procedimiento almacenado, uso la versión delphi XE8 con SQL 2012, uso los componentes ADO.
He revisado todo pero no encuentro el error al comienzo me salia un mensaje 'Tparameters', leyendo el foro encontré Parameter.ParseSQL pero no entiendo bien el uso de este, despues puse solamente un parameter.Refresh despues de definir los parametros y me sale este mensaje "Excepción: El procedimiento o la función 'ProductoInsertar' esperaba el parametro @MiMensaje, que no se ha especificado.".

También he revisado el procedimiento almacenado en SQL pero lo he ejecutado desde el mismo sql y funciona correctamente, también pense que estaba mal planteado el uso del Try // Except // Finally pero no estoy seguro que sea eso, pero todo apunta a que es la definición de los parametros.

Por favor les pido me den alguna luz para poder resolver este problema, muchas gracias nuevamente

Código Delphi [-]
procedure TProductoDatoForm.AceptarClick(Sender: TObject);
var CadLimpio,MiMsj,MiMsjBD:String;
    MyClass: TComponent;
    t,i:integer;
begin
  MiMsj   := self.Consistencia;
  MiMsjBD := '';
  CadLimpio := Trim(Copy(UpperCase(self.TipoComboBox.Text),1,50));
  if length(MiMsj)>0 then Application.MessageBox(PChar(MiMsj),'Error de ingreso de información ...',Mb_ok+mb_IconExclamation)
  else  begin
          MyClass := TComponent.Create(Self);
          if ledita=false then
           begin
             try
               try
                 with Datos.DatosDM.PrincipalADOStoredProc do
                   begin
                     Close;
                     Parameters.Clear;
                     //Parameters.ParseSQL(TRUE);
                     ProcedureName := 'ProductoInsertar';
                     Parameters.CreateParameter('@Nombre',ftString,pdInput,100,0);      //1
                     Parameters.CreateParameter('@Titulo',ftString,pdInput,50,0);       //2
                     Parameters.CreateParameter('@TituloPT',ftString,pdInput,50,0);     //3
                     Parameters.CreateParameter('@Circular',ftBoolean,pdInput,0,0);     //4
                     Parameters.CreateParameter('@Costo',ftFloat,pdInput,0,0);          //5
                     Parameters.CreateParameter('@Precio',ftFloat,pdInput,0,0);         //6
                     Parameters.CreateParameter('@TipoProducto',ftString,pdInput,50,0);    //7
                     Parameters.CreateParameter('@Id_Parametro_TipoProducto',ftInteger,pdInput,0,0);  //8
                     Parameters.CreateParameter('@Id_Parametro_UnidadMedida',ftInteger,pdInput,0,0);  //9
                     Parameters.CreateParameter('@Id_Parametro_Fibra',ftInteger,pdInput,0,0);         //10
                     Parameters.CreateParameter('@Id_Parametro_Hilatura',ftInteger,pdInput,0,0);      //11
                     Parameters.CreateParameter('@Id_Parametro_Color',ftInteger,pdInput,0,0);         //12
                     Parameters.CreateParameter('@Id_Parametro_Torsion',ftInteger,pdInput,0,0);       //13
                     Parameters.CreateParameter('@Id_Parametro_Procedencia',ftInteger,pdInput,0,0);   //14
                     Parameters.CreateParameter('@Id_Parametro_Familia',ftInteger,pdInput,0,0);       //15
                     Parameters.CreateParameter('@Id_Parametro_Diseno',ftInteger,pdInput,0,0);        //16
                     Parameters.CreateParameter('@Id_Parametro_Talla',ftInteger,pdInput,0,0);         //17
                     Parameters.CreateParameter('@Id_Parametro_Acabado',ftInteger,pdInput,0,0);       //18
                     Parameters.CreateParameter('@MiMensaje',ftString,pdOutput,100,0);                //19
                     Parameters.Refresh;
                     ///--- Valor de los Parametros ----///
                     Parameters.ParamByName('@Nombre').Value                    := self.NombreEdit.Text;             //1
                     Parameters.ParamByName('@Costo').Value                     := StrToFloat(self.CostoEdit.Text);  //2
                     Parameters.ParamByName('@Precio').Value                    := StrToFloat(self.PrecioEdit.Text); //3
                     Parameters.ParamByName('@TipoProducto').Value              := CadLimpio;                        //4
                     Parameters.ParamByName('@Id_Parametro_TipoProducto').Value := StrToInt(Trim(Copy(UpperCase(self.TipoComboBox.Text),58,length(self.TipoComboBox.Text))));        //5
                     Parameters.ParamByName('@Id_Parametro_UnidadMedida').Value := StrToInt(Trim(Copy(UpperCase(self.UMedidaComboBox.Text),58,length(self.UMedidaComboBox.Text))));  //6

                    if UpperCase(CadLimpio)='MATERIA PRIMA' then
                       begin
                         Parameters.ParamByName('@Titulo').Value                   := self.TituloEdit.Text;        //7
                         Parameters.ParamByName('@Id_Parametro_Fibra').Value       := StrToInt(Trim(Copy(UpperCase(self.FibraComboBox.Text),58,length(self.FibraComboBox.Text))));        //8
                         Parameters.ParamByName('@Id_Parametro_Hilatura').Value    := StrToInt(Trim(Copy(UpperCase(self.HilaturaComboBox.Text),58,length(self.HilaturaComboBox.Text))));  //9
                         Parameters.ParamByName('@Id_Parametro_Color').Value       := StrToInt(Trim(Copy(UpperCase(self.ColorComboBox.Text),58,length(self.ColorComboBox.Text))));        //10
                         Parameters.ParamByName('@Id_Parametro_Torsion').Value     := StrToInt(Trim(Copy(UpperCase(self.TorsionComboBox.Text),58,length(self.TorsionComboBox.Text))));    //11
                         Parameters.ParamByName('@Id_Parametro_Procedencia').Value := StrToInt(Trim(Copy(UpperCase(self.ProcedenciaComboBox.Text),58,length(self.ProcedenciaComboBox.Text)  )));  //12
                         ///--- Demas valores de Producto Terminado por defecto  ----///
                         Parameters.ParamByName('@TituloPT').Value              := '';    //13
                         Parameters.ParamByName('@Id_Parametro_Familia').Value  := 0;     //14
                         Parameters.ParamByName('@Id_Parametro_Diseno').Value   := 0;     //15
                         Parameters.ParamByName('@Id_Parametro_Acabado').Value  := 0;     //16
                         Parameters.ParamByName('@Id_Parametro_Talla').Value    := 0;     //17
                         Parameters.ParamByName('@Circular').Value              := 0;     //18
                       end
                     else if UpperCase(CadLimpio)='PRODUCTO TERMINADO' then
                       begin
                         Parameters.ParamByName('@TituloPT').Value              := self.TituloPTEdit.Text;
                         Parameters.ParamByName('@Id_Parametro_Familia').Value  := StrToInt(Trim(Copy(UpperCase(self.FamiliaComboBox.Text),58,length(self.FamiliaComboBox.Text))));
                         Parameters.ParamByName('@Id_Parametro_Diseno').Value   := StrToInt(Trim(Copy(UpperCase(self.DiseñoComboBox.Text),58,length(self.DiseñoComboBox.Text))));
                         Parameters.ParamByName('@Id_Parametro_Acabado').Value  := StrToInt(Trim(Copy(UpperCase(self.AcabadoComboBox.Text),58,length(self.AcabadoComboBox.Text))));
                         if self.CircularRadioButton.Checked then Parameters.ParamByName('@Id_Parametro_Talla').Value := 0
                         else Parameters.ParamByName('@Id_Parametro_Talla').Value := StrToInt(Trim(Copy(UpperCase(self.TallaComboBox.Text),58,length(self.TallaComboBox.Text))));
                         Parameters.ParamByName('@Circular').Value              := self.CircularRadioButton.Checked;
                         ///--- Demas valores de Materia Prima por defecto  ----///
                         Parameters.ParamByName('@Titulo').Value                   := '';
                         Parameters.ParamByName('@Id_Parametro_Fibra').Value       := 0;
                         Parameters.ParamByName('@Id_Parametro_Hilatura').Value    := 0;
                         Parameters.ParamByName('@Id_Parametro_Color').Value       := 0;
                         Parameters.ParamByName('@Id_Parametro_Torsion').Value     := 0;
                         Parameters.ParamByName('@Id_Parametro_Procedencia').Value := 0;
                       end;
                     lacepta := true;
                   end;
                   Datos.DatosDM.PrincipalADOStoredProc.Prepared := true;
                   Datos.DatosDM.PrincipalADOStoredProc.ExecProc;
               finally
                 if not VarIsNull(Datos.DatosDM.PrincipalADOStoredProc.Parameters.ParamByName('@MiMensaje').Value) then
                   begin
                     MiMsjBD := Datos.DatosDM.PrincipalADOStoredProc.Parameters.ParamByName('@MiMensaje').Value;
                   end;
                 MyClass.Free;
               end;

             Except
                ON Error: Exception DO ShowMessage ('Excepción: '+Error.Message);
             end;

           end
  if length(MiMsjBD)>0 then Application.MessageBox(PChar(MiMsjBD),'Error de ingreso de información ...',Mb_ok+mb_IconExclamation)
  else if lacepta then close;

end;
__________________
Javier Villa Sánchez
jvilla@andreaproducciones.com
Responder Con Cita