Hỏi về kết nối excel và SQL Server

Liên hệ QC

kyo

Nguyễn Khắc Duy
Thành viên danh dự
Tham gia
4/6/06
Bài viết
901
Được thích
2,714
Sau khi con tham khảo ADO căn bản, con có được code thế này

PHP:
Sub test()

Dim cnn As New ADODB.Connection
Dim recordset As ADODB.recordset
Dim src As String
Dim col As Integer

cnn.Open "Driver=SQL Server;SERVER=CDUNG;UID=;PWD=;DATABASE=TEST"

If cnn.State = 1 Then
    MsgBox "Ket noi thanh cong"
Else
    MsgBox "Ket noi that bai"
End If


Set recordset = New ADODB.recordset
With recordset
    src = "SELECT * FROM Nhanvien"
    .Open Source:=src, ActiveConnection:=Connection
    For col = 0 To recordset.Fields.Count - 1
        Range("A1").Offset(0, col).Value = recordset.Fields(col).Name
    Next

    Range("A1").Offset(1, 0).CopyFromRecordset recordset
End With

Set recordset = Nothing
cnn.Close
Set cnn = Nothing

End Sub

Con đã kết nối được vào SQL Server (msgbox báo đã kết nối) nhưng lại không thể kết nối vào database nên không truy xuất được data (thậm chí khi con để trống phần server và database trong lệnh kết nối thì vẫn kết nối được). Xin cho con hỏi làm cách nào để kết nối vào trong database TEST. Con xin cám ơn
 
Sau khi con tham khảo ADO căn bản, con có được code thế này

PHP:
Sub test()

Dim cnn As New ADODB.Connection
Dim recordset As ADODB.recordset
Dim src As String
Dim col As Integer

cnn.Open "Driver=SQL Server;SERVER=CDUNG;UID=;PWD=;DATABASE=TEST"

If cnn.State = 1 Then
    MsgBox "Ket noi thanh cong"
Else
    MsgBox "Ket noi that bai"
End If


Set recordset = New ADODB.recordset
With recordset
    src = "SELECT * FROM Nhanvien"
    .Open Source:=src, ActiveConnection:=Connection
    For col = 0 To recordset.Fields.Count - 1
        Range("A1").Offset(0, col).Value = recordset.Fields(col).Name
    Next

    Range("A1").Offset(1, 0).CopyFromRecordset recordset
End With

Set recordset = Nothing
cnn.Close
Set cnn = Nothing

End Sub

Con đã kết nối được vào SQL Server (msgbox báo đã kết nối) nhưng lại không thể kết nối vào database nên không truy xuất được data (thậm chí khi con để trống phần server và database trong lệnh kết nối thì vẫn kết nối được). Xin cho con hỏi làm cách nào để kết nối vào trong database TEST. Con xin cám ơn
Thay đoạn này:
Mã:
.Open Source:=src, ActiveConnection:=Connection
bằng đoạn này:
Mã:
.Open Source:=src, ActiveConnection:=Cnn ' cái này bạn định nghĩa trên kia đó

Bạn viết vòng lặp dài dòng, thực ra chỉ cần
Mã:
Sheet1.Range("A1").CopyFromRecordset recordset

là thỏa mãn công việc của bạn (vì bạn chọn hết nguyên 1 bảng!)
- Chú ý server
- Chú ý định nghĩa biến : ví dụ recordset nên định nghĩa rs vì từ recordset là một từ khóa trong thư viện ADO
 
Lần chỉnh sửa cuối:
Cám ơn bạn rất nhiều, mình đã tìm được cái sai của mình, mấu chốt là ở chỗ

.Open Source:=src, ActiveConnection:=Connection

Ghi Connection là sai hoàn toàn dẫn đến việc code bị lỗi
 
Nhờ các bạn xem hộ mình đoạn Sub sau, mình cũng gặp vấn đề như Kyo, đã báo kết nối nhưng không truy xuất được dữ liệu. Cảm ơn mọi người
Sub CnnTest()
Dim cnn As New ADODB.Connection
Dim rec As ADODB.Recordset
Dim mySql As String
Set rec = New ADODB.Recordset

cnn.Open "Driver=SQL Server;Server=VIETDUNG\MISASME2010;UID=;PWD=;DATABASE=NAMDO"

If cnn.State = 1 Then
MsgBox "Ket noi thanh cong"
Else
MsgBox "Ket noi that bai"
End If



With Application
.ScreenUpdating = False: .Calculation = xlCalculationManual
End With

mySql = "SELECT AccountingObject.AccountingObjectID" & Chr(13) & "" & Chr(10) & "FROM NamDo.dbo.AccountingObject AccountingObject"
rec.Open mySql, cnn, adOpenKeyset, adLockOptimistic

Sheet2.Range("C4").CopyFromRecordset rec

With Application
.ScreenUpdating = True: .Calculation = xlCalculationAutomatic
End With

End Sub
 
1. lỗi khoản trắng ngay chỗ DATA_BASE -> sửa lại DATABASE
2. Chưa khởi tạo biến rec thì làm sao dùng được
 
Web KT
Back
Top Bottom