PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Recorrer campos de un registro
Recorrer campos de un registro
Débuté par guillermo, 30 mar. 2009 16:56 - 4 réponses
Posté le 30 mars 2009 - 16:56
Hola gente

Estoy generando un proyectito para exportar a CSV los HF de un análisis.
Necesito saber como recorrer los campos del registro

Algo como esto ......

For x = 1 To Cantidad_de_Campos
String_a_Formar = String_a_Formar + {archivoHF}.Campo
End

Gracias

Guillermo
Posté le 30 mars 2009 - 17:17
-- Leer la tabla destino y dejarla limpia

HReadFirst(tabla destino)
WHILE HFound()
HDelete()
HReadNext()
END

m is currency
m=1

HReadFirst(tabla origen)
WHILE m<48508
tabla destino.a = tabla origen.a
HReadNext(tabla origen)
HAdd(tabla destino)
m=m+1
END

manuel
Posté le 30 mars 2009 - 20:18
gracias por la respuesta, pero evidentemente fallé en la explicacion respecto a lo que necesito ..... a ver si puedo corregir

Vamos a magnificar el escenario

Tengo 1000 tablas definidas y quiero hacer un procedimiento para volcar todas ellas a CSV

Con el Código que adjunto, paso por todas las tablas, por todos los campos de todas las tablas, solo me falta una pequeña cuestión, y es la que está comentada como
/// ****** la siguiente sentencia debería poner el valor del campo de la tabla

Dado que si trabajo con "indirecciones" no me deja hacer {tabla}.{campo}


Gracias por la ayuda

Guillermo

Paso el código

nFilNum is int
sStr is string
sFilName is string
sLFinalList is string = ""
LFileList is string = HListFile()
sItemList is string
LTempString is string = ExtractString(LFileList,firstRank,CR)
LTempItem is string
WHILE LTempString <> EOT
sFilName = LTempString + ".CSV"
nFilNum = fCreate(sFilName)
IF nFilNum = -1 THEN
Error(StringBuild("Error creating file %1",sFilName),ErrorInfo())
RETURN
END
nFilNum = fOpen(sFilName,foWrite)
IF nFilNum = -1 THEN
// Error opening file
Error(StringBuild("Error opening %1",sFilName),ErrorInfo())
ELSE
sItemList = HListItem({LTempString})
FOR ALL {LTempString}
sStr = ""
LTempItem = ExtractString(sItemList,firstRank,CR)
WHILE LTempItem <> EOT
/// ****** la siguiente sentencia debería poner el valor del campo de la tabla
sStr = sStr + LTempItem + separador
LTempItem = ExtractString(sItemList,nextRank,CR)
END
fWrite(nFilNum,sStr)
IF ErrorOccurred THEN
Error(StringBuild("Error writing in %1",sFilName),ErrorInfo())
END
END
fClose(nFilNum)
END
LTempString = ExtractString(LFileList, nextRank,CR)
END
Posté le 31 mars 2009 - 11:41
prueba con:

var1="TABLA.CAMPO"
var2={var1,inditem}

o

var2={"TABLA.CAMPO",inditem}

Saludos



"guillermo" <glsaavedra@adinet.com.uy> escribió en el mensaje
news:1e8195324991fcc8951afe990467268e@news.pcsoft...

gracias por la respuesta, pero evidentemente fallé en la explicacion
respecto a lo que necesito ..... a ver si puedo corregir

Vamos a magnificar el escenario

Tengo 1000 tablas definidas y quiero hacer un procedimiento para volcar
todas ellas a CSV

Con el Código que adjunto, paso por todas las tablas, por todos los campos
de todas las tablas, solo me falta una pequeña cuestión, y es la que está
comentada como
/// ****** la siguiente sentencia debería poner el valor del campo de la
tabla

Dado que si trabajo con "indirecciones" no me deja hacer {tabla}.{campo}


Gracias por la ayuda

Guillermo

Paso el código

nFilNum is int
sStr is string
sFilName is string
sLFinalList is string = ""
LFileList is string = HListFile()
sItemList is string
LTempString is string = ExtractString(LFileList,firstRank,CR)
LTempItem is string
WHILE LTempString <> EOT
sFilName = LTempString + ".CSV"
nFilNum = fCreate(sFilName)
IF nFilNum = -1 THEN
Error(StringBuild("Error creating file %1",sFilName),ErrorInfo())
RETURN
END
nFilNum = fOpen(sFilName,foWrite)
IF nFilNum = -1 THEN
// Error opening file
Error(StringBuild("Error opening %1",sFilName),ErrorInfo())
ELSE
sItemList = HListItem({LTempString})
FOR ALL {LTempString}
sStr = ""
LTempItem = ExtractString(sItemList,firstRank,CR)
WHILE LTempItem <> EOT
/// ****** la siguiente sentencia debería poner el valor del campo
de la tabla
sStr = sStr + LTempItem + separador
LTempItem = ExtractString(sItemList,nextRank,CR)
END
fWrite(nFilNum,sStr)
IF ErrorOccurred THEN
Error(StringBuild("Error writing in %1",sFilName),ErrorInfo())
END
END
fClose(nFilNum)
END
LTempString = ExtractString(LFileList, nextRank,CR)
END




Posté le 01 avril 2009 - 11:04
La indirección, utilizandola correctamente es una herramienta muy potente, en tu caso y tal como lo planteas, no estas solucionando bien. prueba lo siguiente:
s is string
s="tabla.campo"
{s,indItem}=asignacion


espero que te sirva.

Saludos