Hola David
En WinDev no existe el comando create cursor pero es posible manejarlo de las siguientes formas:
1. Con las instrucciones HDescribeItem y HDescribeFile, al final te paso un programa que hice hace mucho para emular el create cursor, esta opción la he utilizado muy poco, prefiero la siguiente forma.
2. Creando una consulta desde un archivo que contenga los campos similares (puede ser un archivo solo con tipos de campos) y de ahí puedes crear un archivo en disco (HToFile) e instanciarlo con HDeclareExternal cuando lo necesites, como una tabla temporal
dsCursor is Data Source
IF HExecuteSQLQuery(dsCursor,hQueryDefault,"SELECT Nombre,Direccion,Telefono FROM Tercero WHERE (1=0)") THEN
// dsCursor se puede llenar, eliminar registros, actualizar, guardar en un archivo, etc
END
Procedimiento para crear un cursor por comandos HDescribexxx
// Summary: <specify the procedure action>
// Syntax:
//Create_Cursor (<dsCursor> is data source, <sEstructura> is string)
//
// Parameters:
// dsCursor (data source): Nombre del cursor
// sEstructura (string): Estructura del cursor
// Return Value:
// None
//
// For instance:
// Indicate an example.
// TMP_Cursor is data source
// sEstructura is string
// sEstructura = "iPrueba I $Entero,cPrueba C(20) $Carácter,nPrueba N(12.3) $Número,mPrueba M $Memo,dPrueba D $Fecha,tPrueba T $Fecha;; Hora" ;; se transforma a ,
// Create_Cursor(TMP_Cursor,sEstructura)
// // HChangeConnection(TMP_Cursor,"")
// // fDelete("TMP.*")
// // fDelete("TMP_Cursor.*")
// // Create_Cursor(TMP_Cursor,sEstructura)
// // HToFile(TMP_Cursor,"tmp.fic")
// // HDeleteFile(ctConexion,"TMP_Cursor.fic")
PROCEDURE Create_Cursor(dsCursor is Data Source,sEstructura is string)
fdFile is File Description
idItem is Item Description
sArc is string = dsCursor
sEst is string
sCam is string
sTip is string
sTam is string
sDec is string
sTit is string
HChangeConnection(dsCursor,"")
fDelete(sArc + ".fic")
fDelete(sArc + ".ndx")
fDelete(sArc + ".mmo")
fdFile..Name = dsCursor
fdFile..Type = hFileNormal
fdFile..FicCryptMethod = hCryptStandard
FOR EACH STRING sEst OF sEstructura SEPARATED BY ","
sTit = Replace(NoSpace(ExtractString(sEst + "$",2,"$")),";;",",")
sEst = NoSpace(ExtractString(sEst + "$",1,"$"))
sCam = NoSpace(ExtractString(sEst,1," "))
sTip = Upper(Replace(Replace(NoSpace(ExtractString(sEst,2," ")),"(",""),")",""))
sTam = Middle(sTip,2)
sDec = NoSpace(ExtractString(sTam + ".",2,"."))
sTam = NoSpace(ExtractString(sTam + ".",1,"."))
sTip = Left(sTip,1)
idItem..Name = sCam
idItem..ExtendedInfo = sTit
SWITCH sTip
CASE "C","S"
idItem..Type = hItemText
idItem..Size = sTam
idItem..KeyType = hDuplicatesKey
BREAK SWITCH
CASE "I","E"
idItem..Type = hItemInteger8
idItem..KeyType = hDuplicatesKey
BREAK SWITCH
CASE "B","R"
idItem..Type = hItemReal8
IF sTam <> "" THEN idItem..DecimalPart = sTam
BREAK SWITCH
CASE "Y"
idItem..Type = hItemCurrency
BREAK SWITCH
CASE "L"
idItem..Type = hItemBoolean
idItem..KeyType = hDuplicatesKey
BREAK SWITCH
CASE "N"
idItem..Type = hItemNumeric
idItem..Size = sTam
idItem..DecimalPart = sDec
idItem..KeyType = hDuplicatesKey
BREAK SWITCH
CASE "D"
idItem..Type = hItemDate8
idItem..KeyType = hDuplicatesKey
BREAK SWITCH
CASE "T"
idItem..Type = hItemDateTime
idItem..KeyType = hDuplicatesKey
BREAK SWITCH
CASE "M"
idItem..Type = hItemTextMemo
BREAK SWITCH
CASE "G"
idItem..Type = hItemBinaryMemo
BREAK SWITCH
OTHER CASE
idItem..Type = hItemText
idItem..Size = sTam
idItem..KeyType = hDuplicatesKey
BREAK SWITCH
END
HDescribeItem(fdFile,idItem)
END
HDescribeFile(fdFile)
Saludos
Daniel