Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Error Sumando Columnas SQL (https://www.clubdelphi.com/foros/showthread.php?t=79954)

mamaro 25-08-2012 04:30:22

No he utilizado nunca SQLite, pero te diré que los componentes Zeos utilicé durante bastante tiempo con Firebird y ahora tuve que migrar a utilizar los nativos de Delphi porque me daban algunos problemas (a partir de la version 2.1 de Firebird)

Si fuera Firebird te recomendaría que te ahorraras algunos problemas metiendo código dentro de la base de datos (en los Triggers) para calcular los totales de las facturas por ejemplo, utilizar llaves foráneas para verificar la integridad de los datos, y utilizaras el sistema de transacciones para no recurrir a tablas temporales.

Como te lo dije más arriba nunca e utilizado SQLite por lo que no sé si estas cosas son posibles en esa base de datos pero no perderías nada averiguándolo.

Caral 25-08-2012 04:42:13

Hola
Curioso un error de sintaxis.:o
Prueba esto:
Código Delphi [-]
              ZQueryBD.Close;
              ZQueryBD.SQL.Text:= 'Insert Into facturaTemp values ( :num, :art, :cant, :bpre )';
              ZQueryBD.Params[0].Value := intToStr(numero);
              ZQueryBD.Params[1].Value := arti;
              ZQueryBD.Params[2].Value := Edit2.Text;
              ZQueryBD.Params[3].Value := Prec;
              ZQueryBD.ExecSQL;

o esto:
Código Delphi [-]
              ZQueryBD.SQL.Text:= 'Insert Into facturaTemp (ID, Articulo, Cantidad, Precio) values ( :num, :art, :cant, :xpre )';
              ZQueryBD.Params[0].Value := IntToStr(numero);
              ZQueryBD.Params[1].Value := arti;
              ZQueryBD.Params[2].Value := Edit2.Text;
              ZQueryBD.Params[3].Value := Prec;
              ZQueryBD.ExecSQL;
Me comentas que paso.
saludos

martini002 25-08-2012 14:59:54

Sigue igual Caral,
voy a intentar reescribir otra vez,
vamos a ver como me va, usare parametros
y una idea nueva con lo de las tablas.

te agradezco mucho el tiempo y la ayuda :)

martini002 25-08-2012 18:36:04

Porfin! Quedo resuelto,
Gracias a todos por su contribucion, en especial a Caral
les muestro como quedo el codigo.

No estoy usando los parametros,
porque me estan dando errores que desconozco

Gracias

Código Delphi [-]
procedure TForm1.BAgregarClick(Sender: TObject);
begin
  if ECodigo.Text<>'' then       //Condicion de codigo en blanco
    begin
      ZQueryBD.Close;
      ZQueryBD.SQL.Text:= 'Select Codigo From Inventario Where Codigo = '+ECodigo.Text;
      ZQueryBD.Open;
      if ZQueryBD.IsEmpty then //Controlar el Codigo del producto
                               //Verifica si es correcto o no entrara a las otras condiciones.
        Begin
          ShowMessage('El Codigo del Producto es Invalido o NO esta Registrado');
        End                    //Controlar el codigo del producto si es correcto
      Else                     //entonces entrara en esta codicion
        begin
          //Si Cantidad es correcta
          if StrToInt(ECantidad.Text)>=1 then
            begin
              //Seleccionamos Producto y precio desde inventario
              //y transferimos a la Factura Temporal
              ZQueryBD.Close;
              ZQueryBD.SQL.Text:= 'Insert Into FacturaTemp (Articulo, Cantidad, Precio) Select Articulo, '+
                                   ECantidad.Text+', Precio * '+ECantidad.Text+' From Inventario Where Codigo = '+ECodigo.Text;
              ZQueryBD.Open;

              //Muestro en el DBGrid todo lo de factura
              ZQueryBD.Close;
              ZQueryBD.SQL.Text:= 'Select * From FacturaTemp';
              ZQueryBD.Open;

              //Sumo el Total
              ZQuery1.Close;
              ZQuery1.SQL.Text:=  'Select Sum(Precio) as Suma From FacturaTemp';
              ZQuery1.Open;
              ETotal.Text:= ZQuery1.FieldByName('Suma').AsString +' BsF';
            end
          Else //Cantidad correcta o No
            begin
              ShowMessage('La Cantidad debe ser Mayor o Igual que 1');
            end;
        end;
    end
  Else
    begin
      ShowMessage('Ingrese un Codigo'); //Condicion de codigo en blanco
    end;
end;


procedure TForm1.BDespacharClick(Sender: TObject);
Var
  Codigo :Integer;
  Total  :String;
begin
  //Selecciona monto total para registrar
  Total:='';
  ZQuery1.Close;
  ZQuery1.SQL.Text:= 'Select Sum(Precio) as Precio From FacturaTemp';
  ZQuery1.Open;
  Total:= ZQuery1.FieldByName('Precio').AsString+' BsF';

  //Seleccionar maximo codigo y sumarle 1
  ZQuery1.Close;
  ZQuery1.SQL.Text := 'Select Max(CodigoFactura) as CodigoFactura from FacturaDetalle';
  ZQuery1.Open;
  Codigo:= ZQuery1.FieldByName('CodigoFactura').AsInteger;
  Codigo:= Codigo+1;

  //Transferir datos desde la temporal a la final
  ZQueryBD.Close;
  ZQueryBD.SQL.Text:= 'Insert Into FacturaDetalle Select '+IntToStr(Codigo)+', Articulo, Cantidad, Precio From FacturaTemp';
  ZQueryBD.ExecSQL;

  ZQueryBD.SQL.Text:= 'Delete From facturaTemp';
  ZQueryBD.ExecSQL;

  ETotal.Text:='0.00 BsF';
  ECodigo.Text:='';
  ECantidad.Text:='1';
end;

Caral 25-08-2012 20:28:57

Hola
Me alegro.^\||/
Saludos


La franja horaria es GMT +2. Ahora son las 11:28:44.

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