Seite 1 von 1

DBF-Status zwischenspeichern/zurückholen (erledigt]

Verfasst: Di, 14. Nov 2017 22:30
von DelUser01
Hallo

Hat einer eine kleine Routine um den gesamten DBF-Status zwischenzuspeichern (Array) und wieder zurückzuholen?
- Inderorder
- RecNo()

Bin vermutlich nur zu faul um nachzudenken...

Re: DBF-Status zwischenspeichern/zurückholen

Verfasst: Mi, 15. Nov 2017 0:24
von DelUser01
bin dahinter gekommen, warum das mit "normalen" Funktionen nicht geht, muss was eigenes machen...

Re: DBF-Status zwischenspeichern/zurückholen (erledigt]

Verfasst: Mi, 15. Nov 2017 12:13
von Rudolf
Hallo Roland,
ich schick Dir ein PN mit meiner Funktion die seit sehr vielen Jahre zuverlässig funktioniert
Grüße
Rudolf

Re: DBF-Status zwischenspeichern/zurückholen (erledigt]

Verfasst: Mi, 15. Nov 2017 13:49
von Wolfgang Ciriack
Kannst du mir diese bitte auch senden ?

Re: DBF-Status zwischenspeichern/zurückholen (erledigt]

Verfasst: Mi, 15. Nov 2017 14:00
von Rudolf
Hallo Wolfgang,
hier nochmal für alle
Grüße
Rudolf

Code: Alles auswählen

function savesel(cSel)
******************************************************************
local x,aRet := {},aWSL,cAlias,i
local cFilter,bFilter,akey,nOldOrder := 0
default cSel to ""
aWSL := workspacelist()
aadd(aRet,{ntrim(select()),alias(),recno(),indexord(),dc_setscope(0),dc_setscope(1),isshared()})
for x := 1 to len(aWSL)
     cAlias := aWSL[x]
     nOldOrder := (cAlias)->(indexord())
     aKey := {}
     FOR i:=1 TO (cAlias)->(OrdCount())
          (cAlias)->(setorder(i))
          AAdd( aKey,{i,(cAlias)->(dc_setscope(0)),(cAlias)->(dc_setscope(1))})
     NEXT
     (cAlias)->(setorder(nOldOrder))
     aadd(aRet,{x,;                    // 1
               cAlias,;                // 2
               (cAlias)->(recno()),;   // 3
               (cAlias)->(indexord()),; // 4
               (cAlias)->(dc_setscope(0)),; // 5
               (cAlias)->(dc_setscope(1)),; // 6
               (cAlias)->(isshared()),; // 7
               (cAlias)->(dbfilter()),; // 8
               aKey})                  // 9
next x
if !empty(cSel)
     if sel(cSel)
          return aRet
     else
          return NIL
     endif
else
     return aRet
endif
return NIL


function restsel(aSel)
******************************************************************
local x,y,lFound,cAlias,aWSL := workspacelist(),aKey,i
if aSel = NIL
     return .t.
endif
for x := 1 to 255 // offene löschen
     if !empty(alias(x))
          lFound := .f.
          for y := 2 to len(aSel)
               if alias(x) = aSel[y,2]
                    lFound := .t.
                    exit
               endif
          next y
          if !lFound
               (alias(x))->(dbclosearea())
          endif
     endif
next x
for x := 2 to len(aSel)
     cAlias := aSel[x,2]
     if !dbused(cAlias) // wurde geschlossen
          if !sel(cAlias,aSel[x,7])
               //prot(cAlias + " Alias konnte nicht wieder geöffnet werden",addpath(al_path,"problem.log"))
               select (aSel[1,1])
               return .f.
          endif
     endif
     aKey := aSel[x,9]
     if dbused(cAlias)
          for i := 1 to len(aKey)
               (cAlias)->(setorder(aKey[i,1]))
               (cAlias)->(dc_setscope(0,aKey[i,2]))
               (cAlias)->(dc_setscope(1,aKey[i,3]))
          next i
          (cAlias)->(setorder(aSel[x,4]))
          (cAlias)->(dbgoto(aSel[x,3]))
     endif
next
select (aSel[1,1])
return .t.

Re: DBF-Status zwischenspeichern/zurückholen (erledigt]

Verfasst: Mi, 15. Nov 2017 14:30
von DelUser01
Danke Rudolf - schaue ich mir nachher an...

Re: DBF-Status zwischenspeichern/zurückholen (erledigt]

Verfasst: Mi, 15. Nov 2017 15:53
von Wolfgang Ciriack
Danke.