Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-07-2014
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Poder: 12
giulichajari Va por buen camino
Armar detalle de factura evitando muchos querys

Hola amigos, en mi sistema tengo un formulario Ticket con botones Agregar Producto que lleva a un form con la lista de productos. El form ticket tiene a su vez un dbgrid, que se debe ir completando a medida se van agregando productos para luego enviar esos datos al controlador fiscal. El caso es que del form lista de productos obtengo el id del producto seleccionado en la grilla al hacer click en agregar, con este id genero una consulta para llenar el DBGrid de el form ticket.

Pero el caso es que pense colocar un stringrid para realizar solo una consulta, la consulta de lista de productos tiene muchos datos como marca, precio, categoria, etc, y al estar ya en el form lista de productos, no quiero ejecutar otro query.

Entonces:

1-Como hago para ejecutar la consulta de lista de productos una sola vez y no cada vez que el usuario haga click en Agregar Producto.
2-Como llenaria el stringgrid o me conviene un dbgrid?

Agradezco sus consejos.
Responder Con Cita
  #2  
Antiguo 26-07-2014
grandzon grandzon is offline
Miembro
NULL
 
Registrado: jul 2014
Posts: 14
Poder: 0
grandzon Va por buen camino
Smile

Hola compadre.

Podría sugerirte que en la misma form tengas un grid con los productos que deseas agregar a la factura, de esa forma no harías la consulta cada que abres el formulario de producto, pues no lo tienes.

Respecto a tu segunda consulta, si piensas guardar los datos inmediatamente supongo te convendría más un dbgrid.

No soy un experto pero creo que el que todos aportemos algo hace crecer la comunidad.
Responder Con Cita
  #3  
Antiguo 26-07-2014
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Poder: 12
giulichajari Va por buen camino
Cita:
Empezado por grandzon Ver Mensaje
Hola compadre.

Podría sugerirte que en la misma form tengas un grid con los productos que deseas agregar a la factura, de esa forma no harías la consulta cada que abres el formulario de producto, pues no lo tienes.

Respecto a tu segunda consulta, si piensas guardar los datos inmediatamente supongo te convendría más un dbgrid.

No soy un experto pero creo que el que todos aportemos algo hace crecer la comunidad.
Es que tengo el form de agregar productos, lo unico que necesito es ejecutar el query que esta en el dataset de la grilla una sola vez.

Y la segunda consulta la solucione con un stringgrid, deonde voy cargando los productos.
Dado que tengo una tabla de ticket(numero,fecha,hora,importe) y una ticketproducto(idticket,idproducto) donde guardo los productos de cada ticket, pero el insert en estas tablas se va a producir una vez que se emita el ticket, osea que se confirme todo, no puedo ir insertando los articulos apenas se agregan a la grilla, es un especie de archivo que queda ahi, entonces tengo el id de los productos en el stringgrid y luego inserto todo.
Responder Con Cita
  #4  
Antiguo 29-07-2014
octavioallec octavioallec is offline
Miembro
 
Registrado: oct 2007
Posts: 17
Poder: 0
octavioallec Va por buen camino
Código de ejmplo

Hola buenas tardes desde México, con gusto coloco un procedimiento que uso en una aplicación para enviar a un StringGrid (que esta en el FormVentas) el producto seleccionado desde otro form llamado ListProducts.

Código Delphi [-]
procedure TFormVtas.AddProduct(Cve, Cant, NotaFact:String);
//El procedimiento solicita los parámetros como String para realizar las consultas sin conversiones

var x,Fila:Word;    //Para llevar el control de la fila del StringGrid
    Incide:Boolean;   //Para determinar si algún producto ya fue agregado con anterioridad
    ImpIVA,PUnitIVA:Currency;   //Para calcular el precio unitario e importe con los impuestos (IVA en México)

