# Adressen speicher - Wie am besten?



## gRaf-eny (29. September 2004)

Hallo,
ich möchte ein Programm schreiben, in welches ich daten von leuten reinladen kann:

Name
Adresse
Geburtstag
Tel
und ein Bild 

Wie mach ich das am besten ?

Wenn ich das Prog starte sollen alle vorhandenen einträge geladen werden und ich will neue dazu schreiben können - 

Was ist eine gut idee?
Einen Ordner, indem für jeden User eine txt datei und ein jpg ist ?

Oder wie macht man das am besten?


----------



## MatMagic (30. September 2004)

> Einen Ordner, indem für jeden User eine txt datei und ein jpg ist ?


Kann man realisieren...aber eine Datenbank wäre effektiver !
Wie sieht denn dein Code bisher aus....oder sollen wir dir einen schreiben


----------



## gRaf-eny (30. September 2004)

ich suche momentan ja noch nach der idee des prinzips 
ich hab nämlich kein ahnung wie es überhaupt geht irgendwas zu speichern...

ok ich hab schon mal ne txt datei geöffnet und gespeichert.. aber das wars

also mir geht erstmal ums prinzip
und dann um den code

)


----------



## MatMagic (1. Oktober 2004)

Wie vorher schon gesagt ist es mit Datenbanken am besten zu machen.....aber damit du ersteinmal einen Anfangserfolg hast probieren wir es mal mit txt.
Wenn dir die Lösung nicht reicht gehen wir das mal mit ner DB an.

In meinem Vorschlag verwende folgende Werte:

eine Text datei erstellen mit dem Namen "anzahl.txt"
drin stehen muss eine 0
eine Text datei erstellen mit dem Namen "daten.txt"
drin stehen soll gar nix


modul erstellen (modvar)
code für das modul:

option explicit
public name(100) as string
public adresse(100) as string
public geburtstag(100) as string
public telefon(100) as string
public foto(100) as string
public dateiname as string
public zeilen as string
public zeilenr as long
public sz as long
public eintrag(600) as long
public wz as long

code modul ende

form erstellen (frmstart)
button erstellen (cmdanzeigen)
button erstellen (cmdneu)
code für frmstart:

private sub cmdanzeigen_click ()
frmanzeigen.show
end sub

private sub cmdneu_click ()
frmneu.show
end sub

code ende frmstart

form erstellen (frmanzeigen)
text feld erstellen (txtanzeige) 
text feld erstellen (txtausgabe)  MultiLine !
bild feld erstellen (picfoto)
button erstellen (cmdvor)
button erstellen (cmdzurueck)
code für frmanzeigen

private sub form_load()
dateiname = "anzahl.txt"
open dateiname for input as 4
do until eof(4) = true
line input #4, zeilenr
wz = zeilenr
doevents
loop
close 4

dateiname = "daten.txt"
open dateiname for input as 4
do until eof(4) = true
line input #4, zeilen
sz = sz + 1
eintrag(sz) = zeilen
doevents
loop
close 4
sz = 1
for t = 1 to wz
name(t) = eintrag(sz)
sz = sz + 1
adresse(t) = eintrag(sz)
sz = sz + 1
geburtstag(t) = eintrag(sz)
sz = sz + 1
telefon(t) = eintrag(sz)
sz = sz + 1
foto(t) = eintrag(sz)
next t
sz = 1
txtanzeige = name(sz)
txtausgabe = name(sz) & ", " & adresse(sz) & ", " & geburtstag(sz) & ", " & telefon(sz)
picfoto.picture = load foto & ".bmp"
end sub

private sub cmdvor ()
sz = sz + 1
txtanzeige = name(sz)
txtausgabe = name(sz) & ", " & adresse(sz) & ", " & geburtstag(sz) & ", " & telefon(sz)
picfoto.picture = load foto & ".bmp"
end sub

private sub cmdzurueck ()
sz = sz - 1
txtanzeige = name(sz)
txtausgabe = name(sz) & ", " & adresse(sz) & ", " & geburtstag(sz) & ", " & telefon(sz)
picfoto.picture = load foto & ".bmp"
end sub
code ende frmanzeigen

form erstellen (frmneu)
text feld erstellen (txtname)
text feld erstellen (txtadresse)
text feld erstellen (txtgeburtstag)
text feld erstellen (txttelefon)
text feld erstellen (txtfoto)
button erstellen (cmdspeichern)
code für frmneu

private sub form_load ()
dateiname = "anzahl.txt"
open dateiname for input as 4
do until eof(4) = true
line input #4, zeilenr
wz = zeilenr
doevents
loop
close 4

private sub cmdspeichern ()
wz = wz + 1
name(wz) = txtname
adresse(wz) = txtadresse
geburtstag(wz) = txtgeburtstag
telefon(wz) = txttelefon
foto(wz) = txtfoto
schreib = wz
dateiname = "anzahl.txt"
    gh = FreeFile
    Open dateiname For Output As #gh
