Hin und wieder erstellt man sich zum Speichern von Daten ein UDT - eine User-Defined-Type Struktur oder zu deutsch: benutzerdefinierter Datentyp. Hierbei handelt es sich um eine Art "Datensatz", welcher mehrere zusammengehörende Elemente enthält. Beispiel für einen benutzerdefinierten Datentyp (UDT): ' Anschrift Private Type UDT_Anschrift Anrede As String * 20 Name As String * 30 Vorname As String * 30 Firma As String * 50 Strasse As String * 40 PLZ As String * 8 Ort As String * 30 Land As String * 20 GebDatum As Date Telefon As String * 20 Fax As String * 20 EMail As String * 50 MailInfo As Boolean End Type Solch ein benutzerdefinierter Datentyp wird dann wie folgt mit den entsprechenden Daten gefüllt: Dim UDT_Kundenanschrift As UDT_Anschrift With UDT_Kundenanschrift .Anrede = "Herr" .Name = "Otter" .Vorname = "Dieter" .Firma = "Software-Entwicklung & Vertrieb" ... .MailInfo = True End Width Verwendet man mehrere solcher Datentypen, bzw. ein Array, und muss nun eine Struktur mit einer Zweiten vergleichen, könnte man meinen, man müsse dies wie folgt machen: With UDT_Kundenanschrift(1) If .Anrede = UDT_Kundenanschrift(2).Anrede AND _ .Name = UDT_Kundenanschrift(2).Name AND _ .Vorname = UDT_Kundenanschrift(2).Vorname AND _ ... .MailInfo = UDT_Kundenanschrift(2).MailInfo Then MsgBox "Beide UDTs sind identisch!" Else MsgBox "UDTs unterscheiden sich!" End If End With Diese Vorgehensweise ist bei umfangreichen Datenstrukturen natürlich sehr aufwendig. Es gibt da aber noch eine Alternative! If udt2String(udt1) = udt2String(udt2) Then MsgBox "Beide UDTs sind identisch!" End If Die Funktion udt2String setzt sich wie folgt zusammen: ' benötigte API-Deklaration Private Declare Function CopyMemory Lib "kernel32" _ Alias "RtlMoveMemory" ( _ lpvDest As Any, _ lpvSource As Any, _ ByVal nByte As Long) As Long ' UDT in String konvertieren Private Function udt2String(vUDT As UDT_Anschrift) As String Dim sBuffer As String Dim nSize As Long nSize = Len(vUDT) sBuffer = Space$(nSize) CopyMemory ByVal sBuffer, ByVal vUDT, nSize udt2String = sBuffer End Function Bezogen auf das obige Beispiel, sieht die Abfrage dann wie folgt aus: If udt2String(UDT_Kundenanschrift(1)) = _ udt2String(UDT_Kundenanschrift(2)) Then MsgBox "Beide UDTs sind identisch!" Else MsgBox "UDTs unterscheiden sich!" End If Hinweis: Dieser Tipp wurde bereits 17.269 mal aufgerufen.
Anzeige
![]() ![]() ![]() Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevWizard für VB5/6 ![]() Professionelle Assistenten im Handumdrehen Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) Tipp des Monats ![]() Dieter Otter sevTabStrip: Rechtsklick auf Reiter erkennen Eine Funktion, mit der sich prüfen lässt, auf welchen Tab-Reiter ein Mausklick erfolgte Access-Tools Vol.1 ![]() Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
||||||||||||||||
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. |