IT-Academy Logo
Sign Up Login Help
Home - Programmieren - Visual Basic - 10 Profi-Tipps für die Datenbankprogrammierung mit VB und ADO



10 Profi-Tipps für die Datenbankprogrammierung mit VB und ADO

Dieser Artikel stellt Ihnen 10 Profi-Tipps zur Programmierung von Datenbankanwendungen mit VB und ADO vor.


Autor: Tobias Surmann (incsoft)
Datum: 16-04-2003, 09:06:37
Referenzen: keine
Schwierigkeit: Profis
Ansichten: 25100x
Rating: 3.4 (5x bewertet)

Hinweis:

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.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Einleitung

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


incsoft
Professonial
Beitrag vom:
14-08-2006, 11:50:25

Re: Kleine Lücke

Hallo hk9999,

schön, dass dir der Artikel gefällt.

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.

-----------------------------------------------------


hk9999
Rookie
Beitrag vom:
13-08-2006, 23:01:32

Kleine Lücke

Hallo,

der Beitrag wäre ja sehr in Ordnung, nur haben sich ein paar Fehler eingeschlichen.

Tipp6: Eine SQL Abfrage ausführen.
Wieso muss zur Ausführung die DB Disconnected sein??

Beim Aufruf ist alles ganz schön erklärt, bloss was hilft mir wenn VB die Query durchführt, wie komme ich an das Ergebniss der Query??




-----------------------------------------------------


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04505
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06241
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1140
Comments: 0