Print #gh, schreib
Close #gh
sz = 1
schreib = ""
for t = 1 to wz
name(t) = eintrag(sz)
sz = sz + 1
adresse(t) = eintrag(sz)
sz = sz + 1
geburtstag(t) = eintrag(sz)
sz = sz + 1
telefon(t) = eintrag(sz)
sz = sz + 1
foto(t) = eintrag(sz)
schreib = schreib & name(t) & vbnewline & adresse(t) & vbnewline & geburtstag(t) & vbnewline & telefon(t) & vbnewline & foto(t)
next t

dateiname = "daten.txt"
    gh = FreeFile
    open dateiname for output as #gh
print #gh, schreib
close #gh
msgbox "gespeichert", vbokonly
end sub


Die Eingabe Foto sollte den namen deines Bildes enthalten. z.b. 1 wenn dein Bild 1.bmp heisst. In diesem Code sind keinerlei Fehlerabfragen.....alles nur zum basteln. 
Ich hoffe das ich keinen Schreibfehler im Code habe.....das ganze ist auch nur ein Ansatz und wirklich nicht das beste. Das ganze besser machen kannste zum Beispiel mit Listboxen statt Textfeldern bei der Ausgabe - dann fallen auch die cmds weg. Naja is ja nur damit du was zum probieren hast. Ich hoffe es hilft dir.
Gruß
Mat


----------



## Da Hacker (2. Oktober 2004)

@MatMagic:
Wow, cool das du dir so viel Mühe gemacht hast! Jetzt habe ich es sogar gecheckt!
Vielen Dank!


----------



## gRaf-eny (3. Oktober 2004)

jo sieht schon danach aus, was ich wollte *g*
hab nur gleich ein problem:

Line Input #4, zeilenr

er sagt bei "zeilenr" - > Compile Error: Type Mismatch  :suspekt: 
hab das kanze projekt auch mal hoch geladen für besser verständnis 

http://www.flugplatz-verden.de/datenbank.zip


----------



## MatMagic (3. Oktober 2004)

Ich habe die Fehler beseitigt....
Hier kannste dir das ganze runterladen: http://www.matmagic.de/datenbank_neu.zip

Gruß
Mat


----------



## MatMagic (15. Oktober 2004)

öhm...hats es denn nun für deine zwecke gereicht
          ^^


----------



## üpoiuztrewq1234 (27. November 2009)

Hallo.
Also bei mir klappt da nun garnichts.
Unter welcher VB Version käuft das den bei euch ?


----------



## vb64ever (16. Januar 2010)

hallo leute,
ich will nicht als gast klugscheissern, aber wieviele daten sollen denn da maximal rein?

wenn du nämlich kein ganzes telefonbuch anlegen willst, das dem der telekom konkurrenz machen können soll, würde ich dir zu einer einfacheren variante raten:
du legst eine form an mit einer listbox für die namen und den textfeldern für jeden inhalt, den du sichern willst (zum foto später).
jetzt würde ich dir zu einer stringmanipulation raten: zb
Datensätze werden mit "$" getrennt und Daten der Datensätze mit "§".
jetzt brauchst du nur folgenden code zum einlesen

dim datensaetze() as string
dim daten() as string

public function einlesen()

dim eingang as string
dim speicherort as string
speicherort = DEIN ORT

if dir(speicherort)= "" then
'wenn daten nicht vorhanden aufhören 
 MsgBox "Keine Daten gefunden! Die Datei existiert nicht!", vbCritical, Me.Caption
 exit function
else
'laden
 open speicherort for input as #1
 input #1, eingang
 close #1
'zerlegen
 'verhindern das die datei leer ist
  if eingang = "" then
   msgbox "Keine Daten in der Datei!", vbInformation, me.caption
   exit function
  end if
  datensaetze = split(eingang, "$", -1)
  'in listbox List1 einfügen
  'gewähltes auslesen
    'zähler variblen
    dim n as integer
    dim i as integer
    for n= 0 To LBound(datensaetze) 
     daten = split(datensaetze, "§", -1)
     List1.AddItem daten(0) & ", " & daten(1)
    next
 end if
end function

Private Sub List1_Click()
    daten = Split(datensaetze(List1.ListItem), "§", -1)
    dim x as integer
    for x = 0 to LBound(daten) - 1
     txtFields(x).Text = daten(x)
    next
    EINFÜGEN INS IMGBOX [daten(letztes element)]
end sub

wenn du nun ein foto dabei haben willst kannst du neben der personen daten auch noch in die reihe den specherort eines bildes eintragen (mit filecopy kannst du es auch in deinen ordner kopieren).

das ist eine einfache version einer datenbank struktur, die meiner erfahrung nach für solche zwecke voll aureicht.
ich hoffe der code ist fehlerfrei (ev. hab ich LBound mit UBound vertauscht).

viele grüße


----------

