Hi Leute,
wieder mal etwas interessantes entdeckt.
Ich habe unter XbpBrowse 2 Möglichkeiten die Felder einer DB zu browsen. Entweder lese ich sie direkt aus der Db aus und zeige dann alle Felder im Browsefenster an, oder aber ich gebe eine Maskendatei an, in der die einzelnen Feldnamen mit Überschriftbezeichnungen in einzelnen Datensätzen stehen. Das klappt auch prima, nur ist mir jetzt etwas unter XbpQuickBrowse aufgefallen, wonach ich etliche Zeit auf Fehlersuche war. Unter Quickbrowse kann man nicht so ohne weiteres die Feldbezeichnungen aus einer Tabelle einlesen und dann browsen lassen. Die Feldbezeichnungen müssen mit TRIM(feldname) angegeben werden, sonst wird nur ein leerer Bildschirm angezeigt.
Jetzt sagt nicht, das ist ein alter Hund.....
Hier ein kleiner Ausschnitt wie es abläuft.
Code: Alles auswählen
IF ! EMPTY(cMaskendatei) // wenn keine Maskendateibezeichnung übergeben wurde
IF ! FILE("..\datenbanken\masken\" + cMaskendatei + ".dbf") // wenn die Maskendatei nicht vorhanden ist
oMessage:anzeigen("ACHTUNG! Eine Anzeigemaske " + cMaskendatei + " liegt nicht vor. ")
IF ! lPauschalMaske
RETURN(.F.)
ENDIF
IF oMessage:anzeigen("Soll die Datenbank pauschal angezeigt werden?",.T.,"N")
cMaskendatei := ""
ELSE
RETURN(.F.)
ENDIF
ELSE
DbUseArea(.T.,"DBFCDX","..\datenbanken\masken\" + cMaskendatei,"maske",.T.,.F.)// kann vielleicht später mal gegen etwas komfortableres ausgetauscht werden
aMaskenArray := ARRAY(maske->(LASTREC()),FCOUNT()) // Erzeugung des Arrays anhand der Recordmenge in der Maskendatei
maske->(DBEVAL({|| aMaskenArray[maske->(RECNO())] := {maske->feld,maske->uschrift,maske->folge,maske->feldbreite,maske->ausblenden,maske->fix}}))
ASORT(aMaskenArray,,, { |x, y| x[3] < y[3] }) // Array wird nun nach der vorgegebenen Reihenfolge sortiert für Browse
maske->(DbCloseArea()) // wird geschlossen, da alle Werte übernommen wurden in ARRAY
nLen := LEN(aMaskenArray)
FOR nI := 1 TO nLen // einmal das Array durchlaufen und die Felder abfragen
AAdd(aFields,TRIM(aMaskenArray[nI,1])) // Feldbezeichnungen
AAdd(aHeader,aMaskenArray[nI,2]) // Überschriften
NEXT
ENDIF
ENDIF
IF EMPTY(cMaskendatei)
nFcount := (ALIAS())->(Fcount())
FOR nI := 2 TO nFcount // für den Fall, das es keine Maskendatei gibt
AAdd(aFields, (ALIAS())->(FieldName(nI))) // Feldnamen übernehmen
AAdd(aHeader, (ALIAS())->(FieldName(nI))) // Überschriften aus den Feldnamen generieren
NEXT // überlegt werden, ob das Fenster nicht danach nochmals angepaßt wird mit neuer Breite
ENDIF