AnNguyen > 17-06-20, 12:46 PM
ongke0711 > 17-06-20, 07:40 PM
Function ConnectDB(ByVal DBType As DBaseType) As Boolean
On Error GoTo ConnectDBError
Dim strConnectSQL As String
Dim blnNewConnect As Boolean
Dim blnReturn As Boolean
blnReturn = True
blnNewConnect = True
Call BuildConnectionString(DBType)
If Not oConn Is Nothing Then 'Kiem tra xem có Connection chua, có rôi thi dung ket noi cu
If oConn.State And adStateOpen = adStateOpen Then '-> Da có ket noi
blnNewConnect = False
End If
End If
If blnNewConnect Then
Set oConn = New ADODB.Connection
oConn.ConnectionString = mConnectionString
oConn.Open
End If
ConnectDBResume:
ConnectDB = blnReturn
Exit Function
ConnectDBError:
blnReturn = False
Select Case Err.Number
Case -2147467259
MsgBox "Thong so ket noi Database khong dúng.", vbCritical, "Thông báo"
Case -2147217843
MsgBox "Sai ten dang nhap hoac mat khau.", vbCritical, "Thông báo"
Case Else
MsgBox "Có loi phat sinh." & vbCrLf & "Ma loi: " & Err.Number _
& "Noi dung: " & Err.Description, vbCritical, "ConnectDB"
End Select
Resume ConnectDBResume
End Function
Xuân Thanh > 18-06-20, 07:20 AM
AnNguyen > 18-06-20, 03:54 PM
(17-06-20, 07:40 PM)ongke0711 Đã viết: Vậy chắc là có vấn đề với code kết nối, không có chuyện phải thoát hẳn Access mới kết nối lại được.
Thường thì tiến trình lấy dữ liệu như sau: (code cho hàm lấy dữ liệu)
- Kết nối nguồn dữ liệu.Kiểm tra kết nối xem còn sống không, nếu không thì tạo kết nối lại.
- Tiến hành lấy dữ liệu
- Đóng Form thì ngắt kết nối.
- Nếu bị lỗi thì đóng kết nối.
Ví dụ code kết nối như sau:
Mã PHP:Function ConnectDB(ByVal DBType As DBaseType) As Boolean
On Error GoTo ConnectDBError
Dim strConnectSQL As String
Dim blnNewConnect As Boolean
Dim blnReturn As Boolean
blnReturn = True
blnNewConnect = True
Call BuildConnectionString(DBType)
If Not oConn Is Nothing Then 'Kiem tra xem có Connection chua, có rôi thi dung ket noi cu
If oConn.State And adStateOpen = adStateOpen Then '-> Da có ket noi
blnNewConnect = False
End If
End If
If blnNewConnect Then
Set oConn = New ADODB.Connection
oConn.ConnectionString = mConnectionString
oConn.Open
End If
ConnectDBResume:
ConnectDB = blnReturn
Exit Function
ConnectDBError:
blnReturn = False
Select Case Err.Number
Case -2147467259
MsgBox "Thong so ket noi Database khong dúng.", vbCritical, "Thông báo"
Case -2147217843
MsgBox "Sai ten dang nhap hoac mat khau.", vbCritical, "Thông báo"
Case Else
MsgBox "Có loi phat sinh." & vbCrLf & "Ma loi: " & Err.Number _
& "Noi dung: " & Err.Description, vbCritical, "ConnectDB"
End Select
Resume ConnectDBResume
End Function
Function Tao_Query(ten_qr, cau_lenh) As String
Dim qdf As QueryDef
stConnect = "ODBC;DRIVER=SQL Server;SERVER=" & stServer & ";DATABASE=" & stDatabase & ";UID=" & stUser & ";PWD=" & stPass & ";"
Set qdf = DBEngine(0)(0).CreateQueryDef(ten_qr, cau_lenh)
qdf.Connect = stConnect
qdf.Close
Tao_Query = ten_qr
End Function
AnNguyen > 18-06-20, 03:58 PM
(18-06-20, 07:20 AM)Xuân Thanh Đã viết: Với tôi thì ít khi dùng kết nối bằng ODBC vì thấy không thuận tiện lắm (Thực ra là chưa dùng kết nối này bao giờ thì chính xác hơn). Nếu dùng cho máy đơn thì kết nối bằng LinkTable. Nếu dùng cho mạng LAN hoặc Internet thì kết nối bằng ADO. Kết nối bằng ADO thì chỉ kết nối một lần lúc mở chương trình và đóng một lần khi thoát chương trình. Khi kết nối thì kiểm tra như ongke0711 đã nói ở trênCó 1 vài chỗ như tạo query để đổ dữ liệu vào report hoặc tạo query sau đó đổ vào 1 table để thao tác trên đó ạ.