begin   {AGREGAR PRODUCTO A LA VENTA}
    //Cve es para ingresar el código de barras del producto a través de un TEdit, si Cve lleva el código se usa para buscar el producto, TipoPcio es una variable para indicar el tipo de precio que debera seleccionar en la búsqueda (Público, Docena, Mayoreo, Crédito) 
    if Cve<>'' then Datos.Query3.SQL.Text:='SELECT Id,Producto,'+TipoPcio+' AS PUnit,Exist,Observ,Foto,SAT FROM productos WHERE IdOficina='''+Datos.IdOficina+''' AND Codigo='''+Cve+''''
     //Si Cve pasa vacío entonces se busca por ID del producto, usando directamente el dato de la otra forma LisProducts
    else Datos.Query3.SQL.Text:='SELECT Id,Producto,'+TipoPcio+' AS PUnit,Exist,Observ,Foto,SAT FROM productos WHERE IdOficina='''+Datos.IdOficina+''' AND Id='+Datos.ClientData3.FieldByName('Id').AsString;
    Datos.Query3.Open;

    if not Datos.Query3.IsEmpty then
        if (Datos.Query3.FieldByName('Exist').AsInteger>=1) or (Datos.ProdZero=True) then   //ProdZero es un variable boleana para saber si la aplicación debe o NO descontar el producto de los inventarios o almacenes
        begin
            Incide:=False;
            Fila:=Grid1.RowCount;
            for x:=0 to Grid1.RowCount-1 do
                if Datos.Query3.FieldByName('Id').AsString=Grid1.Cells[6,x] then    //Se determina si existe algún producto repetido en la posible venta
                begin
                    Incide:=True;
                    Break;
                end;
            if Incide then   //Si existe alguna incidencia, sólo se modifica la cantidad, un poco más adelante se solicita recalcular los importes y total de la posible venta
            begin
                if (Datos.Query3.FieldByName('Exist').AsInteger>StrToInt(Grid1.Cells[1,x])) or (Datos.ProdZero=True) then
                    if Cant='' then Grid1.Cells[1,x]:=IntToStr(StrToInt(Grid1.Cells[1,x])+1)
                    else Grid1.Cells[1,x]:=CurrToStr(StrToInt(Grid1.Cells[1,x])+StrToCurr(Cant))
                else ShowMessage('La cantidad solicitada no puede ser cubierta, no hay suficiente producto');
            end else
            begin
                if Grid1.Cells[1,0]<>'' then
                begin
                    Inc(Fila);
                    Grid1.RowCount:=Fila;
                end;

                CalcPcioUnit(Datos.Query3.FieldByName('PUnit').AsCurrency,ImpIVA,PUnitIVA);   //Esta función la uso para determinar el precio con los impuestos incluidos, como TODO el código, lo puedes ajustar a tus necesidades (espero te sea de utilidad).

                if Cant='' then Grid1.Cells[1,Fila-1]:='1'
                else Grid1.Cells[1,Fila-1]:=Cant;   //SE ASIGNA LA CANTIDAD DE LOS PRODUCTOS DE UN TICKET QUE SERÁ FACTURADO

                Grid1.Cells[2,Fila-1]:=Datos.Query3.FieldByName('Producto').AsString;   //Se ingresan los datos en el StrinGrid
              //Grid1.Cells[3,Fila-1]   //SE ASIGNA EN EL PROCEDIMIENTO CALCTOTAL
              //Grid1.Cells[4,Fila-1]   //SE ASIGNA EN EL PROCEDIMIENTO CALCTOTAL
                Grid1.Cells[5,Fila-1]:='';  //SIN DATOS PARA CUIDAR LA VISUALIZACIÓN
                Grid1.Cells[6,Fila-1]:=Datos.Query3.FieldByName('Id').AsString;
                Grid1.Cells[7,Fila-1]:=Datos.Query3.FieldByName('PUnit').AsString;
                Grid1.Cells[8,Fila-1]:=CurrToStr(ImpIVA);
                Grid1.Cells[9,Fila-1]:=CurrToStr(PUnitIVA);
                Grid1.Cells[10,Fila-1]:=Datos.Query3.FieldByName('Foto').AsString;
                Grid1.Cells[11,Fila-1]:=TipoPcio;
                Grid1.Cells[13,Fila-1]:=NotaFact;

                try
                    if Grid1.Cells[10,Grid1.Row]<>'.' then Image1.Picture.LoadFromFile(Datos.PathProdImg+'\'+Grid1.Cells[10,Grid1.Row]+'.jpg')   //Aquí se inserta la referencia de la fotografía del producto seleccionado
                    else Image1.Picture:=nil;  //En caso de NO existir o fallas en la asignación se limpia el Image
                except
                    Image1.Picture:=nil;
                end;
            end;
            CalcTotal;   //Procedimiento para calcular todos los importes de cada producto y el total de la posible venta
            Edit3.Clear;
            Edit3.SetFocus;
        end else ShowMessage('La cantidad solicitada no puede ser cubierta, no hay suficiente producto')
    else ShowMessage('Producto no registrado, pida asesoría con el administrador');
    Datos.Connection1.Close;   //Al terminar se cierra la conexión a la base de datos.
end;

He tratado de documentarlo lo mejor que me ha sido posible, espero que te sea de ayuda. Saludos.

Última edición por Casimiro Notevi fecha: 29-07-2014 a las 20:52:50.
Responder Con Cita
  #5  
Antiguo 29-07-2014
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Poder: 12
giulichajari Va por buen camino
Gracias @octavioallec por tomarte ese trabajo!
Igualmente encontre en internet que es mas eficiente colocar un clientdataset y un dbgrid, es muy largo para explicar aca el proceso para crearlo, pero igual voy a probar ese codigo.,
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como armar una Linea de detalle en funcion a varios registros oscarac SQL 5 18-03-2011 07:04:07
Maestro detalle con querys josejose Varios 2 01-02-2007 20:18:13
consultas con muchos querys gabynuñez Conexión con bases de datos 0 10-06-2005 17:59:02
Factura -> Detalle nicolasdom Varios 1 17-11-2004 15:39:57
Maestro/Detalle 2 Querys FernanGil Conexión con bases de datos 2 30-09-2003 02:32:18


La franja horaria es GMT +2. Ahora son las 22:34:18.


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
Copyright 1996-2007 Club Delphi