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.770 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. |
Neu! sevCommand 4.0 ![]() Professionelle Schaltflächen im modernen Design! Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Tipp des Monats ![]() Carsten Stuplich Aufruf eines Webservices in einer Windows-Anwendung (VB.NET) Dieser Artikel beschreibt, wie man innerhalb einer Windows-Anwendung auf einen bestehenden Webservice zugreift. 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. |