PDA

Ver la Versión Completa : Error de Conversion.....


chileno
05-01-2007, 17:51:54
hola a todos....necesito de vuestrar ayuda....xq esto me tiene varios dias de cabeza........
tengo un ficha que representa una orden de compra (maestro - detalle), el problema se da cuando:
- se crea un nuevo registro en blanco.
- asigno valores a los campos, en especial al campo cantidad.
- se realiza el post.
- se produce el error "Could Not Convert variant of type (string) into type (double)"
no da problemas cuando:
- se crea un nuevo registro en blanco.
- asigno valores a los campos, menos al campo cantidad "toma valor por default 0".
- se realiza el post.
- modifico el campo cantidad, relizo el post sin problemas.

necesito sugerencias que me permitan solucionar el problema.....hecho todo lo que se me ocurre.... :mad:
chau...

ContraVeneno
05-01-2007, 18:05:44
Tal vez si nos muestras la forma en que estas haciendo la asignación de valores, supongo que por ahí podría estar el problema...

se me ocurre que podrías hacer:

Valor := TuControl.AsFloat;

chileno
05-01-2007, 18:25:59
hola ContraVeneno ¡¡

la Asignacion de valores se realiza a otros campos...el campo cantidad es ingresado por teclado...atravez de un DBGrid......asociado...al dataset atravez del dataSource...por lo tanto....el dato que se ingresa es correcto pero me arroja el error.....

ContraVeneno
05-01-2007, 18:27:26
me referia a que nos mostraras la parte de código donde te marca el error...

chileno
05-01-2007, 18:31:55
eso es el problema no marca en ningun lado ...el error es enviado por el id delphi..le doy ok y salta el mismo error en el programa.....
ademas no tengo asignado ninguna rutina al campo cantidad ni al before, after del pos....

chileno
05-01-2007, 18:43:21
ContraVeneno te envio las rutinas asociadas para que veas ....okis..

crea un ficha que muestra los productos asociados a un proveedor.

procedure TFichaOrden.DBGrid1KeyPress(Sender: TObject; var Key: Char);
var nro_campo : integer;
dato : string;
begin
case key of
#13 : begin
if (DM.tbDet_orden.State = dsInsert) then
begin
nro_campo := DBGrid1.SelectedIndex;
if not (DBGrid1.Fields[nro_campo].IsNull) then
begin
dato := DBGrid1.Fields[nro_campo].Value + '%';
if (DBGrid1.SelectedField.FieldName = 'id_unidad_venta') then
begin
with TFichaBuscarUnidad.Create(Self) do
try
ZQuery1.Close;
ZQuery1.SQL.Clear;
ZQuery1.SQL.Add('select unidad_venta.id_unidad_venta, unidad_proveedor.codigo_externo, ');
ZQuery1.SQL.Add(' unidad_venta.codigo_barra, ');
ZQuery1.SQL.Add('concat(unidad_venta.descripcion," ",unidad_venta.formato) as Descripcion,');
ZQuery1.SQL.Add(' unidad_venta.costo, ');
ZQuery1.SQL.Add(' existencia.existencia, ');
ZQuery1.SQL.Add(' existencia.peso ');
ZQuery1.SQL.Add('from unidad_venta, unidad_proveedor, existencia where ');
ZQuery1.SQL.Add('unidad_venta.id_unidad_venta = unidad_proveedor.id_unidad_venta and ');
ZQuery1.SQL.Add('unidad_venta.id_unidad_venta = existencia.id_unidad_venta and ');
ZQuery1.SQL.Add('unidad_proveedor.id_unidad_venta like :pId and ');
ZQuery1.SQL.Add('existencia.id_almacen like :pId_Almacen and ');
ZQuery1.SQL.Add('unidad_venta.Bloqueado <> "Si" ');
ZQuery1.ParamByName('pId').Value := dato;
ZQuery1.ParamByName('pId_Almacen').Value := DM.tbOrdenid_almacen.Value;
ZQuery1.Open;
ShowModal;
finally
Free;
end;
end;
if DBGrid1.SelectedField.FieldName = 'codigo_externo' then
begin
with TFichaBuscarUnidad.Create(Self) do
try
ZQuery1.Close;
ZQuery1.SQL.Clear;
ZQuery1.SQL.Add('select unidad_venta.id_unidad_venta, unidad_proveedor.codigo_externo, ');
ZQuery1.SQL.Add(' unidad_venta.codigo_barra, ');
ZQuery1.SQL.Add('concat(unidad_venta.descripcion," ",unidad_venta.formato) as Descripcion,');
ZQuery1.SQL.Add(' unidad_venta.costo, ');
ZQuery1.SQL.Add(' existencia.existencia, ');
ZQuery1.SQL.Add(' existencia.peso ');
ZQuery1.SQL.Add('from unidad_venta, unidad_proveedor, existencia where ');
ZQuery1.SQL.Add('unidad_venta.id_unidad_venta = unidad_proveedor.id_unidad_venta and ');
ZQuery1.SQL.Add('unidad_venta.id_unidad_venta = existencia.id_unidad_venta and ');
ZQuery1.SQL.Add('unidad_proveedor.codigo_externo like :pId and ');
ZQuery1.SQL.Add('existencia.id_almacen like :pId_Almacen and ');
ZQuery1.SQL.Add('unidad_venta.Bloqueado <> "Si" ');
ZQuery1.ParamByName('pId').Value := dato;
ZQuery1.ParamByName('pId_Almacen').Value := DM.tbOrdenid_almacen.Value;
ZQuery1.Open;
ShowModal;
finally
Free;
end;
end;
end;
end;
end;
end;



