Page 1 of 2

consulta dolphin

Posted: Fri Aug 21, 2015 2:47 pm
by surGom
Hola compañeros, estoy pasando un programa de tymsql a dolphin, y me surgió este error con las fechas

Code: Select all | Expand

  Error description: Error MYSQL/1292  Incorrect date value: '    -  -  ' for column 'fecha' at row 1

Stack Calls
===========
   Called from: .\source\prg\tdolpsrv.prg => DOLPHIN_DEFERROR( 2807 )
   Called from: .\source\prg\tdolpsrv.prg => TDOLPHINSRV:CHECKERROR( 793 )
   Called from: .\source\prg\tdolpsrv.prg => TDOLPHINSRV:SQLQUERY( 2024 )
   Called from: .\source\prg\tdolpqry.prg => TDOLPHINQRY:SAVE( 1456 )
   Called from: factura1.prg => ACEPTO( 365 )
   Called from: factura1.prg => (b)FACTURA( 128 )


El código es el siguiente :

Code: Select all | Expand


   IF lnueva
      oQryfac:GetBlankRow(.f.)
   ENDIF

   oQryfac:ncli := oCta:ncli
   oQryfac:nrofac := oCta:pventa + "-" + oCta:factura
   oQryfac:fecha := oCta:fecha                                LÍNEA 365
   oQryfac:importe := oCta:ntotal
   oQryfac:plazo := oCta:condicion
   oQryfac:baseimpo := oCta:subtotal
   oQryfac:iva := oCta:niva
   oQryfac:ingbruto := oCta:ib
   oQryfac:tipo := oCta:tipocom
   oQryfac:letra := oCta:letra

   oQryfac:save()
   oQryfac:end()
 


El seteo de fechas lo tengo como set date british
el oCta: es por la utilización de la clase tarray

Y en la tabla de la base de datos está como americana "2015-08-21"
Con tymsql no me daba este error, como tendría que grabar este dato en dolphin sin modificar la base de datos

Gracias por vuestra atención

Luis

Por lo demas casi no tuve que hacer cambios

Re: consulta dolphin

Posted: Fri Aug 21, 2015 3:08 pm
by cmsoft
Hola Luis:
Si la variable es de tipo fecha, dolphin hace el pasaje automaticamente, pero si lo que contiene oCta:fecha es un string, deverias pasarlo a fecha antes de asignarselo a oQryfac:fecha. La fecha vacía deveria ser "0000-00-00" y no " - - " me parece a mi...
Sino proba con hacer:

Code: Select all | Expand

oQryFac:fecha := STRTRAN(oCta:fecha," ","0")
Siempre y cuando oCta:fecha sea string...

Re: consulta dolphin

Posted: Fri Aug 21, 2015 3:20 pm
by surGom
Cmsoft hice un valtype de oCta:fecha y me lo declara como campo fecha

Luis

Re: consulta dolphin

Posted: Fri Aug 21, 2015 3:32 pm
by surGom
Bueno ahora hice esta prueba

Code: Select all | Expand



   oQryfac :=  oMysql:Query( cQryfac )
   IF lnueva
      oQryfac:GetBlankRow()
   ENDIF

   oQryfac:ncli := oCta:ncli
   oQryfac:nrofac := oCta:pventa + "-" + oCta:factura
   oQryfac:fecha := Date()
   oQryfac:importe := oCta:ntotal
   oQryfac:plazo := oCta:condicion
   oQryfac:baseimpo := oCta:subtotal
   oQryfac:iva := oCta:niva
   oQryfac:ingbruto := oCta:ib
   oQryfac:tipo := oCta:tipocom
   oQryfac:letra := oCta:letra

   oQryfac:save()
   oQryfac:end()
 


y me sigue dando el mismo error

Re: consulta dolphin

Posted: Fri Aug 21, 2015 4:25 pm
by joseluisysturiz
Para los campos tipos fecha o numericos usa al operarlo ClipValue2SQL(), funciona al pelo, y en tu tabla colocale valor por defecto '0000-00-00' para que no te los traiga NULL, espero te sirva, saludos... :shock:

Re: consulta dolphin

Posted: Fri Aug 21, 2015 6:12 pm
by surGom
Gracias José Luis pero tampoco funciona, da el mismo error. lo que hice fue

oQrycta:fecha := ClipValue2SQL(oCta:fecha)

Descarto un error en la base de datos ya que si utilizo el programa compilado com tmysql de wormar, funciona bien. Abro la base con sqlyog y se ve todo perfectamente.

Estoy compilando con dolphin de fivewin y harbour 3.2

Luis

Re: consulta dolphin

Posted: Fri Aug 21, 2015 6:28 pm
by joseluisysturiz
El error te lo da cuando es un registro nuevo o cuando modificas..? si es cuando modificas antes de grabar, verifica que datos tiene la VAR que le pasas al campo de tipo fecha, yo inicio mis VAR tipo fechas asi:

cVar := date()

