XbpListBox() Daten Speichern

Eigentlich ist mir die Frage peinlich, aber es kann sonst niemand helfen ... :)

Moderator: Moderatoren

Antworten
littlea1991
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 20
Registriert: Fr, 03. Aug 2018 7:17

XbpListBox() Daten Speichern

Beitrag von littlea1991 » Di, 07. Aug 2018 8:52

Guten Morgen Liebe Forenmitglieder,

ich versuche zurzeit einen Primzahlrechner zu programmieren, die Anwendung funktioniert bereits sehr gut. Er rechnet mir die Primzahlen in einem Wertebereich aus, allerdings möchte ich die Ergebnisse in einer DBF Datei Speichern.
2018-08-07 08_49_35-project - Xbase++ Workbench -  [funktionstest_gui.exe_main1.prg].jpg
2018-08-07 08_49_35-project - Xbase++ Workbench - [funktionstest_gui.exe_main1.prg].jpg (29.14 KiB) 418 mal betrachtet
und bei Bedarf später Laden Das klappt mit dem Anfangs und Endbereich sehr gut, allerdings funktioniert es nicht mit der XbpListBox() die ich verwende.

Code: Alles auswählen

   Start := XbpPushButton():new( drawingArea, , {500,36}, {132,180}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
   Start:caption := "Werte Speichern"
   Start:tabStop := .T.
   Start:create()
   Start:activate := {|| feld1:setData(), feld2:setData(), ausgabe:setData(), DBSkip(1)}
   
Beim ausführen der ausgabe (Also der Listbox) gibt es immer einen Fehler mit dem falschen Parameter.
XPPERROR.LOG
(1.18 KiB) 11-mal heruntergeladen
was genau beachte ich nicht bei der Listbox? Die DBF Datei besteht aus
Anfang - Integer,
Ende - Integer,
Ergebnis - Character

Vielen Dank im vorraus für eure Hilfe!

Gruß

Ali

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13110
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: XbpListBox() Daten Speichern

Beitrag von Jan » Di, 07. Aug 2018 10:07

Ali,

ich bin zugegebener maßen irritiert. Aus dem kurzen Codeschnipsel kann ich nicht wirklicher erkennen, was Du da machst. Ich AHNE aber, daß das Du da einen falschen Ansatz gehst.

Was ist feld1? feld2? ausgabe? Wo willst Du warum skippen?

Nur mal so als Einstieg für mich zum Verständnis. Wie gesagt, ich hab da schon so eine Idee, was Du willst und was da falsch läuft. Aber ich will doch erst noch auch Nummer Sicher gehen, bevor ich dann vielleicht doch falsche Gerüchte verbreite hier.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

littlea1991
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 20
Registriert: Fr, 03. Aug 2018 7:17

Re: XbpListBox() Daten Speichern

Beitrag von littlea1991 » Di, 07. Aug 2018 10:26

feld1 und feld2 sind bei mir die XbpSLE() in denen ich den Anfangs und Endebereich für die Primzahlen Einlese (Nutzer soll sie Eingeben) Während ich in der Ausgabe die XbpListbox() verwende. Das DBSkip(1) setzt doch den Zeiger im DBF File eins weiter Vorne (Also soll eine Neue Zeile in der DBF Datei damit angelegt werden).

Code: Alles auswählen

  feld2 := XbpSLE():new( drawingArea, , {408,396}, {48,24}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } )
   feld2:bufferLength := 11
   feld2:tabStop := .T.
   feld2:dataLink := {|x| IIf( PCOUNT()==0, Transform( PRIM_DATENBANK->ENDE, '@N' ), PRIM_DATENBANK->ENDE := Val(x) ) }
   feld2:create():setData()
   

Code: Alles auswählen

ausgabe := XbpListbox():new( drawingArea, , {300,240}, {108,108}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } )
   ausgabe:tabStop := .T.
   ausgabe:editable := .F.
   ausgabe:dataLink := {|x| IIf( PCOUNT()==0,Trim( PRIM_DATENBANK->ERGEBNIS ) , PRIM_DATENBANK->ERGEBNIS := x  ) }
   ausgabe:markMode := XBPLISTBOX_MM_EXTENDED
   ausgabe:create()
   
  
Feld 1 und Feld 2 sind über einen dataLink an die DBF Datei angebunden und wird jedes mal wenn setData()/getData() aufgerufen wird verwendet. Das gleiche habe ich auch bei der Ausgabe gemacht, allerdings gibt es dann dort einen fehler " Parameter hat falschen Typ" wenn beim Werte Speichern Button die ausgabe:setData() Methode aufgerufen wird. Baue ich die Verbindung zur DBF Datei falsch auf und muss Allgemein zuerst eine DatabaseEngine laden?

Gruß

Ali

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14587
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: XbpListBox() Daten Speichern

Beitrag von brandelh » Di, 07. Aug 2018 10:39

