FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour BUSQUEDA, SUMANDO CAMPOS CARACTER * SOLUCIONADO
Posts: 537
Joined: Mon Jan 16, 2006 03:42 PM
BUSQUEDA, SUMANDO CAMPOS CARACTER * SOLUCIONADO
Posted: Fri Jul 28, 2017 01:51 AM

Amigos, necesito de su ayuda.
tengo una tabla de serviciostomados que tienen los siguientes campos:

id_abonado,mes,ano .......

mes=caracter y ano=caracter

SELECT * FROM serviciostomados WHERE (mes+ano)='72017'

no hace nada

como se podria HACERLO, gracias

Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Re: BUSQUEDA, SUMANDO CAMPOS CARACTER
Posted: Fri Jul 28, 2017 03:00 AM
Hola.
Prueba asi;
Code (fw): Select all Collapse
SELECT * FROM serviciostomados WHERE (mes+ano)=72017
Posts: 537
Joined: Mon Jan 16, 2006 03:42 PM
Re: BUSQUEDA, SUMANDO CAMPOS CARACTER
Posted: Fri Jul 28, 2017 03:09 PM

Hola Willi si funciona asi pero mes+ano si es numerico provocaria problemas

7 + 2017 = 2024
6 + 2018 = 2024
5 + 2019 = 2024

te das cuenta por eso tiene q ser caracter

saludos

Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: BUSQUEDA, SUMANDO CAMPOS CARACTER
Posted: Fri Jul 28, 2017 08:05 PM
Prueba asi
Code (fw): Select all Collapse
SELECT * FROM serviciostomados WHERE CONCAT(mes,ano)='72017
Posts: 537
Joined: Mon Jan 16, 2006 03:42 PM
Re: BUSQUEDA, SUMANDO CAMPOS CARACTER
Posted: Sat Jul 29, 2017 12:31 AM

Gracias eso resulto bien.

mil gracias

Posts: 537
Joined: Mon Jan 16, 2006 03:42 PM
Re: BUSQUEDA, SUMANDO CAMPOS CARACTER
Posted: Sat Jul 29, 2017 12:43 AM

Amigos ahora lo arme asi:
static function generacobro()
*------------------------------
local cSql,oprn
local mescobro:=AllTrim(Str(month(date()),2))
local anocobro:=str(year(date()),4)

cSql:="INSERT INTO cartola_cliente( id_abonado,periodo_mes,periodo_ano,cod_servicio,det_servicio,valor_plan ) SELECT id_abonado,"+(mescobro)+","+(anocobro)+",cod_servicio,det_servicio,totalpagar FROM serviciostomados where  CONCAT(TRIM(mes),TRIM(ano))<>'"+(mescobro+anocobro)+"' and suspendido=1"
xServer:Execute( cSql )

cSql:="UPDATE serviciostomados SET mes='"+(mescobro)+"',ano='"+(anocobro)+"'"
xServer:Execute( cSql )

MSGINFO( " Generacion de Cobro Listo..","Atencion" )

return .t.

y funciona bien pero,,, siempre hay peros, necesito validar en la cartola_cliente que lo cargado no exista

saludos

Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: BUSQUEDA, SUMANDO CAMPOS CARACTER
Posted: Sun Jul 30, 2017 11:30 PM
Hola jbrita:
Podes hacerlo de varias maneras y dependiendo de que queres hacer en caso de que exista el dato ya en tu tabla, si cargar solo los que no estan o no cargar nada.
Una forma es validar previamente que no existan dichos datos.
Code (fw): Select all Collapse
if  xServer:Query("SELECT (aca la query que necesitas consultar en la tabla cartola_clientes="):nRecCount > 0
   MsgStop("Esos datos ya estan cargado","Error")
   ELSE
   cSql:="INSERT INTO cartola_cliente( id_abonado,periodo_mes,periodo_ano,cod_servicio,det_servicio,valor_plan ) SELECT id_abonado,"+(mescobro)+","+
   (anocobro)+",cod_servicio,det_servicio,totalpagar FROM serviciostomados where CONCAT(TRIM(mes),TRIM(ano))<>'"+(mescobro+anocobro)+"' and "+;
   " suspendido=1"
   xServer:Execute( cSql )

   cSql:="UPDATE serviciostomados SET mes='"+(mescobro)+"',ano='"+(anocobro)+"'"
   xServer:Execute( cSql )
   MSGINFO( " Generacion de Cobro Listo..","Atencion" )
ENDIF

La otra manera es si puedes definir como clave principal de tu tabla para que no se repitan los datos y validarlo directamente con el error de la base de datos
Si lo haces de la segunda forma, tambien podrias insertar en tu tabla solo los valores que no son repetidos con INSERT IGNORE
Espero que te de una pista.
Saludos

Continue the discussion