pasandolo a la tabla
oQryFecha := ClipValue2SQL(cVar)

pero no uso oQry:save(), si no que hago el grabado en la tabla con INSERT INTO...

Re: consulta dolphin

Posted: Fri Aug 21, 2015 11:20 pm
by cmsoft
La funcion ClipValue2Sql la utiliza internamente el metodo SAVE de dolphin, por lo tanto cuando se hace SAVE no hay que hacer ClipValue2Sql antes, pues pasarias a darle una variable tipo string.
Prueba poner, antes de hacer el SAVE 2 mensajes para ver que tipo de datos y que dato tiene fecha, MsgInfo(oQryFac:fecha) y MsgInfo(VALTYPE(oQryFac:fecha)) y mira que valores te esta poniendo, asi tenemos otra pista.

Re: consulta dolphin

Posted: Fri Aug 21, 2015 11:59 pm
by surGom
Muchachos en la base de datos estaba declarada como not null, le quite el not null, y ahora no me da problema.

Mejor dicho me da otro error en la siguiente línea

Code: Select all | Expand


oQryfac:nrofac := oCta:pventa + "-" + oCta:factura  (1)
 


que es por ejemplo "0001" + "-" + "00000010"

en la base de datos esta declarada como varchar de ancho 13

el error es

Code: Select all | Expand

Message not found: TDOLPHYNQRY: nrofac


Dije anteriormente que no me dió problemas porque comenté esta línea (1) y me grabo correctamente todas los otros campos.

Tienen idea porque dolphin no reconoce ese campo nrofac, ya que también lo tengo declarado de esa forma en otra tabla y me da el mismo error.

Luis

Re: consulta dolphin

Posted: Sat Aug 22, 2015 12:02 am
by cmsoft
Hace la misma prueba, pone antes de enviar a grabar con el SAVE un mensaje a ver que te deja en esa variable. Asi vas teniendo mas pistas..
No es un problema de dolphin ya que yo casualmente tambien tengo campos con el mismo nombre... Fijate que tipo de datos es antes de enviar a grabar

Re: consulta dolphin

Posted: Sat Aug 22, 2015 12:31 am
by surGom
Cmsoft me muestra "0001-00000010" y tipo caracter

pero lo que me muestra el error es

Code: Select all | Expand

 Error description: Error BASE/1005  Message not found: TDOLPHYNQRY: nrofac

Stack Calls
===========
   Called from: .\source\prg\tdolpqry.prg => TDOLPHINQRY:_NROFAC( 1881 )
   Called from: factura1.prg => ACEPTO( 378 )
   Called from: factura1.prg => (b)FACTURA( 128 )
   Called from: .\source\classes\BUTTON.PRG => TBUTTON:CLICK( 175 )


Luis

Re: consulta dolphin

Posted: Sat Aug 22, 2015 12:54 am
by joseluisysturiz
surGom wrote:Cmsoft me muestra "0001-00000010" y tipo caracter

pero lo que me muestra el error es

Code: Select all | Expand

 Error description: Error BASE/1005  Message not found: TDOLPHYNQRY: nrofac

Stack Calls
===========
   Called from: .\source\prg\tdolpqry.prg => TDOLPHINQRY:_NROFAC( 1881 )
   Called from: factura1.prg => ACEPTO( 378 )
   Called from: factura1.prg => (b)FACTURA( 128 )
   Called from: .\source\classes\BUTTON.PRG => TBUTTON:CLICK( 175 )


Luis


Como te comentamos antes, define en tu tabla que tome valor por defecto '0000-00-00' para los campos fechas y ese error que te da es que no existe el campo nrofac, revisa en tu tabla como la tienes creada, como dice CMSoft, si usas oQry:Save() no hace falta el Clip, por eso dije que yo lo usaba por que no uso el Save(), avisa cualquier mejora o detalle...saludos... :shock:

Re: consulta dolphin

Posted: Sat Aug 22, 2015 1:33 am
by surGom
Aquí les muestro como está declarada la base de facturas utilizando sqlyog comunity

https://www.4shared.com/photo/jp06nOcTba/factura.html

y en este lo que esta grabado en la misma con el programa anterior (tmysql)

https://www.4shared.com/photo/huNx-0z5ce/factura1.html


Y en estas la de proveedores

https://www.4shared.com/photo/Ns2XUyq1ba/facpro.html

idem anterior


En las dos bases de datos falla con el mensaje que no existe nrofac

Luis

https://www.4shared.com/photo/fCd8b8cQce/facpro1.html

Re: consulta dolphin

Posted: Sat Aug 22, 2015 4:47 am
by joseluisysturiz
surGom wrote:Aquí les muestro como está declarada la base de facturas utilizando sqlyog comunity

https://www.4shared.com/photo/jp06nOcTba/factura.html

y en este lo que esta grabado en la misma con el programa anterior (tmysql)

https://www.4shared.com/photo/huNx-0z5ce/factura1.html


Y en estas la de proveedores

