Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-01-2018
javicho_villa javicho_villa is offline
Miembro
 
Registrado: feb 2005
Ubicación: Lima - Perú
Posts: 99
Poder: 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
  #2  
Antiguo 20-01-2018
javicho_villa javicho_villa is offline
Miembro
 
Registrado: feb 2005
Ubicación: Lima - Perú
Posts: 99
Poder: 20
javicho_villa Va por buen camino
El problema se centra en el parametro de salida @MiMensaje, pero no se que mas hacer, mil disculpas por colocar un código tan extenso.
nuevamente gracias por la atención prestada.
__________________
Javier Villa Sánchez
jvilla@andreaproducciones.com
Responder Con Cita
  #3  
Antiguo 20-01-2018
javicho_villa javicho_villa is offline
Miembro
 
Registrado: feb 2005
Ubicación: Lima - Perú
Posts: 99
Poder: 20
javicho_villa Va por buen camino
Smile Solucion

Gracias de antemano por leer este item.
La solución era super sencilla, a pesar de que es un parametro de salida, siempre se le tiene que asignar un valor, la verdad me he leido tantos hilos en este foro y en internet tantas paginas que ya me estaba desesperando, el código, la linea de solución es:

Código Delphi [-]

                 with Datos.DatosDM.PrincipalADOStoredProc do
                   begin
                     Close;
                     Parameters.Clear;
                     Parameters.ParseSQL('ProductoInsertar',TRUE);
                     ProcedureName := 'ProductoInsertar';
                     Parameters.CreateParameter('@Nombre',ftString,pdInput,100,0);      //1
                     .......
                     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('@MiMensaje').Value                 := '';
                     Parameters.ParamByName('@Nombre').Value                    := self.NombreEdit.Text;             //1
                     Parameters.ParamByName('@Costo').Value                     := StrToFloat(self.CostoEdit.Text);  //2

También el refresh, me ayudo bastante, les recomiendo usarlo.

Gracias nuevamente, si alguien sabe usar el Parameter.ParseSql por fa, explíquenme por favor para que sirve que me he quedado con la duda.

Saludos.
__________________
Javier Villa Sánchez
jvilla@andreaproducciones.com
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Pocos parámetros. Se esperaba... tubidericota Conexión con bases de datos 10 03-06-2010 22:46:41
¿Imposible? SELECT campo Like '%:param%' Bauhaus1975 Conexión con bases de datos 4 02-04-2009 19:19:41
Se esperaba un objeto Io HTML, Javascript y otros 3 04-10-2007 18:23:13
cuando a una fecha le resto una cantidad de dias,no se en que formato enviar el param federiconqn21 Firebird e Interbase 1 10-04-2006 17:32:37
En un stored procedure, ¿Cómo uso un arreglo como param de entrada? cuxoapat Firebird e Interbase 0 04-03-2005 19:54:42


La franja horaria es GMT +2. Ahora son las 18:47:54.


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
Copyright 1996-2007 Club Delphi