Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Como actualizo los datos, si ademas realizo un calculo. (https://www.clubdelphi.com/foros/showthread.php?t=71778)

caifan_0883 10-01-2011 22:06:04

Como actualizo los datos, si ademas realizo un calculo.
 
Que tal Compañeros foreros.

Ando con un pequeño detalle que me trae algo traumado por que no sale.

Lo que quiero realizar es que un campo PRECIO se actualize con respecto a otro campo pero aumentandole un porcentaje.

Ejemplo:

Precio 1: Valor de 10
Precio 2: Este valor lo quiero actualizar desde un Update. (Precio1*1.07)

Lo intente de 2 maneras, por AdoQuery y por AdoTables, sin ningun éxito en las 2.

Las tablas que estoy manejando son DBF.

Les pongo mis dos intentos tanto de AdoQuery y AdoTables, para que me ayuden o asesores como corregirlos. Desde ya muchas gracias.

ADOQUERY
Código:

  AdoQuery1.Active:=False;
  AdoQuery1.SQL.Clear;
  AdoQuery1.SQL.Text:='UPDATE MGW10005 SET CPRECIO2=CPRECIO1*1.07';
  AdoQuery1.Active:=True;

El error que me marca aqui es: raised exception class EdatabaseError with message 'ADOQUERY1: Commandtext does not return a result set'


con AdoTable
Código:

      Adotable1.Edit;
        Adotable1.FieldByName('CPRECIO2').Value:=(AdoTable1.FieldByName('CPRECIO1').Value);
        Adotable1.Post;

El error que me marca aqui es: raised exception class EOleException with message [Microsoft][ODBC Visual Foxpro Driver] SQL: Statement too long.

Chris 10-01-2011 22:13:31

En el primero el problema es que estás utilizando "Active:=True" que se utiliza con clausulas SELECT, las que devuelven datos. Cómo este no es el caso, debes utilizar en su lugar el procedimiento llamado ExecSQL, que es para actualizaciones e inserciones de registro. Por lo anteriormente dicho, tu código debería quedar así:
Código Delphi [-]
  AdoQuery1.Active:=False;
  AdoQuery1.SQL.Clear;
  AdoQuery1.SQL.Text:='UPDATE MGW10005 SET CPRECIO2=CPRECIO1*1.07';
  AdoQuery1.ExecSQL;

Saludos

PD.: El segundo problema está mucho más complicado. Parece que nace del controlador ODBC para Visual Foxpro.

caifan_0883 10-01-2011 22:19:14

Mil Gracias...
 
Muchas gracias Chris, me solucionaste un dolorazo de cabeza...
Voy a tener mas cuidado, en los active de los querys...

Solucionado con lo de los querys, ya ni le muevo a los tables..

Mil Gracias...

Cita:

Empezado por Chris (Mensaje 387126)
En el primero el problema es que estás utilizando "Active:=True" que se utiliza con clausulas SELECT, las que devuelven datos. Cómo este no es el caso, debes utilizar en su lugar el procedimiento llamado ExecSQL, que es para actualizaciones e inserciones de registro. Por lo anteriormente dicho, tu código debería quedar así:
Código Delphi [-] AdoQuery1.Active:=False; AdoQuery1.SQL.Clear; AdoQuery1.SQL.Text:='UPDATE MGW10005 SET CPRECIO2=CPRECIO1*1.07'; AdoQuery1.ExecSQL;


Saludos

PD.: El segundo problema está mucho más complicado. Parece que nace del controlador ODBC para Visual Foxpro.



La franja horaria es GMT +2. Ahora son las 23:09:22.

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