Artikel - Detailansicht

Icon Aktuelles MS-Access und ColdFusion

Microsoft Access ist eine beliebte Desktop-Datenbank und ideal für Einsteiger, die ihre ersten Erfahrungen mit den Datenbank-Funktionen von ColdFusion machen wollen. Sie wird aber auch in vielen Webapplikationen als einfache und günstige Datenbanklösung eingesetzt obwohl sie hier schnell die Grenzen von Access zeigen. Instabilität und ungenügende Multiuser-Fähigkeiten machen einem dann schnell das Leben schwer.
Trotzdem soll hier einmal Benutzung von MS-Access mit ColdFusion näher beleuchtet werden.

Es gibt mehrere Möglichkeiten, Access-Datenbanken anzusprechen, jede hat ihre ihre speziellen Vor- und Nachteile:

ODBC
OLEDB
via CFOBJECT und ADO

 

ODBC
Der Zugriff auf Access über ODBC ist am leichtesten zu zu realisieren und vor allem für Einsteiger zu empfehlen. Man muss lediglich einen System-DSN definieren und kann dann diese Datenquelle direkt im CFQUERY-Tag benutzen. Wie das ganze funktioniert und konfiguriert werden muss wurde bereits hier ausführlich beschrieben.
Um ODBC nutzen zu können muss der ODBC-Treiber für Access installiert sein, der z.B. in den Data Access Components enthalten ist. Hat man ColdFusion auf seinem Rechner installiert, findet man im Start-Menu von ColdFusion (Start->Programm->ColdFusion) den Menüpunkt Install Microsoft Data Access Components. Damit kann man sich nachträglich die Datenbank-Treiber für OLEDB und ODBC auf dem Rechner instalieren. Die aktuellste Version gibt natürlich bei Microsoft.
Man kann die Stabilität und Performance einer Access-Verbingung etwas verbessern in dem man im ColdFusion-Administrator bei den ODBC-Settings (erweiterte Einstellungen) den Punkt Limit Connections aktiviert und in das Eingabefeld Enable the limit of simultaneous connections einen Wert von auf 5-7 setzt. Empfohlene Wert für OBDC-Einstellungen sind Buffer Size = 0 und Page Timeout = 600. Die Checkbox Maintain Database Connections sollte deaktiviert werden.
Sollten sich bei der Benutzung von Access nach längerem Betrieb Funktionsstörungen / Zugriffsfehler einstellen liegt das meist an der unsauberen Speicherverwaltung des ODBC-Treibers. Allaire empfiehlt in diesem Fall das File \cfusion\bin\cycle.bat regelmässig auszuführen.

OLEDB
OLEDB ist eine auf Microsoft's COM/DCOM-Technologie basierendes Zugriffsmöglichkeit für Datenbanken. Es besteht aus definierten OLE-APIs und soll einen standardisierten Zugriff auf verschiedenen Daten ermöglichen. OLEDB ist relativ neu und soll ODBC auf Windows-Systemen ersetzen.
Während ODBC entwickelt wurde um eine einheitliche Schnittstelle zu verschiedenen SQL-Datenbanken zu haben, wurde OLEDB darauf ausgelegt, jegliche Art von Daten mit einem einheitlichen Zugriffsweg zu versehen. So gibt es OLEDB-Provider (Treiber) für ODBC, SQL-Server, Oracle, MS-Exchange, Microsoft Active Directory Service, Microsoft Index Server, Jet, AS/400 u.s.w.
Das Einrichten einer OLEDB-Verbindung mit ColdFusion ist ähnlich einfach wie die Benutzung von ODBC.
Zuerst solle man jedoch die schon erwähnten Data Access Components 2.1 (oder grösser) installieren. Dabei wird auch der OLEDB-Provider für Access installiert. Um zu überprüfen, ob der OLEDB-Provider für Access bereits auf dem Server installiert ist, kann man in der Registry (regedit.exe) nach 'Microsoft.Jet.OLEDB' suchen. Wird ein Schlüssel gefunden, ist der Provider installiert.
Um eine OLEDB-Datenquelle einzustellen öffnet man im ColdFusion-Administrator den Datasources-Link OLEDB. Im Feld Data Source Name gibt man den gewünschen Namen ein, unter dem die Datenquelle dann in den Templates ansprechbar ist. Aus der Dropdown-Box wählt man ,unabhängig von von der installierten MDAC-Version, Microsoft.Jet.OLEDB.3.51 und betätigt den Add-Button. Das darauf folgenden Formular (Create OLEDB Interface Data Source) muss nun mit den korrekten Einstellungen gefüllt werden. Im Providerfeld trägt man den gewünschten Provider ein, also z.B. Microsoft.Jet.OLEDB.3.51 (Access97) oder Microsoft.Jet.OLEDB.4.0 (Access200) je nach installierter MDAC-Version.
Im Feld Database File trägt man den kompletten Pfad der Access-Datei ein, z.b. c:\cfusion\database\foo.mdb.
Dann klickt man auf den Button CF Settings >> um zur erweiterten Eingabemaske zu gelagen. Dort gibt man als Username admin an. Das Password-Feld bleibt leer. Mit dem Button create wird die Datenquelle erzeugt. Der Status sollte danach auf verfied stehen, ansonst wurde die Datenquelle nicht korrekt eingerichtet.
OLEDB ist um einiges schneller und stabiler als ODBC und man sollte nach Möglichkeit diese Methode benutzen, wenn beide zur Wahl stehen.

CFOBJECT und ADO
Die ActiveX Data Objects ist ein Mechanismus, mit dem man Zugriff auf verschiedene Typen von Daten erhält. Im allgemeinen dürfte es sich bei diesen Daten aber um relationale Datenbanken handeln, die von einer Clientapplication (in diesem Fall der ColdFusion-Server) über eine definierte Schnittstelle angesprochen werden sollen. Im Prinzip handelt es sich bei ADO um ein Layer über OLEDB. Es versorgt die Applikation mit einer einheitlichen Ansammlung von Methoden und Eigenschaften um auf verschiedenen Daten zuzugreifen. Dabei kann es sich bei diesen Daten um normale ODBC-Quellen (Provider=MSDASQL) handeln aber um OLEDB-Provider wie z.B. Microsoft.Jet.OLEDB.4.0 für Access oder MSDAORA für Oracle. ADO bietet für den Datenbankzugriff ein hierarisches System von Objekten (mit Methoden und Eigenschaften) die dem ColdFusion-Programmierer viele Möglichkeiten eröffnen, die er mit dem normalen Zugriff mittels CFQUERY sonst nicht hat. So kann man z.B. Datenbankverbindungen zur Laufzeit auf- und abbauen, genauer Informationen über die Datenbank erlangen oder Verbindungen zu einer Access-DB ohne vorher erstellten DSN aufbauen. Letzters soll in einem kurzen Beispielcode gezeigt werden. Wer allerdings mehr über ADO und dessen Objekte wissen will, sollte sich ein gutes Buch zu diesem Thema besorgen.

Zum Zugriff auf ADO unter ColdFusion benutzt man das CFOBJECT-Tag, mit dem man ActiveX Data Objects instanziiren kann. Um den nachfolgenden Code zu verstehen muss hier kurz auf die im Code benutzte Objektstruktur eingegenagen werden.
Zuerst wird ein Connection-Objekt erzeugt, welches eine Verbindung zur Datenbank repräsentiert. Damit wird ein Recordset-Objekt erzeugt, dass die Ergebnismenge einer SQL-Abfrage enthält. Das RecordSet besteht aus einer Ansammlung von Field-Objekten die jeweils eine Reihe der Ergebnissmege repräsentieren. Das Field-Objekt enthält nun eine Methode namens item(), mit der man auf die jeweilige Datenzelle und mittels dem Property value auf deren Inhalt zugreifen kann. Das ganze sieht dann als ColdFusion-Script so aus:

<!----pfad zur laufzeit festlegen------->
<cfset DBPath="C:\CFUSION\Database\demo.mdb">

<!----DSN dynamisch zusammensetzen----->
<cfset dsn="DRIVER={Microsoft AccessDriver (*.mdb)};DBQ=#DBPath#;"
<cfset dsn=dsn & "FIL=MSAccess;MaxBufferSize=512;PageTimeout=5;UID=sa;pw=">   

<!----connection-objekt erzeugen----->
<cfobject type="COM" name="myCon" class="ADODB.Connection" action="CREATE">

<!---mal den benutzen provider ausgeben--->
<cfoutput>
  #myCon.Provider#  <br>
</cfoutput>

<!----verbindung zur datenbank herstellen ----->
<cfset dummy=myCon.open("#dsn#","","0","0")> 

<!---recordset erzeugen ----------->
<cfset rs=mycon.Execute("select * from user","","0")> 

<!---loop ueber das recordset------->
<cfloop condition="not #rs.eof#"> 

  <!---fieldobjekt mit der aktuellen reihe des recordsets erzeugen--->
  <cfset oF=rs.Fields> 

  <!---item-objekt erzeugen--->
  <cfset it=oF.Item("vorname")> 

  <!---Wert aus db ausgeben--->
  <cfoutput>
    #it.value#<br> 
  </cfoutput>

  <!---db-cursor auf naechste datenreihe bewegen---->    
  <cfset dummy=rs.moveNext()>

</cfloop>

<!---verbindung zur db schliessen---->
<cfset dummy=myCon.close()> 

Mit ADO hat man jedoch viel mehr Möglichkeiten und ist nicht nur auf SQL-Statments zur Datengewinnung angewiesen. Man kann z.B. mit diesem Code eine komplette Kopie einer ganzen Tabelle in ein Recordset holen:

<!-----Tabelle user in das recordset laden--->
<cfset rs=mycon.Execute("user","","2")> 			

Wem also die normalen ColdFusion-Funktionen für den Datenbankzugriff nicht reichen, sollte sich näher mit ADO beschäftigen.

Links zum Thema:



Steffen Goldfuss steffen@goldfuss.de - 18.11.1999

Zurück


Das deutsche ColdFusion-Forum cfml.de ist das Portal für Einsteiger und Experten zum Thema ColdFusion und der ColdFusion Markup Language (CFML).

© 2017 Webdesign & Hosting: CHC ONLINE Kassel | SOLVA Content-Management-System CMS
Urlaub-Angebote.de - Urlaub mit Bestpreis-Garantie buchen