Seite 1 von 1

dbf in combobox einlesen

Verfasst: Fr, 13. Mai 2016 8:33
von XBaseAzubi
Hallo!
Ich lerne Xbase++ gerade und weiß nicht weiter:
Es soll der Inhalt einer dbf (UserID und UserName) in eine ComboBox eingelesen werden, um einen Wert : UserID nach der Auswahl in der Combobox in einer Variable zu speichern.

Code: Alles auswählen

function user()
   local aUser := {}, ni
   
   FIELD USERID, USERNAME, ACTIVE
   dbGoTop()
   do while ! Eof()
      if sUser->ACTIVE
         ni := aScan(aUser, {|a| a = Str(sUser->USERID) })
         if ni == 0   
            aAdd(aUser, Str(sUser->USERID) + " " + sUser->USERNAME)
         endif
      endif
      DbSkip()
   enddo
   
return aUser
Denke ich zu kompliziert und geht´s auch einfacher?

Gruß
Martin

Re: dbf in combobox einlesen

Verfasst: Fr, 13. Mai 2016 8:48
von Martin Altmann
Moin Martin,
herzlich Willkommen im Forum - ich habe mir mal erlaubt, Dein Codeschnipsel in die entsprechenden code-Tags einzuschließen, dann kann man das besser und strukturiert sehen.
Zu kompliziert denken tust Du nicht - im Prinzip passt das schon so.
Du könntest Dir nur folgendes überlegen:
Kann der User mehrmals aktiv sein? Wenn nicht, kannst Du Dir das Prüfen mittels aScan im Prinzip sparen und den gesamten do-while-teil einfacher erledigen:

Code: Alles auswählen

sUser->( DbEval( {|| aAdd( aUser, Str(USERID) + " " + USERNAME) ) }, {|| ACTIVE } ) )
Viele Grüße,
Martin

Re: dbf in combobox einlesen

Verfasst: Fr, 13. Mai 2016 9:24
von brandelh
So sind die Namen natürlich erstmal in einem Array, noch nicht in einer ComboBox ;-)

Re: dbf in combobox einlesen

Verfasst: Fr, 13. Mai 2016 9:27
von XBaseAzubi
Hallo Martin!
Zuerst mal: ich bin begeistert wie schnell du geantwortet hast. Danke!

Nun: Das "Active" ist dafür da, nur jene User in das Array der Combobox einzulesen, die noch im Betrieb sind und somit "Aktiv".
Das Prinzip habe ich verstanden. Irgendwas übersehe ich aber, denn beim kompilieren bekomme ich die Fehlermeldung "Function user does not end with RETURN".

Code: Alles auswählen

//---------------------------------------------- 

function user()
   local aUser := {}

   FIELD USERID, USERNAME, ACTIVE

   sUser->( DbEval( {|| aAdd( aUser, Str(USERID) + " " + USERNAME) ) }, {|| ACTIVE } ) )
return aUser

//---------------------------------------------- 
Gruß
Martin

Re: dbf in combobox einlesen

Verfasst: Fr, 13. Mai 2016 9:30
von Martin Altmann
Sorry,
das liegt daran, dass eine ) hinter USERNAME zu viel ist - dicke Finger!
Mach die weg, dann klappt das mit dem Compilieren auch.

Viele Grüße,
Martin

Re: dbf in combobox einlesen

Verfasst: Fr, 13. Mai 2016 9:34
von brandelh
Ein Syntaxfehler kann dazu führen, zähle mal deine Klammern:

sUser->( DbEval( {|| aAdd( aUser, Str(USERID) + " " + USERNAME) ) }, {|| ACTIVE } ) )
so sollte es stimmen.
sUser->( DbEval( {|| aAdd( aUser, Str(USERID) + " " + USERNAME ) }, {|| ACTIVE } ) )

Die mächtigen Befehle mit den Codeblocks sind leider etwa unübersichtlicher bei den Fehlermeldungen ;-)

Re: dbf in combobox einlesen

Verfasst: Fr, 13. Mai 2016 9:52
von XBaseAzubi
Herzlichen Dank an meine Helden!