Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-11-2007
Petolansa Petolansa is offline
Miembro
 
Registrado: jul 2005
Posts: 159
Poder: 19
Petolansa Va por buen camino
Problemas con query y parametros

Buenas gente esto lo hice con las ayuda de los foros y seria lo que necesito para un query pata que me imprima.
Esto me dice Invalid parameter, me podrian decir a que se puede deber?

Código SQL [-]
SELECT Factura.NumFactura, Factura.Fecha, Factura.Clicod, Clientes.Clinom, 
Clientes.Clidom, Clientes.Clicuit, Clientes.Clitel, Factura.Emplecod, Facdetalle.Codipro,
 Facdetalle.Concepto, Facdetalle.Cantidad, Facdetalle.Precio, Factura.SubTotal,
 Factura.Descuento, Factura.importetotal
FROM Stock RIGHT JOIN (Clientes RIGHT JOIN (Factura LEFT JOIN Facturadetalle 
ON (Factura.Tipofac = Facdetalle.Tipofac) AND (Factura.Numfactura = Facdetalle.Numfactura)) 
ON Clientes.Clicod = Factura.Clicod) ON Stock.Procod = Facdetalle.Codipro;

En ese codigo nececitaria realizar una operacion y mostarla, nesecitaria calcular los campos de la tabla
facdetalle CANTIDAD* PRECIO, como precioneto, lei que se pone AS PRECIO NETO, pero no se como definir cantidad y precio


Todas esas condiciones quiero que se cumplan segun mi el form que trabaje antes que seria el que llama
al query, donde tengo las variables tipofac y numfac que serian los que tienen guardado el ultimo nro de factura
y el tipo que fue el ultimo que postie.

como ahria esa condicon, tendria que definir parametros no? el tema es que no puedo porque lo de arriba me da error.


Código SQL [-]
WHERE Factura.Numfactura=Nrofact AND Factura.Tipofac=TipoFact


Desde ya muchas gracias.
Responder Con Cita
  #2  
Antiguo 21-11-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Código Delphi [-]
with TuQuery do begin
 if active then close;
 sql.clear;
 SQL.Add('SELECT F.NumFactura, F.Fecha, F.Clicod, F.Emplecod, F.SubTotal, F.Descuento, F.importetotal, ');
 SQL.Add('C.Clinom, C.Clidom, C.Clicuit, C.Clitel,');
 SQL.Add('FD.Codipro,  FD.Concepto, FD.Cantidad, FD.Precio');
 SQL.Add('FROM Stock S ');
 SQL.Add('JOIN Facturadetalle FD ON S.Procod = FD.Codipro');
 SQL.Add('JOIN Factura F ON (FD.Tipofac = F.Tipofac AND FD.Numfactura = F.Numfactura) ');
 SQL.Add('JOIN Clientes C ON F.Clicod = C.Clicod');
 SQL.Add('WHERE F.Numfactura= :Nrofact AND F.Tipofac= :TipoFact ');
 ParamByName('NroFact').AsString := NumFact;
 ParamByName('TipoFact').AsInteger := TipoFact;
 Open;
end; //with
__________________

Responder Con Cita
  #3  
Antiguo 21-11-2007
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Primero y principal:
Creo que está mal hecho el sql.
La forma correcta de hacerlo debería ser así:

Código SQL [-]
select a.campo1,a.campo2,a.campo3,
         b.campo1,b.campo2,b.campo3,
         c.campo1,c.campo2,c.campo3
from tabla1 a
[left/right] join tabla2 b
on (a.campo1=b.campo1)
[left/right] join tabla3 c
on (b.campo1=c.campo1) and (b.campo2=c.campo2)
where
a.campo1=1234
Código SQL [-]
SELECT Factura.NumFactura, Factura.Fecha, Factura.Clicod, Clientes.Clinom, 
Clientes.Clidom, Clientes.Clicuit, Clientes.Clitel, Factura.Emplecod, Facdetalle.Codipro,
 Facdetalle.Concepto, Facdetalle.Cantidad, Facdetalle.Precio, Factura.SubTotal,
 Factura.Descuento, Factura.importetotal
FROM Stock 

RIGHT JOIN Clientes 
ON Stock.Procod = Facdetalle.Codipro;

RIGHT JOIN Factura 
ON Clientes.Clicod = Factura.Clicod) 

LEFT JOIN Facturadetalle 
ON (Factura.Tipofac = Facdetalle.Tipofac) AND (Factura.Numfactura = Facdetalle.Numfactura)) 

WHERE Factura.Numfactura=:Nrofact AND Factura.Tipofac=:TipoFact

Tambien deberías tener en cuenta el orden en que haces los joins. Sobre todo si son left o right join.
En este caso deberías poner primero From Facturas (porque filtras por su número y tipo) y esta factura unirla al resto de tablas (detalle,cliente,stock)
Tambien veo que no utilizas la tabla stock. Quizás no debas meterla en este select.

Código SQL [-]
SELECT Factura.NumFactura, Factura.Fecha, Factura.Clicod, Clientes.Clinom, 
Clientes.Clidom, Clientes.Clicuit, Clientes.Clitel, Factura.Emplecod, Facdetalle.Codipro,
 Facdetalle.Concepto, Facdetalle.Cantidad, Facdetalle.Precio, Factura.SubTotal,
 Factura.Descuento, Factura.importetotal
