Page 1 of 2

Error con adordd al añadir funcion

Posted: Thu Jun 21, 2007 7:18 pm
by JoseLuis
Hola amigos
He comenzado con el tema de adordd mas MySQL, y funciona bien con un listbox, pero al añadir una funcion que me copia el contenido de la tabla a una dbf me da el siguiente error[URL=http://imageshack.us][img]http://i ... .jpg[/img][/url]
el codigo de la funcion que he añadido es el siguiente

Code: Select all

Function descarga(aAlias)
recogidas->(Dbgotop())
Do while !recogidas->(Eof())
 (aAlias[30])->( dbappend())
 While .not. ((aAlias[30])->(Rlock())); end
 (aAlias[30])->Fecha    := recogidas->Fecha
 (aAlias[30])->Fecha1   := recogidas->Fecha
 (aAlias[30])->Pro      := recogidas->compania
 (aAlias[30])->Pro1     := recogidas->nombrer
 (aAlias[30])->domi     := recogidas->calle
 (aAlias[30])->domi1    := recogidas->caller
 (aAlias[30])->tel      := ""
 (aAlias[30])->tel1     := ""
 (aAlias[30])->pobla    := recogidas->Pobla
 (aAlias[30])->pobla1   := recogidas->Poblar
 (aAlias[30])->conductor:= "00006"
 (aAlias[30])->nconductor:=" "
 (aAlias[30])->hora     := recogidas->hora
 (aAlias[30])->notas    := recogidas->comentario
 (aAlias[30])->codpobla := " "
 (aAlias[30])->rutar    := "60"
 (aAlias[30])->turno    := "T"
 (aAlias[30])->operador := "INTERNET"
 (aAlias[30])->( dbUnlock() )
 recogidas->(Dbskip())
 enddo
 Recogidas->(Dbzap())
return nil
Esta claro que estoy manejando mal la tabla que se llama "recogidas", yo pensaba se se utiliza igual que una dbf.
Algunas veces al aceptar en el mensaje de error, se dispara la cantidad de mensajes, me salen un monton en cascada y acaban con uno que habla algo de recursividad.

A ver si alguien me aclara algo

Saludos

Posted: Thu Jun 21, 2007 7:25 pm
by Antonio Linares
Prueba a comentar esta línea y comprueba si sigue dando el error:

// Recogidas->(Dbzap())

Posted: Thu Jun 21, 2007 9:58 pm
by JoseLuis
La he comentado y sigue igual, solo me admite el do while si en éste pongo sólo mensajes informativos, si pongo alguna referencia al alias de la dbf casca, aunque sólamente sea bloquearla, simplemente con poner (aAlias[30])->(rlock()), ya sale el error, y después de éste error, por si sirve de pista, sale siempre este error
[URL=http://imageshack.us][img]http://i ... .jpg[/img][/url]

que parece que hace referencia a llenado de memoria.
Si quito cualquier referencia a la dbf, no da el error, pero no puedo grabar los datos en la dbf.

Saludos

Jose Luis

Posted: Thu Jun 21, 2007 10:14 pm
by Antonio Linares
Prueba a revisar _:

Code: Select all

for n = 1 to recogidas->( FCount() )
   MsgInfo( recogidas->( FieldName( n ) ) )
next

Posted: Thu Jun 21, 2007 10:31 pm
by JoseLuis
Me va informando de los nombres de _ de la tabla, y cuando acaba, si al mover el raton, me aparece un mensaje de error que ya me salio en tiempos y lo solucioné poniendo al comienzo de la aplicacion EXTERNAL ORDKEYCOUNT, pero aun así me ha vuelto a salir
[URL=http://imageshack.us][img]http://i ... .jpg[/img][/url]

Saludos

Jose Luis

Posted: Fri Jun 22, 2007 7:24 am
by JoseLuis
Cuando acaba el bucle, y llega al último campo da el error, no sale del bucle, ya que le pongo un msginfo fuera del bucle y no llega a éste

Saludos

Jose Luis

Posted: Fri Jun 22, 2007 7:50 am
by JoseLuis
Si hago lo siguiente:

Code: Select all

recogidas->(Dbgotop())
Do while !recogidas->(Eof())
msginfo(recogidas->compania)
enddo
Me va informando del contenido del campo compania.

Pero si dentro del do while incluyo algo referente a la dbf a la que quiero descargar, aunque sólo sea una llamada al bloqueo no fuencina:

Code: Select all

recogidas->(Dbgotop())
Do while !recogidas->(Eof())
msginfo(recogidas->compania)
While .not. ((aAlias[30])->(Rlock())); end
enddo
Me tiene frito ésto.

Saludos

Jose Luis

Posted: Fri Jun 22, 2007 8:16 am
by Antonio Linares
Que RDD usa aAlias[30] ?

Que nombre contiene aAlias[30] ?

Por curiosidad, haz: MsgInfo( aAlias[30] )

Posted: Fri Jun 22, 2007 8:22 am
by JoseLuis
(aAlias[30]) es un alias de la DBF "Avisos", y la abro así

Code: Select all

  dbUseArea(.T.,,Publicas:cUnidad+Publicas:cSubd+"\Avisos",aAlias[30],.T.)
Con indices CDX, y en el resto de a aplicación funciona bien.

Es un entorno MDI, por lo que para cada usario es un valor distinto.

No se que mas decirte
Seguro que es alqo que se me escapa


Saludos

Jose Luis

Posted: Fri Jun 22, 2007 8:44 am
by JoseLuis
Creo que la cuestión va a estar en el envío de los parámetros de una función a otra, me explico
Antes de abrir la dbf Avisos, hago una comprobación del nombre del alias para éste usuario.

Code: Select all

aAlias:= cargaAlias()

Function CargaAlias 
*******************

return { ;
         cGetNewAlias( "ARTICULO" ),;   // 1
         cGetNewAlias( "MUNICI" )  ,;   // 2
         cGetNewAlias( "PROVIN" )  ,;   // 3
         cGetNewAlias( "PROPIE" )  ,;   // 4
	 cGetNewAlias( "SEAT1"  )  ,;	// 5 
         cGetNewAlias( "RAPPEL" )  ,;	// 6
         cGetNewAlias( "EQUIPO" )  ,;   // 7
         cGetNewAlias( "REFEREN" ) ,;   // 8
	 cGetNewAlias( "MATERIAL" ),;	// 9 
         cGetNewAlias( "VEHICULO" ),;	// 10
	 cGetNewAlias( "TIPOS" )   ,;	// 11
	 cGetNewAlias( "CANON" )   ,;	// 12
	 cGetNewAlias( "TEXTOS" )  ,;	// 13
	 cGetNewAlias( "IMAGEN" )  ,;	// 14
				   ,;	// 15
				   ,;	// 16
				   ,;	// 17
	 cGetNewAlias( "PARTE" )   ,;	// 18
	 cGetNewAlias( "FIESTAS" ) ,;	// 19
	 cGetNewAlias( "VACAS" )   ,;	// 20
	 cGetNewAlias( "PROVE" )   ,;   // 21
	 cGetNewAlias( "FACTURA" ) ,;   // 22
	 cGetNewAlias( "ALMACEN" ) ,;   // 23
	 cGetNewAlias( "ALBARAN" ) ,;   // 24
	 cGetNewAlias( "EXTRAS" )  ,;   // 25
	 cGetNewAlias( "CONDUC" )  ,;   // 26
	 cGetNewAlias( "GASTOS" )  ,;   // 27
	 cGetNewAlias( "REEMBOL" ) ,;   // 28
         cGetNewAlias( "RUTA" )    ,;   // 29
         cGetNewAlias( "AVISOS" )  ,;   // 30
         cGetNewAlias( "NALBARAN" ) ;   // 31
	}
Luego abro la dbf:

Code: Select all

  dbUseArea(.T.,,Publicas:cUnidad+Publicas:cSubd+"\Avisos",aAlias[30],.T.)
  (aAlias[30])->(OrdSetFocus("Fecha1"))
Y luego cuando paso de una funcion a otra que va a utilizar el alias, lo paso por referencia:

Code: Select all

  DEFINE BUTTON RESOURCE "MUNDO"	OF oBar NOBORDER MESSAGE "Visualizar Los Avisos en Internet"  ACTION (cTitulo:="Visualización de Avisos en Internet",mirasql(cTitulo,aAlias));
			WHEN Publicas:cAccesoC;
			TOOLTIP "Visualizar Los Avisos en Internet"
Luego la funcion que recibe esto está así:

Code: Select all

static function mirasql(titulo,aAlias) 
local oDlg, oLbx,n

USE mi_base VIA "ADORDD" TABLE "recogidas" MYSQL ; 
FROM "mi_sitio" USER "usuario" PASSWORD "contraseña" alias "recogidas"

DEFINE DIALOG oDlg FROM 1, 1 TO 25, 79 
oDlg:cTitle:=titulo
@ 1, 1 LISTBOX oLbx FIELDS recogidas->fecha, ; 
recogidas->compania, ; 
recogidas->Nombrer, ;
recogidas->Caller, ; 
recogidas->Poblar, ;
recogidas->Comentario ;
HEADERS "Fecha ","Avisado por:","Recoger en:","Domicilio","Poblacion","Observaciones" ; 
FIELDSIZES 45,100,100,100,60,100 ; 
SIZE 284, 137 OF oDlg 

oLbx:nLineStyle := 1
oLbx:nClrBackHead := RGB(248,191,36)
oLbx:bTextColor:= {|nRow,nCol,nStyle| If( nStyle==0 .and. nCol==8,CLR_HRED, ) }
oLbx:nClrPane:={||iIF((oLbx:cAlias)->(OrdKeyNo())%2==0,nRGB(242,247,252),nRGB(226,226,208))}

@154,08 BTNBMP LEFT PROMPT " Agregar" SIZE 50,19 OF oDlg RESOURCE "grabasql" ACTION oDlg:End()
@154,67 BTNBMP LEFT PROMPT " Modificar" SIZE 50,19 OF oDlg RESOURCE "modifisql" ACTION oDlg:End() 
@154,125 BTNBMP LEFT PROMPT " Borrar" SIZE 50,19 OF oDlg RESOURCE "borrasql" //ACTION BorraU(oLbx ) 
@154,184 BTNBMP LEFT PROMPT " Buscar" SIZE 50,19 OF oDlg RESOURCE "buscasql" //ACTION BuscaU(oLbx,3,"Color") 
@154,242 BTNBMP LEFT PROMPT " Salir" SIZE 50,19 OF oDlg RESOURCE "salirsql" ACTION (oDlg:End())

ACTIVATE DIALOG oDlg CENTERED 
// esto lo he puesto aqui de momento para probar
recogidas->(Dbgotop())
Do while !recogidas->(Eof())
While .not. ((aAlias[30])->(Rlock())); end
 (aAlias[30])->( dbappend())
 (aAlias[30])->Fecha    := recogidas->Fecha
 (aAlias[30])->Fecha1   := recogidas->Fecha
 (aAlias[30])->Pro      := recogidas->compania
 (aAlias[30])->Pro1     := recogidas->nombrer
 (aAlias[30])->domi     := recogidas->calle
 (aAlias[30])->domi1    := recogidas->caller
 (aAlias[30])->tel      := ""
 (aAlias[30])->tel1     := ""
 (aAlias[30])->pobla    := recogidas->Pobla
 (aAlias[30])->pobla1   := recogidas->Poblar
 (aAlias[30])->conductor:= "00006"
 (aAlias[30])->nconductor:=" "
 (aAlias[30])->hora     := recogidas->hora
 (aAlias[30])->notas    := recogidas->comentario
 (aAlias[30])->codpobla := " "
 (aAlias[30])->rutar    := "60"
 (aAlias[30])->turno    := "T"
 (aAlias[30])->operador := "INTERNET"
 (aAlias[30])->( dbUnlock() )
 recogidas->(Dbskip())
 enddo
// Recogidas->(Dbzap())
recogidas->(Dbclosearea())

RETURN NIL 
Lo que he observado es que con ésta estructura, que funciona perfectamente sólo con dbf, cuando meto por medio el tema de adordd, me da error en la dbf.

Saludos

Jose Luis

Posted: Fri Jun 22, 2007 8:53 am
by Antonio Linares
Pon un MsgInfo() justo aqui:

ACTIVATE DIALOG oDlg CENTERED
// esto lo he puesto aqui de momento para probar
MsgInfo( aAlias[30] )
recogidas->(Dbgotop())

Posted: Fri Jun 22, 2007 8:59 am
by JoseLuis
"AVISOS"

Saludos

Jose Luis

Posted: Fri Jun 22, 2007 10:15 am
by Antonio Linares
Jose Luis,

Estás usando el ADORDD más reciente descargado desde:

www.fivetechsoft.com/files/adordd.zip ?

El mismo que está en www.noway.com/files/adordd.zip

Posted: Fri Jun 22, 2007 10:35 am
by JoseLuis
Estoy utilizando esa versión
Incluyo adordd.prg en la compilación, así como las dos librerias que vienen para xharbour.
Yo utilizo FWH 2.9 la de octubre de 2006.

Saludos

Jose Luis

Posted: Fri Jun 22, 2007 11:04 am
by Antonio Linares
Parece que el problema viene de que se produce un error y desde el errorsys vuelve a crearse otro error, asi que prueba a cambiar el ErrorBlock():

ErrorBlock( { | oError | MsgInfo( oError:Description ) } )

y prueba de nuevo tu aplicación a ver que mensaje te aparece