2017-03-11 14 views
2

私はSQLデータベースを持っており、Excelスプレッドシートと接続することができます。しかし、テーブルをExcelから直接更新すると、データベースが更新されません。一度更新をクリックすると、入力したすべてのデータがExcelテーブルに表示されなくなります。SQLテーブルをExcelから直接更新するには?

クエリを使用せずにSQLデータベースをExcelから更新できますか?

+0

あなたはSSISを使用するか、または外部表を使用してすることができます。 –

+0

"テーブルをExcelから直接更新すると"。どのようにこれをやっている? –

+0

@ Nick.McDermaid通常のExcelファイルのようなスプレッドシートから – Bodhi

答えて

3

これを行う方法はたくさんあります。私はSSISをお勧めしたい。下のリンクを参照してください。あなたはまた、SQL ServerにExcelからデータをプッシュするためにVBAを使用することができます

http://www.sql-server-performance.com/2005/import-data-ssis-excel-sheet-dynamic-sheets/

Sub ButtonClick() 
'TRUSTED CONNECTION 
    On Error GoTo errH 

    Dim con As New ADODB.Connection 
    Dim rs As New ADODB.Recordset 
    Dim strPath As String 
    Dim intImportRow As Integer 
    Dim strFirstName, strLastName As String 

    Dim server, username, password, table, database As String 


    With Sheets("Sheet1") 

      server = .TextBox1.Text 
      table = .TextBox4.Text 
      database = .TextBox5.Text 


      If con.State <> 1 Then 

       con.Open "Provider=SQLOLEDB;Data Source=" & server & ";Initial Catalog=" & database & ";Integrated Security=SSPI;" 
       'con.Open 

      End If 
      'this is the TRUSTED connection string 

      Set rs.ActiveConnection = con 

      'delete all records first if checkbox checked 
      If .CheckBox1 Then 
       con.Execute "delete from tbl_demo" 
      End If 

      'set first row with records to import 
      'you could also just loop thru a range if you want. 
      intImportRow = 10 

      Do Until .Cells(intImportRow, 1) = "" 
       strFirstName = .Cells(intImportRow, 1) 
       strLastName = .Cells(intImportRow, 2) 

       'insert row into database 
       con.Execute "insert into tbl_demo (firstname, lastname) values ('" & strFirstName & "', '" & strLastName & "')" 

       intImportRow = intImportRow + 1 
      Loop 

      MsgBox "Done importing", vbInformation 

      con.Close 
      Set con = Nothing 

    End With 

Exit Sub 

errH: 
    MsgBox Err.Description 
End Sub 

また、Where句を使用してこれを試すこともできます。

Sub InsertInto() 

'Declare some variables 
Dim cnn As adodb.Connection 
Dim cmd As adodb.Command 
Dim strSQL As String 

'Create a new Connection object 
Set cnn = New adodb.Connection 

'Set the connection string 
cnn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=Northwind;Data Source=Excel-PC\SQLEXPRESS" 
'cnn.ConnectionString = "DRIVER=SQL Server;SERVER=Excel-PC\SQLEXPRESS;DATABASE=Northwind;Trusted_Connection=Yes" 


'Create a new Command object 
Set cmd = New adodb.Command 

'Open the Connection to the database 
cnn.Open 

'Associate the command with the connection 
cmd.ActiveConnection = cnn 

'Tell the Command we are giving it a bit of SQL to run, not a stored procedure 
cmd.CommandType = adCmdText 

'Create the SQL 
strSQL = "UPDATE TBL SET JOIN_DT = '2013-01-22' WHERE EMPID = 2" 

'Pass the SQL to the Command object 
cmd.CommandText = strSQL 


'Execute the bit of SQL to update the database 
cmd.Execute 

'Close the connection again 
cnn.Close 

'Remove the objects 
Set cmd = Nothing 
Set cnn = Nothing 

End Sub 
+0

また私のテーブルには5200人の従業員がいます。関連するデータ。 ssisはそこで役に立つでしょうか。 ? – Bodhi

1

はい!私はあなたがSSISにアクセスしたことを理解していませんでした。それはあなたのETLニーズのすべてではないにしても、ほとんどを処理します。役に立つSSISアイデアについては、以下のリンクを参照してください。

http://www.sqlis.com/sqlis/post/Looping-over-files-with-the-Foreach-Loop.aspx

http://www.techbrothersit.com/2013/12/ssis-read-multiple-sheets-from-excel.html

あなたがやっていることのためにおそらく最も関連します。

http://dw-sqldeveloper.blogspot.com/2012/05/multiple-excel-file-with-multiple.html

関連する問題