FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour sentencia sql
Posts: 652
Joined: Wed Oct 19, 2005 12:03 PM
sentencia sql
Posted: Mon May 26, 2014 02: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 (fw): Select all Collapse
 
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
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: sentencia sql
Posted: Mon May 26, 2014 02: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... :-)

Code (fw): Select all Collapse
         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!
Posts: 652
Joined: Wed Oct 19, 2005 12:03 PM
Re: sentencia sql
Posted: Mon May 26, 2014 03:52 PM

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

Luis

Posts: 1088
Joined: Fri Oct 07, 2005 03:33 PM
Re: sentencia sql
Posted: Mon May 26, 2014 07:56 PM
Esta es una idea

Code (fw): Select all Collapse
'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
Posts: 652
Joined: Wed Oct 19, 2005 12:03 PM
Re: sentencia sql
Posted: Tue May 27, 2014 09:28 PM
Probé lo que me indicaron en el programa y no me respondía nada

Escribí lo siguiente en sqlyog

Code (fw): Select all Collapse
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
Posts: 337
Joined: Fri Oct 07, 2005 02:44 PM
Re: sentencia sql
Posted: Tue May 27, 2014 09: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

Hola,

Soy un Contador que por necesidad aprendio a programar y se quedo programando.
Posts: 845
Joined: Sun Oct 09, 2005 05:36 PM
Re: sentencia sql
Posted: 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
Posts: 845
Joined: Sun Oct 09, 2005 05:36 PM
Re: sentencia sql
Posted: 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
Posts: 652
Joined: Wed Oct 19, 2005 12:03 PM
Re: sentencia sql
Posted: 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 (fw): Select all Collapse
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í




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

Continue the discussion