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 16.947 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 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. |
Neu! sevEingabe 3.0 Einfach stark! Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
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. |