Página 1 de 2

Macros?

Publicado: Vie May 20, 2011 3:11 pm
por Diego Sanchez
Necesito hacer que clarion reconozca una variable y la convierta a su nombre respectivo (tipo macros en Clipper recuerdan?)

Necesito que Clarion entienda esto:

Loop i#=1 to Mitabla{Prop:Fields} !Recorro todos los campos de la tabla

Variable= Who(Mitabla,i#} !Nombre del Campo actual

IF Mitabla{Prop:label,i#} <> history::MIT:Record.& Variable !Compare el campo actual contra el valor del historial
!a ver si se modificó
END
END

La parte en negrita es la que no logro hacer funcionar

Gracias

Re: Macros?

Publicado: Vie May 20, 2011 5:47 pm
por Mauricio
Me parece que vas a tener que jugar con el what del registro histórico.
Algo así:

Código: Seleccionar todo

Loc:Any     Any

Code
   Loc:Any &= what(history::MIT:Record, El Número del campo que te interesa)
   IF Loc:Any <> TuTabla{Prop:Label, i#}
       !Etc
   END !IF

Esto lo escribí sin probarlo, aclaro. Pero buscaría por ese lado.

Re: Macros?

Publicado: Sab May 21, 2011 12:53 am
por César
Diego: aclarame estas dudas
1- lo que necesitas es comparar el Contenido de los campos ó el nombre de los campos ?
2- las estructuras de history::MIT:Record y MiTabla , son idénticas en tipos y orden ?
3- necesitas saber que campos tiene diferencia individualmente ó te sirve con solo saber si existe diferencia entre las dos estrucutras sin importar en que campos ?

Re: Macros?

Publicado: Sab May 21, 2011 2:59 pm
por R.Pacheco
Hola
Si lo que necesita es conocer la estructura de una tabla con su respectivos campos
dale un vitazo esto tal vez te sirve.

Código: Seleccionar todo

!cargado Tablas  
 loop i# = 1 to 40
  clear(QMembresia)! Queue para carga los datos
  Ca:Campos = who(MIEM:record,i#)! Aqui va la cola de tu tabla
  if (Ca:Campos) > '' !Aqui se cargan los campos
  add(QMembresia)  ! Se guardan  o se cargan 
   end!if
 end!if
Nota Importante
Te crea tu queue le pone un list y en open Window de la ventana pone el codigo,
no te olvide de poner en el esquematico tu tabla a la que quiere ver los campos o en otra tabla.


Espero q te sirva

Re: Macros?

Publicado: Lun May 23, 2011 6:42 pm
por Diego Sanchez
Lo que necesito es comparar el contenido de los campos, o saber si alguno de los campos fue modificado con respecto al valor del history.
Entro a la ventana, activo el historial Self.Savehistory()

y en el Takecompleted antes del parent call necesito saber si cualquier campo fue modificado

IF CLI:CAMPO1 <> history::CLI:Record.CLI:CAMPO1

Pero necesito probar todos los campos de la tabla contra el historial

Por esto uso un loop

Loop i#=1 to tabla{prop:Fields}
IF tabla{Prop:field,i#}<>HISTORY::TAB:TABLA.CAMPO <- este ultimpo pedazo (CAMPO) es lo que necesito desde un macro

END
end

Re: Macros?

Publicado: Lun May 23, 2011 8:34 pm
por César
Entonces creo que esto es lo que tenes que hacer:

PtrGroup &GROUP
ActualValor ANY
ViejoValor ANY


PtrGroup &= MiTabla{Prop:Record} !puntero al record actual
LOOP I# = 1 TO MiTabla{PROP:Fields}

ActualValor &= WHAT(PtrGroup, I#)
ViejoValor &= WHAT(history::CLI:Record, I#)
IF ActualValor <> ViejoValor

!los contenidos de los campos de posicion I# son distintos

END!IF
END !LOOP


Estoy suponiendo que history::CLI:Record es una estructura RECORD o puntero a un RECORD ( &GROUP).
Tené en cuenta que los campo MEMO y BLOB , no estan dentro de la estructra RECORD por lo que no se estan comparando aqui.

Re: Macros?

Publicado: Lun May 23, 2011 9:39 pm
por Diego Sanchez
Muchas gracias, voy a hacer la prueba y te aviso

Re: Macros?

Publicado: Mié May 25, 2011 10:44 pm
por Diego Sanchez
Un Exito completo fue la ayuda de César, muy amable

Re: Macros?

Publicado: Jue May 26, 2011 10:38 am
por Mauricio
Ahhh, claro, porque lo que puse yo no sirve! Ahora me ofendí! :lol: :lol: :lol:

Re: Macros?

Publicado: Jue May 26, 2011 1:33 pm
por Diego Sanchez
Aclaración, muchas gracias a todos los participantes en las respuestas, y Mauricio tambien :lol: :lol: :lol: