Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform,
sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc
zu kontaktieren.
Dieser Artikel stellt Ihnen 10 Profi-Tipps zur Programmierung von Datenbankanwendungen mit VB und ADO vor. Erklärungen finden Sie jeweils vor dem entsprechenden Codeabschnitt und als Kommentare im Quelltext selbst.
Tipp 1: Suchen nach einem bestimmten Datensatz
Über ADO ist es auch möglich, anhand von beliebigen Kriterien nach einem bestimmten Datensatz innerhalb einer Tabelle zu suchen. Bei der vorgestellten Methode wird der Datensatzcursor automatisch auf die erste, den Kriterien entsprechende Fundstelle gesetzt. Beim vorliegenden Quelltext wird von einer gültigen Verbindung zu einer Datenbank und von einer geöffneten Tabelle ausgegangen.
Option Explicit
Public Cn As New ADODB.Connection
Public Rs As New ADODB.Recordset
Public Function FindDataRecord(Criteria As String) As Boolean
Dim Vorher As Double
Vorher = Rs.Bookmark 'Aktuelle Position speichern
Rs.Find Criteria 'z.B. "Autor = 'Meier'" oder "ISBN > 10000"
If Rs.EOF = True Then 'keine Fundstelle
Rs.Bookmark = Vorher
MsgBox "Es wurde kein Datensatz gefunden.",vbInformation, _
"Suchergebnis"
FindDataRecord = False
Else
FindDataRecord = True
End If
End Function
Tipp 2: Suchen nach mehreren Datensätzen
Oft hat man das Problem, dass man in einer Tabelle alle Datensätze sucht, die einem bestimmten Kriterium entsprechen. Mit diesem Tipp sind Sie in der Lage, eine solche Funktion umzusetzen. Dabei wird von einer gültigen Verbindung zu einer Datenbank und von einer geöffneten Tabelle ausgegangen.
Option Explicit
Public Cn As New ADODB.Connection
Public Rs As New ADODB.Connection
Public Function FindDataRecordEx(Criteria As String) As Boolean
Dim Vorher As Double
Vorher = Rs.Bookmark 'Aktuelle Position speichern
Rs.Filter = Criteria 'z.B. "Autor='Meier'" oder "ISBN>10000"
If Rs.EOF = True Then 'Keine Fundstelle
Rs.Bookmark = Vorher
MsgBox "Es wurde kein Datensatz gefunden.",vbInformation,_
"Suchergebnis"
FindDataRecordEx = False
Else
FindDataRecordEx = True
End If
End Function
Tipp 3: Tabellen in das XML-Format exportieren
Wenn Sie einzelne Tabellen einer Datenbank sichern oder in eine andere Anwendung importieren möchten, eignet sich dazu das Dateiformat XML. Wie Sie eine entsprechende Funktion zum Export Ihrer Tabelle in eine XML-Datei programmieren können, zeigt Ihnen der folgende Tipp. Dabei wird von einer gültigen Verbindung zu einer Datenbank und von einer geöffneten Tabelle ausgegangen.
Option Explicit
Public Cn As New ADODB.Connection
Public Rs As New ADODB.Recordset
Public Sub SaveTable(Filename As String)
On Error Goto Err_h
Rs.Save Filename, adPersistXML
Exit Sub
Err_h:
MsgBox "Die Datei " & Filename & " existiert bereits. " & _
"Eine Speicherung ist daher nicht möglich.", vbCritical, _
"Fehler"
End Sub
Tipp 4: Datenbank komprimieren
Um Speicherplatz zu sparen und überflüssige und längst gelöschte Daten aus einer Datenbank zu entfernen, ist es sinnvoll die Datenbank zu komprimieren. Unter DAO stellte dies kein Problem dar, da es eine eigene Funktion CompactDatabase gab. Unter ADO ist diese oder eine ähnliche Funktion aber nicht bekannt. Zum Glück gibt es die JRO-Objekte, die unter Projekt->Verweise… unter dem Namen Microsoft Jet and Replication Objects 2.x Library eingebunden werden können, und uns eine derartige Funktion zur Verfügung stellen.
Option Explicit
Public Cn As New ADODB.Connection
Public CnTemp As New ADODB.Connection
Public dbEng As New JRO.JetEngine
Public Sub CompressDB(Filename As String)
'Quelldatenbank
Cn.Provider = "Microsoft.Jet.OLEDB.3.51"
Cn.Properties("Data Source") = Filename 'z.B.
'"C:\Temp\Data.mdb"
'Temporäre Datenbank die die komprimierten Daten enthält
CnTemp.Provider = "Microsoft.Jet.OLEDB.3.51"
CnTemp.Properties("Data Source") = "C:\Temp\CompData.mdb"
dbEng.CompactDatabase Cn, CnTemp 'Komprimiervorgang
'Alte Datenbank durch komprimierte Datenbank ersetzen
Name "C:\Temp\CompData.mdb" As Filename
'Temporäre Datenbank löschen
Kill "C:\TempCompData.mdb"
End Sub
Tipp 5: Tabelle in einem DataGrid anzeigen
In vielen Anwendungen werden die Daten aus einer Datenbank bzw. aus einer bestimmten Tabelle in einem DataGrid angezeigt. Wie Sie das in Ihrem eigenen Datenbankprogramm umsetzen können, zeigt Ihnen der folgende Tipp. Dabei wird von einer gültigen Verbindung zu einer Datenbank und von einer geöffneten Tabelle ausgegangen.
Option Explicit
Public Cn As New ADODB.Connection
Public Rs As New ADODB.Recordset
Public Sub TableInDataGrid(dGrid As DataGrid)
Set dGrid.DataSource = Rs 'DataGrid die Tabelle als Quelle
'zuweisen
End Sub
Tipp 6: Eine SQL-Abfrage durchführen
SQL (Structured Query Language) ist der Schlüssel für Abfragen von Daten in einer Datenbank. Über SQL können Sie Daten aus einer Datenbank auslesen, Daten speichern oder auch den Aufbau der Datenbank verändern. In diesem Tipp geht es aber nur darum, mit Hilfe dieser Sprache eine Abfrage durchzuführen und das Ergebnis in einer Tabelle zu speichern. Dabei wird von einer gültigen Verbindung zu einer Datenbank und von einer geöffneten Tabelle ausgegangen.
Option Explicit
Public Cn As New ADODB.Connection
Public Rs As New ADODB.Recordset
Public Sub ExecuteSQL(SQL_Command As String)
'Die Datenquelle der Tabelle beruht auf dem SQL-Kommando
Rs.Source = SQL_Command
End Sub
'Beispiel für den Aufruf
Private Sub Command1_Click()
'…
'Connection und Recordset werden hier erstellt
ExecuteSQL "SELECT * FROM Autos WHERE PS > 100 AND Farbe =
'Rot'" 'Beispiel für eine SQL-Abfrage
End Sub
Tipp 7: Selektierte Zellen eines DataGrids herausfinden
Um die selektierten Zellen eines DataGrids und deren Inhalt herauszufinden, muss man in der RowColChange-Ereignisprozedur des betreffenden DataGrids verschiedene Eigenschaften auslesen. Welche das sind zeigt dieser Tipp. Damit dieser Tipp universell einsetzbar ist, enthält er eine Prozedur, der 3 leere Variablen für Spalte, Zeile und Inhalt übergeben werden. Diese Variablen werden von der Prozedur mit den entsprechenden Werten gefüllt und enthalten nach Aufruf der Prozedur die aktuellen Werte.
Option Explicit
Public Sub GetPosInfo(dGrid As DataGrid, Column As Integer, _
Row As Integer, Content As Variant)
Column = dGrid.Col 'Aktuelle Spalte
Row = dGrid.Row 'Aktuelle Zeile
Content = dGrid.Text 'Inhalt der Zelle
End Sub
Tipp 8: DataGrid ausdrucken
Das DataGrid selbst bietet uns leider nicht direkt die Möglichkeit den Inhalt auszudrucken. Dies kann man aber mit einem kleinen Trick dennoch schaffen, denn wir speichern die Anzeige des DataGrids vorher in einer PictureBox, die wir dann nachher zu Papier bringen können. Es sei aber ausdrücklich darauf hingewiesen, dass diese Methode nur den sichtbaren Bereich des DataGrids druckt, eine andere Möglichkeit gibt es leider bisher nicht.
Option Explicit
Public Sub PrintDataGrid(dGrid As DataGrid, Pic As PictureBox)
Dim RecSel As Boolean 'Zeilenselektor
Dim ScrBars As Integer 'Bildlaufleisten
Dim BackCol As Long 'Hintergrundfarbe
Dim DivStyle As Integer 'Gitternetztyp
Dim Margin As Integer 'Rand
'Einstellungen speichern
RecSel = dGrid.RecordSelectors
ScrBars = dGrid.ScrollBars
BackCol = dGrid.BackColor
DivStyle = dGrid.RowDividerStyle
'Eigenschaften des DataGrid für den Druck optimieren
dGrid.RecordSelectors = False
dGrid.ScrollBars = dbgNone
dGrid.BackColor = vbWhite
dGrid.RowDividerStyle = 1 'schwarze Gitternetzlinien
dGrid.Refresh 'Anzeige aktualisieren
'Aktuelle Anzeige in Bild speichern
Pic.Picture = dGrid.CaptureImage
'Einstellungen rückgängig machen, damit der Anwender nichts
'merkt
dGrid.RecordSelectors = RecSel
dGrid.ScrollBars = ScrBars
dGrid.BackColor = BackCol
dGrid.RowDividerStyle = DivStyle
dGrid.Refresh
'Breite Tabellen besser im Querformat drucken
Printer.Orientation = vbPRORLandscape
'Bild drucken
'Margin = Printer.ScaleWidth \ 10
Printer.PaintPicture Pic.Picture, Margin, Margin, Margin + _
dGrid.Width, Margin + dGrid.Height
'Ausdruck starten
Printer.EndDoc
End Sub
Tipp 9: Daten in einer DataList anzeigen
In dem Steuerelement DataList, das unter Projekt->Komponenten… unter dem Namen Microsoft DataList Controls 6.0 (OLE DB) eingebunden werden kann, können Sie die Daten eines beliebigen Feldes einer Tabelle anzeigen. Dabei wird von einer gültigen Verbindung zu einer Datenbank und von einer geöffneten Tabelle ausgegangen.
Option Explicit
Public Cn As New ADODB.Connection
Public Rs As New ADODB.Connection
Public Sub FieldInDataList(dList As DataList, fldName As _ String)
Set dList.RowSource = Rs 'Tabelle als Quelle
dList.ListField = fldName 'Feld dessen Daten angezeigt
'werden sollen
End Sub
Tipp 10: Daten in einem DataCombo auflisten
In dem Steuerelement DataCombo, das unter Projekt->Komponenten… unter dem Namen Microsoft DataList Controls 6.0 (OLE DB) eingebunden werden kann, können Sie die Daten eines beliebigen Feldes einer Tabelle auflisten und dem Benutzer als Auswahl zur Verfügung stellen. Bei diesem Tipp wird von einer gültigen Verbindung zu einer Datenbank und von einer geöffneten Tabelle ausgegangen.
Option Explicit
Public Cn As New ADODB.Connection
Public Rs As New ADODB.Connection
Public Sub FieldInDataCombo(dCombo As DataCombo, fldName As _
String)
Set dCombo.RowSource = Rs 'Tabelle als Quelle
dCombo.ListField = fldName 'Feld dessen Daten angezeigt
'werden sollen
End Sub
Zu Tipp 6: Der Kommentar über dem Aufruf von ExecuteSQL deutet schon an, dass hier zunächst eine Verbindung zur DB aufgebaut werden muss. Das ist je nach verwendetem DBMS (z. B. Access 97, 2000 oder gar MS SQL Server) unterschiedlich (wie das geht siehe Artikel 10 Einsteiger-Tipps für die Datenbankprogrammierung mit VB und ADO).
Über Rs.Fields("feldname") lässt sich nach Aufruf von ExecuteSQL auf das Ergebnis der Query zugreifen.