Code: Alles auswählen

 feld2:dataLink := {|x| IIf( PCOUNT()==0, Transform( PRIM_DATENBANK->ENDE, '@N' ), PRIM_DATENBANK->ENDE := Val(x) ) }
 ausgabe:dataLink := {|x| IIf( PCOUNT()==0,Trim( PRIM_DATENBANK->ERGEBNIS ) , PRIM_DATENBANK->ERGEBNIS := x  ) }
Zahlen speichert man normalerweise in numerischen Feldern, dann darf man aber weder Transform() noch Val(x) oder TRIM() einsetzen.
Falls du Strings hast in der DBF, könnte es sein, dass eines einen numerischen Wert bzw. ein NIL liefert ?
Gruß
Hubert

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14587
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: XbpListBox() Daten Speichern

Beitrag von brandelh » Di, 07. Aug 2018 10:43

Fast richtig ... Datentyp ist:

Code: Alles auswählen

oError:args         :
          -> VALTYPE: O CLASS: XbpListBox
du lieferst ein Objekt der Listbox, das kann er nicht verarbeiten ...

Code: Alles auswählen

oError:operation    : :setData
bei einer der Setdata Zeilen...

Code: Alles auswählen

Aufgerufen von (B)MAIN(54)
Aufgerufen von XBPPUSHBUTTON:HANDLEEVENT(1556)
Aufgerufen von MAIN(106)
das zeigt mir, dass du den button angeklickt hast und er activate ausführen will, die Zeilennummern kannst du dahinter sehen, leider nützen die hier nichts.
Im Editor siehst du sicher wo er abbiegt, bevor der Fehler kommt.
Gruß
Hubert

littlea1991
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 20
Registriert: Fr, 03. Aug 2018 7:17

Re: XbpListBox() Daten Speichern

Beitrag von littlea1991 » Di, 07. Aug 2018 10:56

danke, ich möchte ja nicht das er das komplette Listbox Objekt versucht zu senden sondern nur die einzelnen felder. Gibt es keine Möglichkeit für mich auf die Werte direkt zuzugreifen? Der Grund warum ich Characters bei der Ausgabe verwende, ist das ich ja pro Abfrage mehrere Zahlen Speichern möchte. z.B. Die Primzahlen von 5 - 10 sind sie 5 und 7. Jetzt möchte ich das er die Ergebnisse in der ListBox in die DBF Datei abspeichert, kann ich nur einzelne Elemente einer Listbox abspeichern in die DBF oder gehen auch mehrere?

Gruß


Ali

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14587
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: XbpListBox() Daten Speichern

Beitrag von brandelh » Di, 07. Aug 2018 11:33

Listboxen sind speziell, da gibt es ja auch mehrfache Auswahl, daher meine ich wird da die Position in der Listbox geliefert, weiß aber nicht mehr genau.
Du kannst im Codeblock Funktionen aufrufen und genau die Daten/Formate heraus holen die du brauchst.

Dem :dataLink := {|x| wird meist der Inhalt eines Controls übergeben, aber du musst im Einzelfall in der Doku schauen, ob es hier auch so ist.
Dass du ein Objekt bekommen hast lässt mich vermuten, dass der auslösende Event der activate des Pushbuttons war, der dann eine Aktion mit der Listbox machen wollte,
wenn du Funktionen übergibst, kannst du die einzelnen Positionen besser erkennen und debuggen.
Gruß
Hubert

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13110
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: XbpListBox() Daten Speichern

Beitrag von Jan » Di, 07. Aug 2018 11:41

Code: Alles auswählen

cString := ""
FOR i := 1 TO oListbox:numItems()
     cString += oListbox:getItem(i)
NEXT
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

littlea1991
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 20
Registriert: Fr, 03. Aug 2018 7:17

Re: XbpListBox() Daten Speichern

Beitrag von littlea1991 » Di, 07. Aug 2018 12:10

@Jan vielen Dank für die Methode, eine ähnliche (wenn auch komplexere) hab ich auch bereits geschrieben.

Code: Alles auswählen

function ausgabeToChar (ausgabe)

local items, i, CharItems
CharItems := " "

items:= ausgabe:numItems()
FOR i := 0 to items
 CharItems += ausgabe:getItem(i)
NEXT i++

RETURN CharItems
kann ich die Funktion dann einfach im dataLink übergeben? Oder wie soll ich das in die DBF Datei reinschreiben?

Gruß

Ali

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13110
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: XbpListBox() Daten Speichern

Beitrag von Jan » Di, 07. Aug 2018 12:32

Ali,

wieso DataLink? Schrieb doch einfach den Inhalt von CharItems in die dbf.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

littlea1991
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 20
Registriert: Fr, 03. Aug 2018 7:17

Re: XbpListBox() Daten Speichern

Beitrag von littlea1991 » Di, 07. Aug 2018 14:01

Alles Klar, habe ich gemacht! Jetzt funktioniert es auch, wie es soll. Vielen Dank an euch beide, für eure tatkräftige Unterstützung :D

Gruß

Ali

Antworten