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:
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...

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
que es por ejemplo "0001" + "-" + "00000010"
en la base de datos esta declarada como varchar de ancho 13
el error es
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...

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.htmly en este lo que esta grabado en la misma con el programa anterior (tmysql)
https://www.4shared.com/photo/huNx-0z5ce/factura1.htmlY en estas la de proveedores
https://www.4shared.com/photo/Ns2XUyq1ba/facpro.htmlidem 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
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...

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