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;
ProcedureName := 'ProductoInsertar';
Parameters.CreateParameter('@Nombre',ftString,pdInput,100,0); Parameters.CreateParameter('@Titulo',ftString,pdInput,50,0); Parameters.CreateParameter('@TituloPT',ftString,pdInput,50,0); Parameters.CreateParameter('@Circular',ftBoolean,pdInput,0,0); Parameters.CreateParameter('@Costo',ftFloat,pdInput,0,0); Parameters.CreateParameter('@Precio',ftFloat,pdInput,0,0); Parameters.CreateParameter('@TipoProducto',ftString,pdInput,50,0); Parameters.CreateParameter('@Id_Parametro_TipoProducto',ftInteger,pdInput,0,0); Parameters.CreateParameter('@Id_Parametro_UnidadMedida',ftInteger,pdInput,0,0); Parameters.CreateParameter('@Id_Parametro_Fibra',ftInteger,pdInput,0,0); Parameters.CreateParameter('@Id_Parametro_Hilatura',ftInteger,pdInput,0,0); Parameters.CreateParameter('@Id_Parametro_Color',ftInteger,pdInput,0,0); Parameters.CreateParameter('@Id_Parametro_Torsion',ftInteger,pdInput,0,0); Parameters.CreateParameter('@Id_Parametro_Procedencia',ftInteger,pdInput,0,0); Parameters.CreateParameter('@Id_Parametro_Familia',ftInteger,pdInput,0,0); Parameters.CreateParameter('@Id_Parametro_Diseno',ftInteger,pdInput,0,0); Parameters.CreateParameter('@Id_Parametro_Talla',ftInteger,pdInput,0,0); Parameters.CreateParameter('@Id_Parametro_Acabado',ftInteger,pdInput,0,0); Parameters.CreateParameter('@MiMensaje',ftString,pdOutput,100,0); Parameters.Refresh;
Parameters.ParamByName('@Nombre').Value := self.NombreEdit.Text; Parameters.ParamByName('@Costo').Value := StrToFloat(self.CostoEdit.Text); Parameters.ParamByName('@Precio').Value := StrToFloat(self.PrecioEdit.Text); Parameters.ParamByName('@TipoProducto').Value := CadLimpio; Parameters.ParamByName('@Id_Parametro_TipoProducto').Value := StrToInt(Trim(Copy(UpperCase(self.TipoComboBox.Text),58,length(self.TipoComboBox.Text)))); Parameters.ParamByName('@Id_Parametro_UnidadMedida').Value := StrToInt(Trim(Copy(UpperCase(self.UMedidaComboBox.Text),58,length(self.UMedidaComboBox.Text))));
if UpperCase(CadLimpio)='MATERIA PRIMA' then
begin
Parameters.ParamByName('@Titulo').Value := self.TituloEdit.Text; Parameters.ParamByName('@Id_Parametro_Fibra').Value := StrToInt(Trim(Copy(UpperCase(self.FibraComboBox.Text),58,length(self.FibraComboBox.Text)))); Parameters.ParamByName('@Id_Parametro_Hilatura').Value := StrToInt(Trim(Copy(UpperCase(self.HilaturaComboBox.Text),58,length(self.HilaturaComboBox.Text)))); Parameters.ParamByName('@Id_Parametro_Color').Value := StrToInt(Trim(Copy(UpperCase(self.ColorComboBox.Text),58,length(self.ColorComboBox.Text)))); Parameters.ParamByName('@Id_Parametro_Torsion').Value := StrToInt(Trim(Copy(UpperCase(self.TorsionComboBox.Text),58,length(self.TorsionComboBox.Text)))); Parameters.ParamByName('@Id_Parametro_Procedencia').Value := StrToInt(Trim(Copy(UpperCase(self.ProcedenciaComboBox.Text),58,length(self.ProcedenciaComboBox.Text) ))); Parameters.ParamByName('@TituloPT').Value := ''; Parameters.ParamByName('@Id_Parametro_Familia').Value := 0; Parameters.ParamByName('@Id_Parametro_Diseno').Value := 0; Parameters.ParamByName('@Id_Parametro_Acabado').Value := 0; Parameters.ParamByName('@Id_Parametro_Talla').Value := 0; Parameters.ParamByName('@Circular').Value := 0; 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;
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;