Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Error de Conversion..... (https://www.clubdelphi.com/foros/showthread.php?t=38957)

chileno 05-01-2007 17:51:54

Error de Conversion.....
 
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:
Código Delphi [-]
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.
Código Delphi [-]
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:

Código Delphi [-]
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:

Código Delphi [-]
DM.tbDet_ordendescripcion.AsString:=miQuery.FieldByName('descripcion').AsString;

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

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


La franja horaria es GMT +2. Ahora son las 17:40:51.

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