FROM Factura 

LEFT JOIN Facturadetalle 
ON (Factura.Tipofac = Facdetalle.Tipofac) AND (Factura.Numfactura = Facdetalle.Numfactura)) 

RIGHT JOIN Clientes 
ON Clientes.Clicod = Factura.Clicod) 

JOIN Stock
ON Stock.Procod = Facdetalle.Codipro;

WHERE Factura.Numfactura=:Nrofact AND Factura.Tipofac=:TipoFact

Última edición por duilioisola fecha: 21-11-2007 a las 21:48:41.
Responder Con Cita
  #4  
Antiguo 21-11-2007
Petolansa Petolansa is offline
Miembro
 
Registrado: jul 2005
Posts: 159
Poder: 19
Petolansa Va por buen camino
Muchas gracias

Gracias gente, pongo en un boton de imprimir la sentencias que me dieron y funciona de 10, evidentemente tenia un problema con la comprension de la sintaxis, a paesar que medio cerca estuve . Todo esto es nuevo para mi.

Una cosa mas les queria pedir, Como relaciono estoo para que me lo muestre en un quick report?

Lo que hice gue agregar en la propiedad las sentencias que me dieron, entonces, al cativar el query se me agregaron todos los campos.

Hice el diseño, Puse un Page header, y puse los campos de la factura, que serian los fijos, una banda de detal, en dodne puse los encabezados de Codigo, cantidad, precio, precio neto. Y un page footer donde van los detalles de la factura.

EL query puse que se abra el query con los aprametros, pero no me aparece nada.

COmo se haria?

Desde ya muchas gracias
Responder Con Cita
  #5  
Antiguo 21-11-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Enlaces el QuickReport al query que estas abriendo con la propiedad "Dataset" del quickreport.

Luego, enlazas cada uno de los QRDBText que tengas a su campo correspondiente, utilizando las propiedades "Dataset"y "DataField"
__________________

Responder Con Cita
  #6  
Antiguo 22-11-2007
Petolansa Petolansa is offline
Miembro
 
Registrado: jul 2005
Posts: 159
Poder: 19
Petolansa Va por buen camino
Gracias contarveneno

Sabes eso, lo tengo bien conectado, tanto los campos como con los dbtext y el dataset del qreport vinculado a al quety1.

Pero no logro que funcione. Seguro que no hago bien cuando lo muestro, aqui explico, el codigo que me corregiste, lo puse en la propiedad sql del query, de esta manera

Código SQL [-]
SELECT F.NumFactura, F.Fecha, F.Clicod, F.Efectivo, F.Ctacte, F.Tarjeta, F.Tipofac , F.Emplecod, F.SubTotal, F.Descuento, F.importetotal, 
C.Clinom, C.Clidom, C.Clicuit, C.Clitel,
FD.Codipro,  FD.Concepto, FD.Cantidad, FD.Precio
FROM Stock S
JOIN Facturadetalle FD ON S.Procod = FD.Codipro
JOIN Factura F ON (FD.Tipofac = F.Tipofac AND FD.Numfactura = F.Numfactura) 
JOIN Clientes C ON F.Clicod = C.Clicod
WHERE F.Numfactura= :Nrofact AND F.Tipofac= :TipoFact


Los parametros Nrofact y tipo fact los defini en la propiedad params del query.

Código Delphi [-]
  try
     qrfactura:=tqrfactura.Create(self);
        qrfactura.Query1.Open;
        qrfactura.preview;
    finally
        qrfactura.Free;
    end;

y Luego en el boton en el que posteo y actualizo el stock al final le ingrese el codigo de arriba.

Que me esta faltando, lo unico que veo son 3 campos currency, de descuento, total, y subtotal, con el text en 0,00.

Desde ya muchas gracias
Responder Con Cita
  #7  
Antiguo 22-11-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
qrfactura.Query1.Open;
Esa línea no se para que sirve,
el query1 no esta en el qrFactura, esa línea me tiene confundido.

Deberías de abrir primero el Query1 y despues hacer el preview, bueno, sí lo estas haciendo, pero el Query1 no es parte de qrFactura... solo que qrFactura sea el formulario....

no se

supongo que debería ser:
Código Delphi [-]
  try
     qrfactura:=tqrfactura.Create(self);
        Query1.Open;
        qrfactura.preview;
    finally
        qrfactura.Free;
    end;
__________________

Responder Con Cita
Respuesta



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
Ordenar un query por parametros jzginez SQL 11 30-10-2007 00:18:02
query con parametros ayudenme? juangabriel1786 SQL 4 29-08-2007 14:48:49
Parámetros en los Query en Delphi for PHP mlara PHP 3 13-07-2007 06:56:36
Query y Parámetros gluglu SQL 3 31-01-2005 13:55:00
1 Query - 2 Parametros azaagh Conexión con bases de datos 3 13-06-2004 04:59:04


La franja horaria es GMT +2. Ahora son las 12:40:48.


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