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)
-   -   BD con campos establecidos y dinamicos (https://www.clubdelphi.com/foros/showthread.php?t=79907)

martini002 21-08-2012 00:17:14

BD con campos establecidos y dinamicos
 
Saludos donde quiera que se encuentren.

Amigos de la comunidad, en esta ocasion,
les traigo un problemita, que de verdad, no tengo ni la menor
idea, de como buscarlo o resolverlo, con su experiencia
creo que no seria dificil para ustedes, pero digamos que esta picante,
a ver, como ustedes resolverian esto? a ver si me explico bien que es hasta complicado,

Tenemos una base de datos dinamica, en la cual ingresamos datos,
y luego los borramos, porque sirve solo a modo visual y luego para crear otros registros,
pero ese no es el punto, la cuestion es que la BD se comporta de la siguiente manera,
Vamos agregando registros, N Cantidad, eso lo definimos nosotros mediante un control,
estamos bien hasta alli, pero ahora supongamos que en esos registros,
tenemos uno de Tipo Integer, "Precio".

La cuestion es, como definiriamos una ultima fila donde se almacene
la sumatoria de toda la columna de precios?
y que esta siempre quede de ultimo,
osea ella esta definida alli, sumando todos los elementos de arriba,
Pienso yo que podriamos ir agregando los registros,
ANTES, de esa ultima fila, eso es lo que me tiene cabezon.

Gracias por su tiempo y ayuda como siempre,
la tecnologia se transfiere pero la experiencia es intransferible :)

Caral 21-08-2012 00:30:07

Hola
Para que una fila para sumar otra?.
Me imagino que se nenesita el dato de la suma, no se necesita guardarlo.
Me parece que con sum() de sql sera suficiente.
Saludos

martini002 21-08-2012 00:34:45

No, no, una ultima fila para sumar toda una columna.

Mira esta foto, asi es como me gustaria que estuviera



Gracias

Caral 21-08-2012 00:41:53

Hola
Eso es exel, no una tabla.
Las tablas no se manejan asi, si sumas todos los datos y guardas esa informacion en el ultimo campo la siguiente suma tomara ese dato.
Por eso digo que es cuestion de presentar el dato, no de guardarlo, para verlo asi usa un stringrid.
Saludos

martini002 21-08-2012 00:53:34

No Caral, no me he sabido explicar,
la cuestion es que valla sumando en tiempo de ejecucion a la columna Precio,
eso es excel, pero es una representacion mas o menos de lo que tengo en mente,

Mira consegui esto:
Código:

  Select Sum(campo)
  From TablaX

Dejame probarlo y te cuento :)

Caral 21-08-2012 00:57:49

Hola
Te as explicado bien.
Sum() lo que hara sera sumar los datos, pero no guardarlos.
Si sigues empeñado en guardar el dato deberias de crear otro campo para identificar si es suma o no y otro para la suma, no me parece logico no practico.
No lo vas a poder mostrar en un dbgrid de la forma que quieres.
Saludos

martini002 21-08-2012 02:19:43

Mira lo resolvi, no como queria pero igual me funciona muy bien
inclusive mejor, hice esto mira:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
Var
  Suma:Integer;
begin
if StrToInt(Edit1.Text)>0 then
  ZQueryBD.Close;
  ZQueryBD.SQL.Clear;
  ZQueryBD.SQL.Text:= 'Insert Into Factura (Articulo, Precio) Select Articulo, Precio From Inventario Where Codigo = '+Edit1.Text;
  ZQueryBD.Open;
  ZQueryBD.Close;
  ZQueryBD.SQL.Clear;
  ZQueryBD.SQL.Text:= 'Select * From Factura';
  ZQueryBD.Open;
  ZQuery1.Close;
  ZQuery1.SQL.Clear;
  ZQuery1.SQL.Text:=  'Select Sum(Precio) as Suma From Factura';
  ZQuery1.Open;
  Edit3.Text:= ZQuery1.FieldByName('Suma').AsString+' BsF';
end;

:D
Gracias

Chris 21-08-2012 03:57:23

No dices que motor de DB estás utilizando.

Por un lado, parece que estás utilizando la DB para almacenar datos temporales, cosa que no es recomendado. En su lugar utiliza un componente como TJvMemoryDataset. Ése componente es parte de la suite Jedi Delphi (Gratuitos).

Por último, si es necesario utilizar la Base de datos como almacenamiento temporal, te recomiendo que utilices la claúsula UNION de SQL para conseguir lo que quires.

Saludos.

martini002 21-08-2012 04:00:55

Buen punto Chris,

Estoy usando Zeos como gestor,
y SQLite, estoy usando una tabla para almacenamiento temporal
de los datos de la facturacion, la cual se borra cada vez que valla a crearse otra
entonces en el momento que la factura esta lista, esta tabla vacia esos datos
en otra que es donde se guardaran los registros de facturas, en tablas individuales,
no creo que sea el mas optimo proceso, pero hasta ahora es el que me conozco.

Hermano no conozco mucho sobre esto realmente,
por ejemplo cuando hablas de TJvMemoryDataset realmente me capturas
fuera de la base, y cuando mencionas la claúsula UNION de SQL me haces el out :/

que me sugieres?
Gracias

Casimiro Noteví 21-08-2012 10:41:36

Cita:

Empezado por martini002 (Mensaje 440152)
que me sugieres?

Evidentemente, un tutorial de lenguaje SQL y un libro de delphi y bases de datos.

roman 21-08-2012 17:01:38

Cita:

Empezado por martini002 (Mensaje 440152)
cuando mencionas la claúsula UNION de SQL me haces el out :/

Cuando tienes dos consultas SQL que devuelven el mismo número de columnas y del mismo tipo, puedes unir sus filas resultantes cono si fuera una sola consulta usando un clásula UNION. En tucaso, serí algo como

Código SQL [-]
select articulo, precio from articulos

union

select 'total', sum(precio) from articulos

// Saludos


La franja horaria es GMT +2. Ahora son las 08:26:04.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi