vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Komplett und funkt  
Autor: unbekannt
Datum: 13.01.02 15:03

Lordchens kleine Addressdatei


So geht es genau:


Neues Projekt anlegen. In die Form folgendes einfügen:


-1- Listbox. Eigenschaft Sortieren = True


-15- Textboxen als Steuerelementefeld anlegen. Name: txt(0) ... txt(15)


-1- Commandbutton, Name = cmdNew


-1- Commandbutton, Name = cmdSave


-1- Commandbutton, Name = cmdSearch


-1- Commandbutton, Name = cmdDel


Es wurde festgestellt, dass entgegen SQL der Like Operator in VB nicht mit Variablen arbeitet (kommt davon, wenn man zuviel mit SQL proggt).

Einiges war in der Tat wrong (kommt davon wenn man aus dem Kopf proggt).

Aber das nachfolgende ist getestet Den Code bitte in die Form einfügen,
und die Addressenverwaltung ist gebongt. Eines aber habe ich Dir überlassen:
Das Löschen von Datensätzen - na, wie könnte das wohl gehen mhm?

So jetzt eine kurze Erläuterung wie das Ding LoadDS (der Megatrick hier) genau funktioniert, das ist der Kamerad:

   S = ConvertUDT(Addressen)
   vErg = Split(S, ";") 'na Trickreich was :-)
   For i = 0 To UBound(vErg) - 1 Step 2
      txt(n) = Trim(vErg(i))
      n = n + 1
   Next
Wir haben in SaveALL an jedem Datenfeld ein ";Nr;" angehängt. Diese "Nr" sagt aus, zu welchem Textfeld die Daten gehören, Nr. 0 ... 15. Wir nehmen in Kauf,
dass wir in einigen Fällen die Daten etwas aufpeppeln müssen, nehmen dafür aber einen ungewöhnlichen Vorteil, der sich auch daraus ergibt, sehr gerne auf. Der Vorteil ergibt sich in der Funktion Split, die ";" ausfiltert und uns den String in ein Array zerlegt. Zunächst wird der gesamte UDT durch die Funktion ConvertUDT, mithilfe der API-Funktion RtlMoveMemory in einen Gesamtstring kopiert. Der String wird gesplittet und es entsteht in vErg ein Array, dass wie folgt vorliegt:


vErg(0) = 1
vErg(1) = 0
vErg(2) = CyberLord (Familienname)
vErg(3) = 1
vErg(4) = Hugo (Vornamen)
vErg(5) = 2
u.s.w.
Ello: Split splittet unsere Zusätze weg Nun steppt man in zweier Schritten durch das Array und lässt einen Zähler mitlaufen, so erhält man mit
dem Zähler die genaue Feldposition und kann die Daten zuweisen. Voila!

Genauso suchen wir auch. Wir lassen wieder das UDT in einen String zerlegen und suchen ganz einfach mit Instr nach dem Suchbegriff oder einem Teil davon.

Anbei der Code.

cu
Lordchen


Private Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" _
     (lpvDest As Any, _
      lpvSource As Any, _
      ByVal cbCopy As Long)
 
Private Type Adr
    SatzNummer   As String * 10
    Name         As String * 75
    Vorname      As String * 50
    Strasse      As String * 75
    PLZ          As String * 10
    Wohnort      As String * 75
    Land         As String * 50
    Telefon_P    As String * 15
    Telefon_G    As String * 15
    Handy        As String * 15
    Fax          As String * 15
    MailAddresse As String * 125
    HomePage     As String * 255
    Sonstiges    As String * 255
    Bemerkungen  As String * 255
    Formular     As String * 10
End Type
 
Private Addressen As Adr
 
Private Sub SaveAll(Optional newSatzNr As Long)
   Dim F As Byte
   Dim DSNr As Long
   Dim i As Integer
 
   If txt(0).Text = "" Then
       MsgBox "Speichern des Datensatzes ist nicht möglich.", vbExclamation, _
         "Fehler"
       Exit Sub
   End If
 
   For i = 0 To 15
      With Addressen
        Select Case i
           Case 0
              .SatzNummer = txt(i) & ";0;"
           Case 1
              .Name = txt(i).Text & ";1;"
           Case 2
              .Vorname = txt(i).Text & ";2;"
           Case 3
              .Strasse = txt(i).Text & ";3;"
           Case 4
              .PLZ = txt(i).Text & ";4;"
           Case 5
              .Wohnort = txt(i).Text & ";5;"
           Case 6
              .Land = txt(i).Text & ";6;"
           Case 7
              .Telefon_P = txt(i).Text & ";7;"
           Case 8
              .Telefon_G = txt(i).Text & ";8;"
           Case 9
              .Handy = txt(i).Text & ";9;"
           Case 10
              .Fax = txt(i).Text & ";10;"
           Case 11
              .MailAddresse = txt(i).Text & ";11;"
           Case 12
              .HomePage = txt(i).Text & ";12;"
           Case 13
              .Sonstiges = txt(i).Text & ";13;"
           Case 14
               .Bemerkungen = txt(i).Text & ";14;"
           Case 15
               .Formular = txt(i).Text & ";15;"
        End Select
      End With
   Next
 
   F = FreeFile()
   On Error GoTo FileError
   Open "Adressen.TXT" For Random As #F Len = Len(Addressen)
   On Error GoTo 0
     If newSatzNr > 0 Then
        DSNr = newSatzNr
     Else
        DSNr = Val(txt(0).Text)
     End If
     'Datensatz speichern
     Put #F, DSNr, Addressen
   Close #F
   Exit Sub
 
FileError:
   MsgBox "Die Adressdatei konnte nicht gefunden oder geöffnet werden!", _
     vbExclamation, "Dateifehler"
End Sub
 
Private Function ConvertUDT(oUDT As Adr) As String
    Dim S As String
    S = Space(Len(Addressen))
    CopyMem ByVal S, oUDT, Len(Addressen)
    ConvertUDT = S
End Function
 
Private Sub LoadDS(ByVal sNr As Long)
   Dim vErg As Variant
   Dim F As Byte
   Dim n As Integer
   Dim i As Long
   Dim S As String
 
   'Felder leeren
   For i = 0 To 15
      txt(i).Text = ""
   Next
 
   F = FreeFile()
   On Error GoTo FileError
   Open "Adressen.TXT" For Random As #F Len = Len(Addressen)
   On Error GoTo 0
       Get #F, sNr, Addressen
   Close #F
 
   S = ConvertUDT(Addressen)
   vErg = Split(S, ";") 'na Trickreich was :-)
   For i = 0 To UBound(vErg) - 1 Step 2
      txt(n) = Trim(vErg(i))
      n = n + 1
   Next
 
   Exit Sub
FileError:
   MsgBox "Fehler beim Öffnen der Datei.", vbExclamation, "Dateifehler"
End Sub
 
Private Sub cmdDel_Click()
 
End Sub
 
Private Sub cmdNew_Click()
   Dim F As Byte
   For i = 0 To 15
      txt(i).Text = ""
   Next
   F = FreeFile()
   On Error GoTo FileError
   Open "Adressen.TXT" For Random As #F Len = Len(Addressen)
      If LOF(F) > 1 Then
         txt(0).Text = (LOF(F) / Len(Addressen)) + 1
      Else
         txt(0).Text = 1
      End If
   Close #F
   Exit Sub
FileError:
   MsgBox "Fehler beim Öffnen der Adressdatei.", vbExclamation, "Fehler"
End Sub
 
Private Sub cmdSave_Click()
   SaveAll
End Sub
 
Private Sub cmdSearch_Click()
    Dim b As Byte, C As Byte
    For i = 0 To 15
       If txt(i).Text <> "" Then
          b = b + 1
          C = i
       End If
    Next
    If b = 0 Then
       MsgBox "Sie müssen einen Suchbegriff eingeben.", vbInformation, "Suchen" & _
         "abgebrochen"
       Exit Sub
    End If
    If b > 1 Then
       MsgBox "Bitte nur einen Suchbegriff eingeben!", vbInformation, "Suchen" & _
         "abgebrochen"
       Exit Sub
    End If
    If Not FindDS(txt(C).Text) Then
       MsgBox "Keinen Datensatz gefunden.", vbInformation, "Suchergebnis:"
    End If
End Sub
 
Private Sub Form_Load()
     Dim F As Byte
     Dim DSNr As Long, i As Long, Nr As Long
     Dim n As String, v As String
 
     For i = 0 To 15
       txt(i).Text = ""
     Next
 
     F = FreeFile()
     On Error GoTo FileError
     Open "Adressen.TXT" For Random As #F Len = Len(Addressen)
     On Error Resume Next
         'Satzanzahl ermitteln
         If LOF(F) > 1 Then
            DSNr = (LOF(F) / Len(Addressen))
         Else
            'Satz mit X keine DS vorhanden ;-(
            Close #F
            Exit Sub
         End If
         n = "": v = "": Nr = 0
         For i = 1 To DSNr
            Get #F, i, Addressen
            n = Left(Addressen.Name, InStr(Addressen.Name, ";") - 1)
            v = Left(Addressen.Vorname, InStr(Addressen.Vorname, ";") - 1)
            Nr = Val(Left(Addressen.SatzNummer, InStr(Addressen.SatzNummer, _
              ";") - 1))
            List1.AddItem n & vbTab & v
            List1.ItemData(List1.ListCount - 1) = Nr
         Next
     Close #F
     Exit Sub
 
FileError:
     MsgBox "Fehler beim Öffnen der Datei.", vbExclamation, "Dateifehler"
End Sub
 
Private Sub List1_Click()
   LoadDS List1.ItemData(List1.ListIndex)
End Sub
 
Private Function FindDS(ByVal sBegriff As String) As Boolean
   Dim F As Byte
   Dim DSNr As Long, i As Long, n As Long
   Dim S As String
   Dim m As String
 
   FindDS = False
   F = FreeFile()
   On Erroro GoTo FileError
   Open "Adressen.TXT" For Random As #F Len = Len(Addressen)
   On Error GoTo 0
 
       'Anzahl DS Ermitteln
       If LOF(F) > 1 Then
          DSNr = (LOF(F) / Len(Addressen))
       Else
          Close #F
          Exit Function
       End If
 
       For i = 1 To DSNr
          Get #F, i, Addressen
          S = ConvertUDT(Addressen)
          n = InStr(S, sBegriff)
          If n > 0 Then
            'Position checken
            n = InStr(n, S, ";") + 1
            m = Mid(S, n)
            n = InStr(m, ";")
            F = Val(Left(m, n - 1))
            If txt(F).Text <> "" Then
               FindDS = True
               If FoundDS(Addressen) Then
                   Exit Function
               End If
            End If
          End If
       Next
    Close #F
    Exit Function
 
FileError:
    MsgBox "Die Datei konnte nicht geöffnet werden.", vbExclamation, _
      "Dateifehler"
End Function
 
Private Function FoundDS(oAdr As Adr) As Boolean
    Dim jN As Variant
    FoundDS = False
 
    jN = MsgBox("Es konnte ein Datensatz gefunden werden." & vbCrLf & _
                "Den Datensatz <" & _
                Trim(oAdr.Name) & " " & Trim(oAdr.Vorname) & "> laden?", _
                vbQuestion + vbYesNo, "Datensatz gefunden ...")
    If jN = vbYes Then LoadDS Val(Left(Addressen.SatzNummer, InStr( _
      Addressen.SatzNummer, ";") - 1))
    jN = MsgBox("Beenden (JA) oder weitersuchen (NEIN)?", _
               vbQuestion + vbYesNo, "Weitersuchen?")
    If jN = vbYes Then FoundDS = True
End Function
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Text einlesen 293Atlan12.01.02 00:43
Na, da wollen wir Dich vor einem schweren Designfehler schüt...239unbekannt12.01.02 12:35
Teil 1: Done.244unbekannt12.01.02 16:05
Re: Teil 2: Done.235unbekannt12.01.02 16:35
Re: Teil 3: Done.251unbekannt12.01.02 16:45
Re: Teil 4: Done.216unbekannt12.01.02 17:28
Das war's mal, aber:224unbekannt12.01.02 17:36
Re: Das war's mal, aber:37Atlan12.01.02 21:27
Wieso, das ist doch keine Datenbank? Naja, ich fasse es mal ...261unbekannt12.01.02 21:35
Re: Wieso, das ist doch keine Datenbank? Naja, ich fasse es ...72Atlan13.01.02 00:10
Re: Wieso, das ist doch keine Datenbank? Naja, ich fasse es ...239unbekannt13.01.02 00:23
Re: Wieso, das ist doch keine Datenbank? Naja, ich fasse es ...68Atlan13.01.02 01:46
Re: Wieso, das ist doch keine Datenbank? Naja, ich fasse es ...214unbekannt13.01.02 01:48
Komplett und funkt 345unbekannt13.01.02 15:03
Re: Komplett und funkt 48Atlan13.01.02 16:07
Na, löschen wir mal ...432unbekannt13.01.02 18:11
Re: Na, löschen wir mal ...42Atlan13.01.02 18:36
Re: Na, löschen wir mal ...284unbekannt13.01.02 19:11
Re: Na, löschen wir mal ...38Atlan13.01.02 20:09
Re: Na, löschen wir mal ...240unbekannt13.01.02 20:15
Re: Na, löschen wir mal ...58Atlan13.01.02 21:10
Re: Na, löschen wir mal ...252unbekannt14.01.02 00:22
Re: Na, löschen wir mal ...44Atlan14.01.02 23:37
Re: Na, löschen wir mal ...35Atlan16.01.02 09:56
Re: Na, löschen wir mal ...43Atlan16.01.02 19:59
Hi ... Hi ....439unbekannt16.01.02 20:06
Re: Hi ... Hi ....46Atlan16.01.02 21:50
So isses ... fast ... Good work! (oT)240unbekannt16.01.02 21:55
Naja, wenn einige bei Snake so mitgedacht hätten ... uiii361unbekannt16.01.02 22:11
Re: Naja, wenn einige bei Snake so mitgedacht hätten ... uii...44Atlan17.01.02 10:56
Hi Lordchen37Atlan20.01.02 11:29

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel