Archiv der Kategorie: Access

Microsoft Access bietet die Möglichkeit mit VBA Datenbankanwendungen zu erstellen. Da ich für gewöhnlich aber kein Microsoft Access nutze um Oberflächen zu programmieren, geht es hier hauptsächlich um das Arbeiten mit Daten wenn Access nur als Backend-Dateiformat (*.mdb) genutzt wird oder werden soll.
Erfahrungsgemäß hat das Microsoft Access-Format (*.mdb) Probleme auf 64-BIT-Servern (meistens ist kein Treiber verfügbar wie Microsoft JET) und wenn Datenbanken größer werden als 2 Gigabyte. Ein Vorteil ist das einfache Copy-And-Paste zwischen Access und Excel, was oft von kaufmännischen Kunden gewünscht ist.
Bei konkurrierenden Zugriffen werden oftmals die Datenbanktreiber gefordert um Parallelität zu gewährleisten sowie Transaktionen und SQL-Engines zu simulieren.

VBA und Access : Datenbankzugriff von VBA auf .mdb-Datei

Aufgabenstellung

Von einer Office/VBA-Anwendung aus, soll auf eine Microsoft Access Datenbank (.mdb-Datei) zugegriffen werden.

Vorraussetzungen

Im VBA Editor im Menüpunkt Verweise wird die Option Microsoft ActiveX ADO Objects angehakt.

Lösung

Selektionsanweisung

Public Sub HoleDaten()
   Dim cn As New ADODB.Connection
   Dim rs As New ADODB.Recordset
   Dim i As Integer

' Datei liegt im aktuellen Projektverzeichnis
   cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CurrentProject.Path & _
                 "\diedatei.mdb"

   Set rs = cn.Execute("SELECT * FROM einetabelle")

   i = 1
   Do While Not rs.EOF
      Cells(i, 1).Value = rs.Fields("Feld1")
      Cells(i, 2).Value = rs.Fields("Feld2")
      Cells(i, 3).Value = rs.Fields("Feld3")
      Cells(i, 4).Value = rs.Fields("Feld4")
      rs.MoveNext
      i = i + 1
   Loop
   cn.Close
End Sub

Manipulationsanweisung

Public Sub SchubseInMDB()
   Dim cn As New ADODB.Connection
   Dim rs As New ADODB.Recordset

   cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=unfug.mdb"

   Set rs = cn.Execute("INSERT INTO einetabelle(zweck)VALUES ('Unsinn')")
   cn.Close
End Sub

MS SQL Server und ACCESS: Führende Nullen in numerischem String abschneiden

Aufgabenstellung

In einer Spalte mit Materialnummer/Artikelnummern werden bei allen numerischen Materialnummern die Nullen entfernt, alphanumerische Materialnummern bleiben unberührt. Soll auch bei den alphanumerischen Materialnummern die führenden Nullen entfernt werden, verweise ich auf den Artikel in der Rubrik „MS SQL Server: Führende Nullen bei alphanumerischem String“.

Ansatz

Über das Case Statement wird gefragt ob der Artikel numerisch ist. Ist er numerisch, wird über die Konvertierung in einen Integer (und anschließendes Zurückkonvertieren in VARCHAR) die führenden Nullen entfernen.

Lösung

Microsoft SQL Server:

UPDATE tabelle SET material=
CASE WHEN isnumeric(material)=1 
        THEN convert(VARCHAR, convert(INTEGER, material))
        ELSE convert(VARCHAR, material)
END 

Microsoft Access:

   UPDATE articletexts SET material=
   IIF(IsNumeric(material), 
   REPLACE(LTRIM(REPLACE(material,'0',' '))
   ,' ','0'), material) 

C# und OleDBParameter: Reihenfolge von Parametern

Problem

(Ein kleiner Schmunzelartikel)… Da sitzt man seit Stunden vor einem normal aufgebaut SQL Statement mit einem OleDbCommand… es ist alles so wie bei einen SQLCommand…. und das Statement tut nichts… gar nichts…

Lösung

Die Reihenfolge von OleDBParametern ist NICHT assoziativ wie durch die Namensgebung vermutet… es spielt gar keine Rolle ob ein Statement mit einem ? oder einem @parametername versehen wird. Die Reihenfolge muss immer stimmen, wenn man mit

comm.Parameters.AddWithValue("parametername", variable)