sentencia sql

sentencia sql

Postby surGom » Mon May 26, 2014 2:07 pm

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  Expand view  RUN

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
surGom
 
Posts: 640
Joined: Wed Oct 19, 2005 12:03 pm

Re: sentencia sql

Postby joseluisysturiz » Mon May 26, 2014 2:48 pm

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  Expand view  RUN
        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!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: sentencia sql

Postby surGom » Mon May 26, 2014 3:52 pm

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

Luis
surGom
 
Posts: 640
Joined: Wed Oct 19, 2005 12:03 pm

Re: sentencia sql

Postby Marcelo Via Giglio » Mon May 26, 2014 7:56 pm

Esta es una idea

Code: Select all  Expand view  RUN

'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
Marcelo Via Giglio
 
Posts: 1065
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Re: sentencia sql

Postby surGom » Tue May 27, 2014 9:28 pm

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

Escribí lo siguiente en sqlyog

Code: Select all  Expand view  RUN


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
surGom
 
Posts: 640
Joined: Wed Oct 19, 2005 12:03 pm

Re: sentencia sql

Postby Lautaro » Tue May 27, 2014 9:40 pm

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
User avatar
Lautaro
 
Posts: 322
Joined: Fri Oct 07, 2005 2:44 pm
Location: Osorno, Chile

Re: sentencia sql

Postby Francisco Horta » Tue May 27, 2014 10:02 pm

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

Postby Francisco Horta » Tue May 27, 2014 10:05 pm

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
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: sentencia sql

Postby surGom » Tue May 27, 2014 11:14 pm

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  Expand view  RUN
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
surGom
 
Posts: 640
Joined: Wed Oct 19, 2005 12:03 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 60 guests