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.099 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. |
sevISDN 1.0 ![]() Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats ![]() Dieter Otter Beliebige Zeichen am Anfang und Ende eines Strings entfernen Mit der Trim-Funktion lassen sich nicht nur Leerzeichen, sondern bei Bedarf auch beliebige Zeichen entfernen. sevGraph (VB/VBA) ![]() Grafische Auswertungen Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! |
||||||||||||||||
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. |