sentencia sql

Post Reply
surGom
Posts: 624
Joined: Wed Oct 19, 2005 12:03 pm
Contact:

sentencia sql

Post by surGom »

Hola amigos, hace tiempo que estoy construyendo un sistema para mi empresa en sql, utilizando la clase tmysql de wormar. Esta funcionando bien, en lo que respecta a facturas, recibos etc. Ahora se me complica, no porque no lo haya resuelto pero sí por que esta mal resuelto, ya no utilizó la potencia de sql en lo que respecto a consulta de las facturas.

Este código funciona pero como verán estoy trabajando sobre las tablas individualmente

Code: Select all

 
oQryfac := oMysql:Query("SELECT * FROM factura WHERE  nrofac ="  + "'" + numfac + "' AND  ncli=" + alltrim(str(nclia)) ) 
oQrydet := oMysql:Query("SELECT * FROM detalle WHERE  nrofac  ="  + "'" + numfac + "' AND  ncli=" + alltrim(str(nclia)) )

  oCta:ntotal := oQryfac:importe
  oCta:subtotal := oQryfac:baseimpo
  oCta:niva := oQryfac:iva
  oCta:condicion := oQryfac:plazo
  oCta:ib :=  oQryfac:ingbruto
  oCta:tipocom :=  oQryfac:tipo
  oCta:pventa := substr( oQryfac:nrofac,1,4)
  oCta:factura := substr( oQryfac:nrofac,6)
  oCta:ncli := nclia

  nRecno :=oQrydet:reccount()

  if empty(nRecno)
     msgstop("No hay datos completos para mostrar","Aviso del sistema")
     oQrydet:end()
     oQryfac:end()
     return nil
  endif
  for   z = 1 to  nRecno                        
         oQry := bprodu(,,oMysql, oQrydet:codigo)        (1)
     aadd(oCta:adet,{oQry:codigo,oQry:producto,oQry:marca,oQry:modelo, oQrydet:cantidad,oQrydet:costo,multi(oQrydet:cantidad,oQrydet:costo),0,.t.}) 
     oQrydet:skip()
  next
  oQrydet:end()
  oQryfac:end()  
Como tendría que hacer para que con una sola consulta me traiga un sólo query, incluyendo ( 1) que es la tabla donde esta la descripción de los productos y que tiene la misma columna "codigo" que hay en la tabla "detalle"

Es decir factura + detalle + productos


Gracias por su atención
User avatar
joseluisysturiz
Posts: 2024
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Re: sentencia sql

Post by joseluisysturiz »

Saludos, en si que es lo que quieres RELACIONAR, es traer los movimientos de la factura a un xbrowse con el nombre del producto? te dejo un ejemplo de como hago para traer un listado de facturas donde esta el codigo del cliente y lo relaciono con el maetro de clientes para traerme el nombre del cliente, haber si eso te ayuda, saludos... :shock:

Code: Select all

         oQry := TDolphinQry():New( "SELECT p.*, " +; // MAESTRO FACTURAS
            "c.cli_telefono, c.cli_ci_rif, c.cli_nom_ape, c.cli_dir_factura, " +;
            "c.cli_direccion, c.cli_referencia, c.cli_sector " +;
            "FROM facturas p, clientes c " +;
            "WHERE p.ped_tel_cliente = c.cli_telefono " +;
            "ORDER BY ped_num_pedido", oDatos:oConex )
 
Dios no está muerto...

Gracias a mi Dios ante todo!
surGom
Posts: 624
Joined: Wed Oct 19, 2005 12:03 pm
Contact:

Re: sentencia sql

Post by surGom »

Gracias José esta noche voy a tratar de adaptarlo a lo que quiero hacer

Luis
Marcelo Via Giglio
Posts: 1033
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Re: sentencia sql

Post by Marcelo Via Giglio »

Esta es una idea

Code: Select all

