Export Excel Data To SQL DB

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Blijkbaar is het niet mogenlijk met standaard excel 2007 een sql tabel te onderhouden.
Ik wil met excel een tabel kunnen downloaden, aanpassen en opnieuw op laden.
Het "downloaden" is geen probleem, maar data van excel naar SQL sturen blijkt niet zo eenvoudig.
Ik ben al even aan het zoeken en googelen maar zonderresultaat.
wat ik nu heb:

code:
1
2
3
4
5
6
7
8
9
10
11
Dim cnPubs As ADODB.Connection
Set cnPubs = New ADODB.Connection
' Provide the connection string.
Dim strconn As String
'Use the SQL Server OLE DB Provider.
Call InitConnectionSettings
strconn = gsConnectionString
cnPubs.Open strconn
' Create a recordset object.
cnPubs.Execute ("insert into [Databasename].[schemaname].[tablename]  select * from [sheet1$Tbl_links].values()")
cnPubs.Close


het execute statement werkt wel fijn als ik er gewoon de values ('R',... ) zet.
Ik vermoed dat ik de Tbl_Links ( wat een tabelnaam is) in een dataset moet kunnen steken die opgeladen kan worden?

edit:
Ik weet dat de manier om in de sql query excel aan te roepen eenvoudig gedaan kan worden met
OPENROWSET('Microsoft.Jet.OLEDB.4.0', " & _
"'Excel 8.0;Database=C:\test\xltest.xls', " & _
"'SELECT * FROM [Customers$]')"

bron:
http://www.dotnetspider.c...xcel-sheet-sql-table.aspx


maar aangezien de locatie van het excel document nu moeilijk vast te zetten is moet dit toch in een recordset te steken zijn en op te laden naar sql?

[ Voor 21% gewijzigd door Verwijderd op 06-04-2010 10:19 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
gevonden:

eerst de tabel leeg maken en dan alles wat in de range staat er in steken:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
Option Explicit

Public gsConnectionString As String

Public Const gconstSERVER = "SERVERNAME"
Public Const gconstDATABASE = "DATABASENAME"
Public Const gconstPROVIDER = "SQLOLEDB"    'SQLNCLI (initially used)

Sub InitConnectionSettings()
    gsConnectionString = "Provider=" & gconstPROVIDER & ";SERVER=" & gconstSERVER & ";DATABASE=" & gconstDATABASE & ";Connection Timeout=480;Trusted_Connection=Yes;Packet Size=8192;Pooling=True;Min Pool Size=25;Max Pool Size=500"
End Sub



Public Sub Export()

Dim viCols%
Dim viRows%
Dim viCount%
Dim viRcount%
Dim vtWrapChar$
Dim vtSql$
Dim vtMessage$
Dim vsRange As String
Dim ls_tabelnaam As String
ls_tabelnaam = Range("C2").Value


vsRange = Range("C4").Value

    
    ThisWorkbook.Activate
    
    '' - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    '' Create a connection
    Dim cnn As ADODB.Connection
    Set cnn = New ADODB.Connection
    ' Provide the connection string.
    Dim strconn As String
    'Use the SQL Server OLE DB Provider.
    Call InitConnectionSettings
    strconn = gsConnectionString
    cnn.Open strconn
    
    '' - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    '' Go to the top left corner of the range
    Application.Goto reference:=Range(vsRange)
    
    ''Get some info about the range
    With ActiveCell.CurrentRegion
        viCols = .Columns.Count
        viRows = .Rows.Count
    End With

    
  '' - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    '' Clear the table
  
    Dim cmd As New ADODB.Command
    vtSql = ""
    vtSql = vtSql & " delete from " & ls_tabelnaam
    
    cmd.CommandText = vtSql
    cmd.ActiveConnection = cnn
    cmd.Execute

  
    '' Insert data into the table
    With ActiveCell.CurrentRegion
        For viRcount = 2 To viRows
            
            vtSql = ""
            vtSql = vtSql & " INSERT INTO " & ls_tabelnaam
            vtSql = vtSql & " VALUES ("

            For viCount = 1 To viCols
               
                        vtWrapChar = "'"
                
                vtSql = vtSql & vtWrapChar & .Cells(viRcount, viCount) & vtWrapChar
                
                If viCount <> viCols Then
                    vtSql = vtSql & ","
                Else
                    vtSql = vtSql & ")"
                End If
            Next

            cmd.CommandText = vtSql

            cmd.Execute
        Next
    End With