Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Perdida de Campos en Memória de un Frm o otro (https://www.clubdelphi.com/foros/showthread.php?t=43286)

BlackDaemon 07-05-2007 20:54:59

Perdida de Campos en Memória de un Frm o otro
 
Bueno, siento no haber sido claro en el título, pero no sabía que poner, el problema es el siguiente tengo 2 tablas una Productos y otra Tarifas
Y en un formulário para agregar los items a un StringGrid tengo una consulta de esta forma

Código Delphi [-]
procedure TFrmAgregarItems.EcodigoChange(Sender: TObject);
begin
  with DM.ZQAgregarItems do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT prod.*, tari.*');
    SQL.Add('FROM productos AS prod JOIN tarifas AS tari');
    SQL.Add('ON prod.id_producto = tari.id_producto');
    SQL.Add('WHERE tari.listaprecio = :Prec');
    SQL.Add('AND CodigoBarra LIKE "%'+Ecodigo.Text+'%"');
    ParamByName('Prec').AsString := FrmVentas.CBListaPrecio.Text;
    Open;
  end;
end;

Por si es de ayuda la estructura de mi tabla Tarifas
Código SQL [-]
CREATE TABLE `tarifas` (
  `Id_producto` int(11) unsigned NOT NULL,
  `CodigoBarra` bigint(20) NOT NULL,
  `CodProducto` varchar(20) NOT NULL,
  `ListaPrecio` varchar(10) NOT NULL,
  `Precio` double NOT NULL,
  KEY `id_producto` (`Id_producto`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `tarifas`
  ADD CONSTRAINT `FK_tarifas_1` FOREIGN KEY (`Id_producto`) REFERENCES `productos` (`ID_producto`) ON DELETE CASCADE ON UPDATE CASCADE;

Uso un componente ZQuery llamado ZQAgregarItems con el realizo la consulta de búsqueda del campo CodigoBarra que se encuentra en la tabla Tarifas ( no se si poner Tari.CodigoBarra aunque como esta no da problemas)
Bueno, una ves realizada la búsqueda los resultados me los muestra en un DBgrid donde solo muestro 3 campos, luego 2 clic y me despliega los demás campos en unos DBEdits, que son solo para visualizar, y otros como por ej precio, cantidad, eso son Edits para que el usuario los llene, luego le da aceptar y tiene que llenarse una fila en el StringGrid Perooooo ( he aquí el dilema :D) Ahora en el form Ventas, donde tengo el StringGrid tengo un Botón desde donde llamo al form BusquedaItems, es del que les he comentado hace un momento, bueno, tengo un blucle que si cumple sierta condición agregue el items al StringGrid, ahora en este form tengo un ComboBox donde tengo las listas de precios que son algo como, precio1, precio2, precio3 .... precio6, son para filtrar los precios y sepa de que campo tomar el respectivo precio para agregarlo al StringGrid, bueno todo normal, realizo la búsqueda en el otro form pero al obtener el campo precio1 (o depende del que este en el combobox) me tira un error, como si no existiera, Ahora mi duda es, cuando realizo la búsqueda el componente ZQuery tiene en memória ese campo ?? Según creo si lo tiene, PERO al cerrar ese form, y querer agregar el items al StringGrid Pierde lo que tenía en memória ??? no creo, por que no estoy haciendo un Zquery.sql.clear, o un close, no se, esa es mi duda, por que me marca un error ZQAgregarItems : field "precio" not found


Como podría acceder a al campo Precio1, o Precio2, etc de mi Tabla Tarifas con FielByName ??
Nesesito este campo para poder agregarlo a mi StringGrid.

Esta es la parte de mi código donde intento acceder el precio1 con fieldByName

Código Delphi [-]
        If Cuenta > 1 then SGListaProductos.RowCount := SGListaProductos.RowCount + 1;
          SGListaProductos.Cells[1,cuenta] := FrmAgregarItems.ECantidad.Text;
          SGListaProductos.Cells[2,cuenta] := DM.ZQAgregarItems.FieldByName('unidad').AsString;
          SGListaProductos.Cells[3,cuenta] := DM.ZQAgregarItems.FieldByName('codproducto').AsString;
          SGListaProductos.Cells[4,cuenta] := DM.ZQAgregarItems.FieldByName('codigobarra').AsString;
          SGListaProductos.Cells[5,cuenta] := DM.ZQAgregarItems.FieldByName('descripcion').AsString;
          SGListaProductos.Cells[6,cuenta] := DM.ZQAgregarItems.FieldByName('unidadprecio').AsString;

          case CBListaPrecio.ItemIndex of
            0:Precio := DM.ZQAgregarItems.FieldByName('Precio1').Value;
            1:Precio := DM.ZQAgregarItems.FieldByName('Precio2').Value;
            2:Precio := DM.ZQAgregarItems.FieldByName('Precio3').Value;
            3:Precio := DM.ZQAgregarItems.FieldByName('Precio4').Value;
            4:Precio := DM.ZQAgregarItems.FieldByName('Precio5').Value;
            5:Precio := DM.ZQAgregarItems.FieldByName('Precio6').Value;
          end;

          SGListaProductos.Cells[7,cuenta] := Precio; 
          SGListaProductos.Cells[8,cuenta] := Format('%8.2f',[StrToFloat(Precio) * StrToFloat(SGListaProductos.Cells[1,cuenta])]);

Bueno, ahora no se como poder hacer eso, para así poder agregar un Items a mi StringGrid, les digo que agrega TODOS los campos al stringGrid, menos el campo ListaPrecio

saludos

PD aquí les dejo los SS de los 2 form para que se den cuenta.
FrmVentas
http://img443.imageshack.us/img443/4800/ventasud6.jpg
FrmAgregarItems
http://img399.imageshack.us/img399/5...aritemsts9.jpg

:eek:

BlackDaemon 15-05-2007 01:42:10

Bueno, ninguna idea ? O no he sido muy claro en el título de mi tema ?
O es que no lo han entendído mi post, bueno, sigo esperando.. gracias por leer

saludos..

Lepe 15-05-2007 17:16:14

Es que no tiene sentido este código:
Código Delphi [-]
 case CBListaPrecio.ItemIndex of
            0:Precio := DM.ZQAgregarItems.FieldByName('Precio1').Value;
            1:Precio := DM.ZQAgregarItems.FieldByName('Precio2').Value;
            2:Precio := DM.ZQAgregarItems.FieldByName('Precio3').Value;
            3:Precio := DM.ZQAgregarItems.FieldByName('Precio4').Value;
            4:Precio := DM.ZQAgregarItems.FieldByName('Precio5').Value;
            5:Precio := DM.ZQAgregarItems.FieldByName('Precio6').Value;
          end;

La sql queda al final como:
Código SQL [-]
SELECT prod.*, tari.*
FROM productos AS prod JOIN tarifas AS tari
ON prod.id_producto = tari.id_producto
WHERE tari.listaprecio = 'Precio1' // suponemos que el usuario ha elegido en el  CBListaPrecio el "precio1".
Es decir, solo estas pidiendo el precio1 para todos los productos que tienes en la Base de datos.
En resumen, ese código se traduce a:
Código Delphi [-]
  Precio := DM.ZQAgregarItems.FieldByName('Precio').Value;
puesto que previamente has pedido el "precio1" en el combo, en la consulta solo estará el Precio de esa tarifa.

Si te dice que no encuentra el campo "precio", dale un doble clic a tu query ZQAgregarItems, en la ventana que sale, borra todos los campos y después con el boton derecho añade los campos de nuevo.

Saludos


La franja horaria es GMT +2. Ahora son las 18:02:33.

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