Ficha creada......selecciono el elemento y doy enter:


procedure TFichaBuscarUnidad.DBGrid1KeyPress(Sender: TObject;var Key: Char);
var miQuery : TZQuery;
begin
if (key = #13) and (ZQuery1.RecordCount <> 0) then
begin
miQuery := TZQuery.Create(nil);
miQuery.Connection := DM.miConexion;
miQuery.Close;
miQuery.SQL.Clear;
miQuery.SQL.Add('select unidad_venta.id_unidad_venta, unidad_venta.descripcion, ');
miQuery.SQL.Add('unidad_venta.formato, unidad_venta.formato_real,unidad_proveedor.codigo_externo ');
miQuery.SQL.Add('from unidad_venta, unidad_proveedor where unidad_venta.id_unidad_venta =:pID and ');
miQuery.SQL.Add('unidad_venta.id_unidad_venta = unidad_proveedor.id_unidad_venta and ');
miQuery.SQL.Add('unidad_proveedor.rutproveedor =:pRut ');
miQuery.ParamByName('pID').Value := ZQuery1.FieldValues['id_unidad_venta'];
miQuery.ParamByName('pRut').Value := DM.tbOrdenrutProveedor.Value;
miQuery.Open;
//DM.tbDet_orden.Edit;
DM.tbDet_ordenid_unidad_venta.Value := miQuery.FieldValues['id_unidad_venta'];
DM.tbDet_ordencodigo_externo.Value := miQuery.FieldValues['codigo_externo'];
DM.tbDet_ordendescripcion.Value := miQuery.FieldValues['descripcion'];
DM.tbDet_ordenformato.Value := miQuery.FieldValues['formato'];
DM.tbDet_ordenformato_real.Value := miQuery.FieldValues['formato_real'];
// DM.tbDet_Orden.Post;
close;
end;
end;

rcarrillom
06-01-2007, 00:55:41
Tal vez el problema es que difieren el formato de número que tiene la BD y el formato local de la PC donde realizas la captura. Algo similar me sucede cuando ejecuto un programa con la config regional de Mexico, ya que el programa y bd en Access fueron hechos con la config de UK, es como si la pc local mandara un 1,234.98 al campo numérico y la bd espera 1.234,98

Saludos

ContraVeneno
06-01-2007, 01:03:28
como sugeria en mensajes anteriores, deberias utilizar:

DM.tbDet_ordendescripcion.AsString:=miQuery.FieldByName('descripcion').AsString;

lo mismo puedes utilizar AsString, como AsInteger, AsDateTime, AsFloat... en fin, según requieras...

Al utilizar:
DM.tbDet_ordendescripcion.Value:=miQuery.FieldValues['descripcion'];
esta última en algunas ocasiones (como puede ser este caso) te puede ocasionar errores de conversión.