PDA

Vollständige Version anzeigen : Late Binding


cklein
30.09.2002, 20:15
Hallo,

kann mir jemand mal was dazu sagen.
Ist damit gemeint Ungebundene Formulare oder Steuerelement zu füllen.
Wäre für einen oder mehrere Tipps dankbar.

Dann noch eine Frage was ist besser Formulare mittels Recordset zu füllen oder direkt an die Tabelle oder Abfrage zu binden.

Danke

A.S.
30.09.2002, 21:35
Hi,

zum ersteren: Das hat auf der einen Seite nichts mit Formularen und derren Recordsetbindung zu tun, auf der anderen Seite läst es sich besser erklären, wenn man beide dazugehörigen Begriffe erwähnt

Early Binding und Late Binding

Beim Early Binding werden Objekte direkt bei Ihrer Erstellung (via Dim) typisiert. Einer der Effekte ist, das im VBA-Editor sofort die Eigenschaften und Methoden des Objekts zur Verfügung stehen.

Beispiel:

Dim db As Database ' Die Datenbank selbst ist ein Objekt
Dim rs As Recordset ' Auch das Recordset ist ein Objekt
Dim fld As Field ' Ein Objekt vom Typen Field

set db = CurrentDB ' Verweis des DB-Objekts auf die aktuelle Datenbank
Set rs = db.OpenRecordset...... ' Öffnen einer Tabelle in der Datenbank

For Each fld in rs.Fields
Debug.Print fld.name
Next fld

Wenn Du obenstehendes Coding so in den VBA-Editor eingibst, stehen Dir jeweils ab Eingabe der Punkte die Objekthilfen des VBA-Editors zur Verfügung.

Beim Late Binding dagegen werden die Objekte erst zur Laufzeit typisiert und Du mußt sehr genau aufpassen, das Du die Methoden und Eigenschaften der Objekte im Editor richtig ansprichst:

Dim db As Object
Dim rs As Object
Dim fld As Object

Set db = CurrentDB
Set rs = db.OpenRecordset.......

For Each fld in rs.Fields
Debug.Print fld.Name
Next fld

Wenn Du die beiden Beispiele in einem Modul eingibst, wirst Du diesen Unterschied schon'mal feststellen können.

Ein weiterer Unterschied, den ich jetzt selbst wohl nicht ganz genau erklären kann (da ich davon selbst erst gestern erfahren habe), ist das zur Laufzeit der Programme unterschiedliche Bibliotheksversionen des selben Objects eingebunden werden können und man durch das LateBinding flexibel bleibt, welches Objekt man denn nun nutzen will. Wenn Du ein Programm durch EarlyBinding z.B. an Excel97 koppelst, kann es Dir passieren, das es mit Excel00 oder Excel02 nicht ordnungsgemäß zusammenarbeitet, weil Du die Object-Referenz zu stark auf 97 eingeschränkt hast.

Letzteres ist jetzt nur als Beispiel gedacht, wie weit (z.B. bei Excel) die Abhängigkeiten in den Objektmodellen gehen, kann ich Dir nicht genau sagen.

Ob es besser ist, die Formulare direkt an die Tabellen/Abfragen zu binden oder erst zur Laufzeit damit zu besetzen, hängt IMHO davon ab, welche größe das Projekt erreicht und wie viele Verbindungen zur DB geöffnet werden müssen. Sofern es sich nur um eine DB (keine Aufteilung in Front/Backend) handelt, spielt es IMHO wahrscheinlich keine große Rolle. Bei Front/Backend ist es eine Frage des Datenvolumens. Hierzu gibt es aber noch einen anderen Thread (mit englischem Titel) innerhalb der letzten 2 oder 3 Tage. Schau da besser noch'mal rein.

Gruß

Arno

cklein
30.09.2002, 22:11
Danke für deine Auskunft.
Werde morgen mal die unterschiede genauer unter die Lupe nehmen. In meinen zwei Büchern steht darüber leider nix.

Sollte sich noch eine Frage eergben werde ich mich morgen wieder melden.

Danke

erwin
01.10.2002, 01:16
Für meine Begriffe missbräuchlich, stolpert man über "late Binding" auch in der Bedeutung, dass Steuerelemente ihre Record/Row-Source erst "später" bekommen als direkt beim Öffnen der Formulare (dh. keine fix eingetragene Eigenschaft).

Sinn macht sowas zB. bei einer Vielzahl von UFo's, welche nur wechselweise (Register o.ä.) einzeln sichtbar sind. Durch ein "spätes Setzen der Recordsource" kann man damit Performancegewinne erzielen.

so long Erwin...

johho
18.02.2010, 15:10
hallo Leute! Ich habe brav die SuFu bemüht und zerre diesen alten Schinken daher nach 8 Jahren nochmal aus dem Keller! :)

Ich habe das Problem, dass meine DB bei verschiedenen meiner Mitarbeiter verwendet wird. Ich verwende jetzt z.B. Office Beta 2010, mein Mitarbeiter noch O2007.
Wenn ich jetzt aber z.B. über VBA Kalenderfunktionen nutze, hat sich in meinem frontend der Verweis automatisch auf Outlook2010 umgestellt. Wenn ich mein Frontend jetzt meinen Mitarbeiter gebe, erhält er schon beim Öffnen Fehlermeldungen, und man muss erst manuell im VBA Editior den Verweis von Outlook2010 (nicht vorhanden) auf Outlook2007 umstellen, damit es geht.

Wenn ich das hier richtig verstanden habe, könnte ich dieses Problem mit Late-Binding lösen. Die Frage ist nun, muss ich dazu meinen gesammten VBA Code um- bzw. neu schreiben, oder kann man dieses Problem noch irgendwie einfacher lösen??

lg
johannes

ebs17
18.02.2010, 15:22
Ich verwende jetzt z.B. Office Beta 2010
Was der Beta-Status bedeutet, ist Dir bewusst?

Nur Arbeitshungrige und Masochisten verwenden Beta-Versionen im Produktiveinsatz.

Zu Late/Early Binding: Sascha Trowitzsch hat das m.M. nach hier sehr schön am Beispiel Outlook dargestellt: OLConnector Programmierung (http://www.mosstools.de/index.php?option=com_content&view=article&id=67&Itemid=64)

Louisleon
18.02.2010, 17:51
und zu deiner Frage
muss ich dazu meinen gesammten VBA Code um- bzw. neu schreiben
Ja wirst Du wohl müssen (umschreiben!)!
Hilfreich hierbei kann allerdings FindReplace sein.

Gruß

LL

Josef P.
18.02.2010, 19:00
Ein Tipp für die Code-Erstellung: Compiler-Anweisungen erlauben schnelles Umschalten.

Prinzip:
#const OutlookEarlyBinding = 1 ' 1 = early binding verwenden

#if OutlookEarlyBinding = 1 then
#else
' hier die verwendete Konstanten oder Enums deklarieren,
' die bei Early binding aus der Outlook-Bibliothek kommen würden
Private Const olText As Long = 1
Private Const olFolderContacts As Long = 10
Private Const olContact As Long = 40
#end if

private sub machwas()

#if OutlookEarlyBinding = 1 then
dim outlookApp as Outlook.Application
...
#else
dim outlookApp as Object
...
#end if

set outlookApp = createobject("Outlook.Application")
...

end sub

Diese Variante sieht zwar auf den ersten Blick etwas umständlich aus, hat aber den Vorteil, dass man schnell zw. Early Binding und Late Binding wechseln kann. Das ist praktisch, wenn man während der Entwicklungsphase die Outlook-Bibliothek einbindet, um IntelliSense zu nutzen.