Prueba quitando Active. Si no me equivoco esto es una función que devuelve si el query está ejecutado o no.
Por otro lado, utiliza parámetros siempre que puedas. Evita un montón de errores (por ejemplo si meten una comilla simple en la descripción.
Además es mucho mas facil leer el código.
Por otro lado, ¿cuál es el error?
- Crea un registro con el valor de IMAGEN nulo.
- Crea un registro con el valor de IMAGEN erróneo/cortado.
- Da un error al ejecutar el Query ¿Cúal?
Código Delphi
[-]
Frm_Producto.Visible := true;
Frm_Producto.Show;
MS := TMemoryStream.Create;
try
MS.LoadFromFile(D_Img.FileName);
with DataModuleLACM.UniQuery1 do
begin
sql.Clear;
sql.Add(' INSERT INTO CM_PRODUCTO ( ');
sql.Add(' IMAGEN, BARCODE, DESCRIPCION, INV_MIN, CAJA, UND, F_CREAR_PROD, ID_CATG, ID_MARCA, ESTADO_PROD) ');
sql.Add(' VALUES ( ');
sql.Add(' :IMAGEN, :BARCODE, ESCRIPCION, :INV_MIN, :CAJA, :UND, :F_CREAR_PROD, :ID_CATG, :ID_MARCA, :ESTADO_PROD) ');
ParamByName('IMAGEN').LoadFromStream(MS, ftGraphic);
ParamByName('BARCODE').AsString := EdtCod_Barra.Text;
ParamByName('DESCRIPCION').AsString := EdtDescripcion.Text;
ParamByName('INV_MIN').AsString := EdtInve_Min.Text;
ParamByName('CAJA').AsString := EdtCaja.Text;
ParamByName('UND').AsString := EdtUnd.Text;
ParamByName('F_CREAR_PROD').AsString := EdtFecha.Text;
ParamByName('ID_CATG').AsString := DBEdt_Categoria_id.Text;
ParamByName('ID_MARCA').AsString := DBEdt_Marca_id.Text;
ParamByName('ESTADO_PROD').AsString := 'Activo';
ExecSQL;
Close;
end;
finally
MS.Free;
free;