User Tools

Site Tools


vba:excel:adodbsql

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
vba:excel:adodbsql [28.01.2016 16:53:25]
yaslaw
vba:excel:adodbsql [06.05.2019 11:08:01] (current)
yaslaw
Line 1: Line 1:
 <​const>​ <​const>​
-    version=1.0.0 +    version=1.6.0 
-    vdate=27.01.2016+    vdate=22.01.2018
     fname=lib_adodb_for_xls.bas     fname=lib_adodb_for_xls.bas
     ns=%NAMESPACE%     ns=%NAMESPACE%
Line 20: Line 20:
 ADODB hiesst das Losungswort. ADODB hiesst das Losungswort.
 \\ Ich erkläre hier nicht alle Details. Das WWW gibt gut auskunft. Nein, ich zeige wie ich es anwende \\ Ich erkläre hier nicht alle Details. Das WWW gibt gut auskunft. Nein, ich zeige wie ich es anwende
 +
 +Den Code zu den Funktionen gibts am Schluss
 +
 +===== Definitionen =====
 +==== axConnParams ====
 +Sammlung von steuerparametern. Es werden, ev. in Zukunft noch mehr.
 +<code vb>​Public Enum axConnParams
 +    axcNone = 0
 +    axcReconnect = 2 ^ 0    'Ein Reconnect wird erzwungen
 +    axcNoHeader = 2 ^ 1     '​Die erste Zeile ist keine Kopfzeile. Die Felder werden mit f1, f2...fx angesprochen
 +End Enum</​code>​
 +
 +==== axWriteParams ====
 +Paramters zum Schreiben der Daten
 +<code vb>'/​**
 +Public Enum axWriteParams
 +    axwNone = 2 ^ 0             '​Keine umwandlung
 +    axwHeaderRedable = 2 ^ 1    'Titel mit Unterlinien werden aufgetrennt "​HAUS_NUMMER"​ -> "Haus Nummer"​
 +End Enum</​code>​
 +
 ===== Initialisieren ===== ===== Initialisieren =====
 ==== Property connection ==== ==== Property connection ====
Line 25: Line 45:
 <code vb>'/​** <code vb>'/​**
 ' * Handle dhe adodb-connection to the current workbook ' * Handle dhe adodb-connection to the current workbook
-' * @param  ​Boolean FLag,​ ob die Connectionneu aufgebaut werden soll+' * @param  ​axConnParams ​   Paramters für die Connection 
 +' * @param ​ String ​         Pfad zur QuellDatei. Standard ist der Pfad des ausführenden Workbooks
 ' * @return ADODB.Conection ' * @return ADODB.Conection
 ' */ ' */
-Private Property Get connection(Optional ByVal iReconnect ​As boolean ​False) As Object +Private Property Get connection(Optional ByVal iConnParams ​As axConnParams ​axcNone, Optional ByVal iFilePath As String = Empty) As Object</​code>​
-</​code>​+
  
 ==== Function openRs() ==== ==== Function openRs() ====
Line 35: Line 55:
 <code vb>'/​** <code vb>'/​**
 ' * Open a adodb recordset from the current workbook ' * Open a adodb recordset from the current workbook
-' * @param ​ String ​     SQL-String +' * @param ​ String ​         SQL-String 
-' * @param  ​Boolean FLag,​ ob die Connectionneu aufgebaut werden soll+' * @param  ​axConnParams ​   Paramters für die Connection
 ' * @return ADODB.Recordset ' * @return ADODB.Recordset
 ' */ ' */
-Public Function openRs(Optional ​ByVal iSql As String, ByVal iReconnect ​As boolean ​False) As Object +Public Function openRs(ByVal iSql As String, ​Optional ​ByVal iConnParams ​As axConnParams ​axcNone) As Object</​code>​ 
-</​code>​+
 ==== Function writeHeader() ==== ==== Function writeHeader() ====
-Schreibt ​din Header in eine Zeile+Schreibt ​den Header in eine Zeile
 <code vb>'/​** <code vb>'/​**
 ' * Write the Header of a adodb.recordset ' * Write the Header of a adodb.recordset
-' * @param ​ Range   First cell+' * @param  ​Worksheet/Range/Address
 ' * @param ​ Recordset ' * @param ​ Recordset
 +' * @param ​ axWriteParams
 ' */ ' */
-Public Sub writeHeader(ByRef ​ioStartCell ​As Range, ByRef ioRs As Object)+Public Sub writeHeader(ByRef ​iRange ​As Variant, ByRef ioRs As Object, Optional ByVal iWriteParams As axWriteParams = axwNone)
 </​code>​ </​code>​
  
-==== Function ​writeHeader() ==== +==== Function ​writeFullData() ==== 
-Mit dem einfachen Worksheet.XXXX() werden nur die Daten geschrieben. Die folgende Funktion schreibt mittels writeHeader() zuerst die Kopfzeile und dann die Daten+Mit dem einfachen Worksheet.CopyFromRecordset() werden nur die Daten geschrieben. Die folgende Funktion schreibt mittels writeHeader() zuerst die Kopfzeile und dann die Daten
  
 <code vb>'/​** <code vb>'/​**
 ' * Schreibt ins Excel inkl Header ' * Schreibt ins Excel inkl Header
-' * @param ​ Range   First cell+' * @param  ​Worksheet/Range/Address
 ' * @param ​ Recordset ' * @param ​ Recordset
 +' * @param ​ axWriteParams
 ' */ ' */
-Public Sub writeFullData(ByRef ​ioStartCell ​As Range, ByRef ioRs As Object)+Public Sub writeFullData(ByRef ​iRange ​As Variant, ByRef ioRs As Object, Optional ByVal iWriteParams As axWriteParams = axwNone)
 </​code>​ </​code>​
  
Line 113: Line 135:
  
 ==== Beispiel ==== ==== Beispiel ====
-Ich else die Daten aus dem Sheet ADDRESS und schreibe eine sie in das Sheet TARGET+Ich lese die Daten aus dem Sheet ADDRESS und schreibe eine sie in das Sheet TARGET
  
 +> Meine Library braucht zwar keine Referenz. Im Beispiel habe ich jedoch den Recordset mit Early Binding gemacht und muss darum eine Referenz auf ''​Microsoft ActiveX Data Objects 6.1 Library''​ setzen. Ansonsten den rs als Object definieren
 <code vb>​Public Sub sqlTest() <code vb>​Public Sub sqlTest()
     Dim rs As ADODB.Recordset     Dim rs As ADODB.Recordset
     Dim ws As Worksheet     Dim ws As Worksheet
     ​     ​
-    Set rs = openRs("​SELECT ​FROM [address$] WHERE id BETWEEN 2 AND 3")+    Set rs = openRs("​SELECT ​[id], [vorname] & ' ' & [nachname] AS [name] " &_ 
 +                    "FROM [address$] ​" & _ 
 +                    "WHERE id BETWEEN 2 AND 3")
     ​     ​
     Set ws = ActiveWorkbook.Sheets("​TARGET"​)     Set ws = ActiveWorkbook.Sheets("​TARGET"​)
Line 127: Line 152:
 End Sub</​code>​ End Sub</​code>​
  
 +=== Handhabung der Header ===
 +Bei writeFullData() und beim writeHeader() kann man den Paramter iWriteParams auf axwHeaderRedable setzen. Ich zeige hier mal schnell noch den Unterschied.
 +Die Tabelle Hat die 2 Felder
 +<​code>​ID | SECURITY_TPE | SECURITY_ID
 +-------------------------------
 + 1 | T3           | AX3456Z
 + 2 | T3           | AX4564R</​code>​
 +
 +Mit dem Standard: iWriteParams = axwNone
 +Die Titelzeile belibt unverändert
 +<code vb>​writeFullData Sheets("​trg"​).Range("​A1"​),​ openRs("​select * from [src$]"​)</​code>​
 +<​code>​ID | SECURITY_TPE | SECURITY_ID
 +-------------------------------
 + 1 | T3           | AX3456Z
 + 2 | T3           | AX4564R</​code>​
  
 +Mit axwHeaderRedable wird die Titelzeile in eine lesbarere Form gebracht
 +<code vb>​writeFullData Sheets("​trg"​).Range("​A1"​),​ openRs("​select * from [src$]"​),​ axwHeaderRedable</​code>​
 +<​code>​Id | Security Tpe | Security Id
 +-------------------------------
 + 1 | T3           | AX3456Z
 + 2 | T3           | AX4564R</​code>​
 ===== Code ===== ===== Code =====
-Und hier noch der Code zu den oben bechreibenen ​Funktionen+Und hier noch der Code zu den oben bechriebenen ​Funktionen
  
 <source '​%%fpath%%/​%%fname%%'​ vb> <source '​%%fpath%%/​%%fname%%'​ vb>
vba/excel/adodbsql.1453996405.txt.gz · Last modified: 28.01.2016 16:53:26 (external edit)