Adress-Verwaltung: Type-Datensätze in File speichern

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Gizeh

Betreff: Adress-Verwaltung: Type-Datensätze in File speichern

BeitragMo, Okt 02, 2006 10:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein liebes Hallo an alle Smile
Ich habe da eben ein Problem, und komme seit Stunden einfach nicht weiter - ich glaube, es liegt an einer Wissenslücke meinerseits, die ich in bezug auf die Thematik im Moment leider noch habe.

Ich würde mich freuen, wenn mir der eine oder andere Prof eben mal weiter helfen kann, ich grüble seit Stunden und komme auf keine Lösung.

Worum geht es?
Ich habe eben, als kleine Anfänger-Fingerübung, eine Mini-Adress-Verwaltung geschrieben. Die Datensätze für jede einzelne Person (Name, Nachname, Telefon-Nummer und Anzahl des Eintrages) werden dabei als Type gespeichert.

Funktioniert auch bis dahin - nur möchte ich jetzt gerne noch eine dauerhafte Speicher-Funktion einbauen. Nach Eingabe der kompletten Datensätze einer Person (quasi eines Types) soll dieser Personen-Eintrag gleich mal einem externen DB-File zugefügt werden.

Ich habe versucht das so zu lösen:
(siehe letzter Absatz "DATEI ERZEUGEN / NEUE PERSONEN-DATEN DARIN ANLEGEN " )

Code: [AUSKLAPPEN]


; FUNKTION PERSONEN-DATEN EINGEBEN

Function Eingeben()
   Cls
   Locate 10,10
   
   ; GLOBALE ZÄHLVARIABLE FÜR EINTRÄGE-GESAMT HOCHZÄHLEN
   AnzahlPersonen = AnzahlPersonen + 1

   ; EINGABE DER NEUEN DATEN
   eingabeName$    = Input$("Name: ")
      eingabeName$ = Upper(eingabeName$)
   Locate 10,20
   eingabeNachname$ = Input$("Nachname: ")
      eingabeNachname$ = Upper(eingabeNachname$)
   Locate 10,30
   eingabeNummer$  = Input$("Telefon: ")

   ; ANLEGEN EINER NEUEN PERSON NACH STRUKTUR TYPE-PERSON
   Local persona.Person = New Person
     Persona\nummer   = AnzahlPersonen
     persona\name     = eingabeName$
     persona\nachname = eingabeNachname$
     persona\telefon  = eingabeNummer
     

     ; DATEI ERZEUGEN / NEUE PERSONEN-DATEN DARIN ANLEGEN               
   file% = WriteFile("Datenbank.db")
   WriteInt    (file,AnzahlPersonen)
   WriteInt    (file,Persona\nummer)
   WriteString (file,Persona\name)
   WriteString (file,Persona\nachname)
   WriteString (file,Persona\telefon)
   CloseFile   (file)

      

End Function


Nun ist es aber so: "Natürlich" (zumindest für die Profis unter Euch) wird nun immer nur EIN Eintrag in das File gespeichert. Das heißt, jeder neue und weitere Eintrag überschreibt den Vorhergehenden - es bleibt quasi immer nur ein einziger (natürlich der letzte zuvor eingegebene), der bei jedem neuen Start der DB eingelesen wird. Toll Rolling Eyes

Wie kann ich dieses Problem denn beheben?

Smile
  • Zuletzt bearbeitet von Gizeh am Mo, Okt 02, 2006 17:06, insgesamt 2-mal bearbeitet

kog

BeitragMo, Okt 02, 2006 10:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bin mir nicht sicher und habe es auch noch nicht ausprobiert, aber probier statt Writefile, Openfile.
Wie gesagt weiss es nicht zu 100%

5k41

BeitragMo, Okt 02, 2006 10:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Als erstes ist das sinnlos:
Code: [AUSKLAPPEN]

   WriteInt    (file,gNumNames)
   WriteInt    (file,Persona\nummer)

Nun zum rest: Am besten machst du dir dafür eine Extra Speicher Funktion. Jene geht mit for/each alle Types durch und schreibt sie dann in die Datei. Zum laden das gleiche nur mit lesen. Dann einfach bevor man das Programm beendet einmal die Speicher Funktion aufrufen und nach dem Start die Lade FUnktion und fertig Smile

MfG
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image
 

Dreamora

BeitragMo, Okt 02, 2006 10:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit SeekFile das Ende der Datei suchen und dort anhängen anstatt immer wieder bei 0 reinzuschreiben.

Writefile stimmt schon (OpenFile wäre wertlos)

Ich empfehle jedoch nicht ständig Datei auf, Datei zu, ausser es wird effektiv nur sporadisch etwas neues hinzugefügt.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

antome

!!! gesperrt !!!

BeitragMo, Okt 02, 2006 10:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Writefile löscht eine existierende Datei wieder also ist Openfile schon richtig
allerdings musst du vorher testen ob die Datei existiert, Openfile schreibt nur in schon existierende Dateien. Also erzeugen der Datei mit WriteFile und erneutes reinschreiben nach dem schliesen mit Openfile

Edit:
Wenn du allerdings die Daten beim Aufruf sowieso alle ausliest, kannst du die Datei auch komplett neu mit Writefile schreiben.
antome
  • Zuletzt bearbeitet von antome am Mo, Okt 02, 2006 10:59, insgesamt einmal bearbeitet
 

HappyCosinus

BeitragMo, Okt 02, 2006 10:59
Antworten mit Zitat
Benutzer-Profile anzeigen
hm, du könntest das so machen, wenn du unbedingt die datei auf und zu machen willst.. zwar nicht soo optimal, aber egal, du wolltest ja eine lösung für dieses problem.. ich hab das da nur etwas umgestaltet mit writeline, damit das übersichtlich aussieht in der datenbank. solltest du natürlich wegmachen.
viel erfolg noch

file% = OpenFile("Datenbank.txt")
If file% = 0 Then file%=WriteFile("Datenbank.txt")
SeekFile(file%,FileSize("Datenbank.txt"))
WriteLine (file,"Kennziffer: "+Persona\nummer)
WriteLine (file,"Vorname: "+Persona\name$)
WriteLine (file,"Nachname: "+Persona\nachname$)
WriteLine (file,"Telefon: "+Persona\telefon)
WriteLine (file,"")
CloseFile (file)
 

antome

!!! gesperrt !!!

BeitragMo, Okt 02, 2006 11:01
Antworten mit Zitat
Benutzer-Profile anzeigen
So kann er die Datei ohne die Zeile zu parsen nicht mehr in ein Type einlesen
antome

5k41

BeitragMo, Okt 02, 2006 11:06
Antworten mit Zitat
Benutzer-Profile anzeigen
da verschafft meine Methode abhilfe Smile
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

Gizeh

BeitragMo, Okt 02, 2006 11:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Lieben Dank für Eure Antworten! Ich versuche mich jetzt mal an ihnen - wenn´s klappt, gebe ich einen Kaffee aus Very Happy

Bis nachher Wink

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group