'SELECT f.*, d.codigo, d.cantidad, p.descripcion, p.unidad 
FROM facturas f, detalle d, productos p
WHERE f.nrofac = '+ numfac +' 
AND d.nrofact = f.nrofac 
AND d.codigo = p.codigo'
 
aquí obtienes toda la información de la factura (f.*) el código y cantidad de detalle y la descripción y unidad desde productos
para una factura = numfac

espero sea lo que necesitas

saludos

Marcelo
surGom
Posts: 624
Joined: Wed Oct 19, 2005 12:03 pm
Contact:

Re: sentencia sql

Post by surGom »

Probé lo que me indicaron en el programa y no me respondía nada

Escribí lo siguiente en sqlyog

Code: Select all


SELECT f.*, d.codigo, d.cantidad, d.costo, p.producto, p.marca, p.modelo WHERE f.nrofac =0001-00001712 AND d.nrofac = f.nrofac AND d.codigo = p.codigo

 
y me responde


Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'WHERE f.nrofac =0001-00001712 AND d.nrofac = f.nrofac AND d.codigo = p.codigo' at line 1


Por internet hay consultas sobre el error 1064 y parece que el error es de sintaxis ó eso creo yo

Otra consulta hay que hacer las claves foráneas?

Gracias por su atención
User avatar
Lautaro
Posts: 322
Joined: Fri Oct 07, 2005 2:44 pm
Location: Osorno, Chile
Contact:

Re: sentencia sql

Post by Lautaro »

Hola,

La condicion para f.nrofac, debes encerrarla en ' ', quedaria asi : ... where f.nrofac='0001-00001712' AND d.nro... , la delimitacion de las cadenas literales debes anotarlas en las consultas.


Atte.,


Lautaro
Francisco Horta
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: sentencia sql

Post by Francisco Horta »

surgom,

SELECT f.*, d.codigo, d.cantidad, d.costo, p.producto, p.marca, p.modelo WHERE f.nrofac =0001-00001712 AND d.nrofac = f.nrofac AND d.codigo = p.codigo

y el FROM ??? no lo veo

Saludos
____________________
Paco
Francisco Horta
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: sentencia sql

Post by Francisco Horta »

Surgom

yo lo hago asi

SELECT v.*,m.comentarios FROM ventas v
INNER JOIN movimientos m ON m.idticket = v.id
WHERE v.esanticipo = '1'
AND v.saldoanticipo > '0'
ORDER BY v.id

saludos
____________________
Paco
surGom
Posts: 624
Joined: Wed Oct 19, 2005 12:03 pm
Contact:

Re: sentencia sql

Post by surGom »

Paco me lo olvide de poner. Hoy por la mañana lo probé en la oficina (había puesto el from) y me daba el mismo error y ahora estoy en mi casa l y me comí el from, y como daba el mismo error no lo revisé.

Entré al foro para informar mi error cuando ví que habías contestado

Al arreglar me dió el siguiente error

Error de SQL (1267): Illegal mix of collations (utf8_spanish_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '='

Lo arreglé el error estaba en la tabla facturas que estaba en utf8_general_ci

Pero el resultado me muestra todas las columnas que consulté pero vacías

Este es el resultado de heidisql

Code: Select all

SELECT f.*, d.codigo, d.cantidad, d.costo,p.producto, p.marca, p.modelo from factura f, detalle d, producto p  WHERE f.nrofac =0001-00001712 AND d.nrofac = f.nrofac AND d.codigo = p.codigo;
/* Affected rows: 0  Filas encontradas: 0  Advertencias: 0  Duración para 1 query: 0,000 sec. */
faltaban las comillas en f.nrofac =0001-00001712

ahra sí

Image


Bueno mientras respondía iba probando y ahí el resultado.

Muchas gracias José Luis, Lautaro, Francisco, Marcelo y a toda la lista.

Tengo otras dudas que las iré planteando en su momento

Luis
Post Reply