https://www.4shared.com/photo/Ns2XUyq1ba/facpro.html

idem anterior


En las dos bases de datos falla con el mensaje que no existe nrofac

Luis

https://www.4shared.com/photo/fCd8b8cQce/facpro1.html


No sera que no estas llamando ese campo en tu consulta.? si usas SELECT * FROM tu_tabla te los traera todos, pero si estas diciendo cuales campos o estas haciendo algun JOIN debes decir que campos quieres usar, coloca algo de codigo de tus consultas haber si es eso, saludos... :shock:

Re: consulta dolphin SOLUCIONADO

Posted: Sat Aug 22, 2015 9:04 pm
by surGom
Les cuento el error estaba en que realmente el campo nrofac existe en la tabla Factura y facpro, pero el error lo daba en la tabla ctac(cuentas corrientes), y ayer con el cansancio el primero que veía era oQryfac:nrofac y el error estaba en oQrycta:nrofac que no existe en la tabla de cuentas corrientes. El problema fue que en tmysql ignora que no existe oQrycta:nrofac y graba todos los demas campos sin marcar el error. Por eso me confundí.

Este es el prg que utilizo con tmsyql hace tres años y nunca me tiró el error ni el de la fecha ni este que es mas grave, ya que nrofac no existe en la tabla.

Code: Select all | Expand

STATIC FUNCTION ACEPTO(oMysql, lnueva, lcliente,nboton, lcredito, aItem)
LOCAL cQuery
LOCAL cQryfac
LOCAL oQrycta
LOCAL oQryfac
LOCAL cQuerysto := "SELECT * FROM detalle"
LOCAL oQrysto
LOCAL z := 0



if empty(oCta:ntotal)
   msgstop("No hay datos para grabar","Ingrese datos")
   return nil
endif

if  lcliente
  cQuery:=   "SELECT * FROM ctacte ORDER by ncli"
  cQryfac :=  "SELECT * FROM factura ORDER by nrofac"
else
  cQuery:=   "SELECT * FROM ctacp ORDER by ncli"
  cQryfac :=  "SELECT * FROM facpro ORDER by nrofac"
endif



   oQryfac :=  oMysql:Query(cQryfac)
   if lnueva
     oQryfac:blank()
   endif

   oQryfac:ncli := oCta:ncli
   oQryfac:nrofac := oCta:pventa + "-"+ oCta:factura
   oQryfac:fecha := oCta:fecha
   oQryfac:importe := oCta:ntotal
   oQryfac:plazo := oCta:condicion
   oQryfac:baseimpo := oCta:subtotal
   oQryfac:iva := oCta:niva
   oQryfac:ingbruto := oCta:ib
   oQryfac:tipo := oCta:tipocom
   oQryfac:letra := oCta:letra

   oQryfac:save()
   oQryfac:end()


  oQrycta :=  oMysql:Query(cQuery)

  if lnueva
    oQrycta:blank()
  endif

  oQrycta:ncli := oCta:ncli
  oQrycta:nrofac := oCta:pventa + "-"+ oCta:factura                                //AQUÍ TRONABA EL PROGRAMA CON DOLPHIN
  oQrycta:fecha := oCta:fecha
  oQrycta:descripcion :=  oCta:tipocom
  oQrycta:importe := oCta:ntotal
  oQrycta:tipo := iif(lcredito,"2","1")
  oQrycta:pventa := oCta:pventa
  oQrycta:numero := oCta:factura
  oQrycta:tipodoc := iif(lcredito,"C","F")
  oQrycta:save()
  oQrycta:end()

   if lnueva
       oQrysto := oMysql:Query(cQuerysto)
       for z = 1 to len(oCta:adet)
           oQrysto:blank()
            iif(lcliente,oQrysto:ncli := oCta:ncli, oQrysto:npro := oCta:ncli)
           oQrysto:codigo := oCta:adet[z,1]
           oQrysto:nrofac := oCta:pventa + "-"+ oCta:factura
           oQrysto:costo := oCta:adet[z,6]
           oQrysto:fecha := oCta:fecha
           oQrysto:cantidad := oCta:adet[z,5]
           oQrysto:save()
       next
       oQrysto:end()
   endif

   nboton:disable()
   if lcliente .and. oCta:condicion != "Contado"
       if msgyesno("¿Desea imprimir documentos?","Documentos")
         impdoc(aItem)
       endif
   endif


Les ruego sepan disculpar la segunda consulta y les agradezco la presteza y dedicación que tuvieron para ayudarme a solucionarlo.
Les aclaro que el programa con tmysql hasta el día de hoy es el que utilizo en mi negocio y nunca me dió ningún problema. Lo que pasa es que este nuevo lo estoy haciendo con harbour y la clase tmysql hecha por wormar esta hecha para xharbour y como compilo con xverce y hace tiempo esta funcionando mal, ya que no muestra la línea de error cuando compila, hace un tiempo empezé a pasarlo a dolphin, casi sin ningún cambio.

Luis