German Tabelle speichert Daten falsch oder gar nicht ...

JOTHA

Well-Known Member
Licensed User
Longtime User
Hallo im Forum,

Ich bräuchte mal Hilfe zu meinem Speziellen Problem.

Ich habe das Ganze auch im englischen Forum gepostet, weil ich daran schon tagelang herumlaboriere, aber leider nicht weiterkomme.


Hello experts in the forum,

I am a Newbie on B4P and I have a special problem, maybe some of you experts can help me ...

I made a sample in which I want to save data in a table.

In the first step it seems to work, but if I open the sample again, the data is not saved correct.

Example:

I make the first dataset with the Firstname (Vorname) "Max" and the Lastname (Nachname) "Muster". The result should be "Max Muster".
Then I make the second dataset with the Firstname (Vorname) "Paul" and the Lastname (Nachname) "Meier". The result should be "Paul Meier".

When I close the sample, the data should be saved into a CSV-Table and into a XML-File.

After that I open the sample again, the results are "Max Nachname" and "Vorname Muster".

When I add a third dataset, the problem gets bigger ...

The next problems are: I doesn´t save the value of the RadioButton "mit Partner" and "ohne Partner". And it doesn´t save the values from the CheckBoxes.

Can someone help me please?

I attached the sample, excuse me because it is in german, but I hope that doesn´t matter in understanding the code problems. Excuse me if my english isn´t good to explain the problem ... please have a look on the sample.

Thank you in advance! :sign0085:

Ich habe das Beispiel stark "abgespeckt", damit es übersichtlicher wird. In diesem Beispiel möchte ich Daten in einer Tabelle speichern.

Im ersten Schritt sieht es so aus, als ob alles funktionieren würde, aber wenn ich das Beispiel erneut öffne, sind die Daten nicht korrekt gespeichert.

Beispiel:
Ich gebe einen ersten Datensatz ein mit Vorname "Max" und Nachname "Muster". Das Ergebnis sollte "Max Muster" sein.
Dann gebe ich einen zweiten Datensatz ein mit Vorname "Paul" und Nachname "Meier". Das Ergebnis sollte "Paul Meier" sein.

Wenn ich dann das Beispiel schließe, sollten die Daten automatisch in einer CSV-Datei und einer XML-Datei gespeichert werden.

Wenn ich dann das Beispiel erneut öffne, wird angezeigt: "Max Nachname" und "Vorname Muster".

Wenn ich einen dritten Datensatz hinzufüge wird das Problem noch grösser ...

Weitere Probleme: Der Wert von den RadioButtons "mit Partner" und "ohne Partner" wird überhaupt nicht in der Tabelle gespeichert. Außerdem auch nicht die Häckchen in den CheckBoxen.

Kann mir bitte jemand helfen? :sign0085:

Das Beispiel habe ich beigefügt, ich würde mich sehr freuen, wenn das jemand genauer anschauen würde ...

Vielen Dank im Voraus!
 

klaus

Expert
Licensed User
Longtime User
Hallo JOTHA,

Ich bin in dein Programm reingetaucht. Die beiliegende Version, mit Daten, funktioniert.
Die Codezeilen die Ich geändert habe, habe Ich mit ' Klaus ergänzt. Habe vieleicht die eine oder andere vergessen.

Das Problem war folgendes:
- in der Routine FSZNR_LostFocus, die erste Variable die geändert wird, ruft die Routine ButtonAenderungenSichern_Click auf wo Variablen schon geändert werden bevor diese aber upgedatet wurden.
- das gleiche mit den xxx.SelectedIndex=yyy ruft xxx_SelectionChanged die auch ButtonAenderungenSichern_Click aufruft.

In den Routinen xxx_LostFocus und yyy_SelectionChanged ist es besser nur die betroffene Variable upzudaten als Alle. War auch Teil vom Problem.
B4X:
Sub Vorname_LostFocus 
.
.
.
'  ButtonAenderungenSichern_Click         'Klaus
  TableName.Cell("Vorname",row)=Vorname.Text      'Klaus
End Sub

Ich habe in den LoadCSV und SaveCSV das "," durch ";" ersetzt, erleichtert das lesen mit Excel. Kannst Du aber rückgängig machen.

In den Routinen zum vorwärts und rückwärts blättern habe Ich die row Anweisung auch geändert. Als Beispiel:
B4X:
Sub ButtonNaechster04_Click
'  row = (row+1) Mod TableName.RowCount   ' Klaus
  row=row+1
  If row >TableName.RowCount-1 Then
    row=0
  End If
  ShowRow
End Sub

'------------------------------------------------------
' Vorherigen Datensatz anzeigen
'------------------------------------------------------
Sub ButtonVorheriger01_Click
'  row = (row+TableName.RowCount-1) Mod TableName.RowCount   'Klaus
  row=row-1
  If row<0 Then
    row=TableName.RowCount-1
  End If
  ShowRow
End Sub

Grüsse.
 

Attachments

  • FSZ_PPC Sample Klaus.zip
    8.8 KB · Views: 332

JOTHA

Well-Known Member
Licensed User
Longtime User
Hallo Klaus,

ich wollte auf deine erneute Hilfestellung antworten, aber das Forum, bzw. die ganze B4P-Seite (Server) war nicht zugänglich. Das war in der Zeit zwischen ca. 09.30 Uhr und 10.30 Uhr. War das bei Dir auch so?

Durch deine Anregungen mit "Die ganzen ButtonClicks auf eine einzige Routine verzweigen" habe ich jetzt ca. 700 Zeilen weniger Code. Ich denke, daß damit die Ladezeit des Programmes später schon etwas reduziert wird.

Danach habe ich wie ein Verrückter nach einem möglichen Fehler wegen der Speicherung in der Tabelle gesucht und bin dann auf die Idee gekommen, alle "ButtonAenderungenSichern_Click" (egal wo Sie vorkommen) zu deaktivieren, denn der Fehler mußte meiner Meinung nach außerhalb von "CSVSave" und "CSVLoad" liegen.

In deiner erneuten Hilfe, die ich ja auch per E-Mail Information in meinem Postfach gefunden habe gebe ich Dir auch völlig Recht mit deiner Aussage: "In den Routinen xxx_LostFocus und yyy_SelectionChanged ist es besser nur die betroffene Variable upzudaten als Alle." Es macht tatsächlich keinen Sinn die restlichen Felder alle neu upzudaten, es ändert sich am Inhalt ja auch nichts.
Ich möchte eben alle zu "100% wasserdicht" machen, aber in diesem Fall ist das ja Quatsch (und es spart wieder einige Zeilen Code).

Vielen Dank also nochmals für deine Arbeit !!!

Gruß
 
Top