Thảo luận về bài: ADO căn bản "Kết nối truy vấn CSDL từ file Excel đến file Access."

Liên hệ QC
Nhờ bạn giúp hộ nhé

Tình hình là file mình làm như thế này vì chưa hiểu rõ nên làm hơi dài dòng bạn xem hộ mình nhé!
 

File đính kèm

  • KetNoi AE.zip
    182.7 KB · Đọc: 35
Mình muốn lấy ra excel cũng như báo cáo trong access đó như file đầu mình có minh họa đó!
 
Mình muốn lấy ra excel cũng như báo cáo trong access đó như file đầu mình có minh họa đó!

Nhìn mấy cái query của bạn mù luôn, sao bạn không rút gọn Q1 vào Q cho nó đỡ rối. Tôi nghĩ bạn làm 1 cái query, xong xuất cái query đó ra excel rồi tính toán trên đó.

Còn muốn xuất cái report đó ra excel thì dùng code sau:

Mã:
DoCmd.OutputTo acOutputReport, "R02-Currentstock", acFormatXLS, "C:\1.xls", -1

Tuy nhiên nó sẽ không giữ đúng định dạng như report của access.
 
Lần chỉnh sửa cuối:
bạn hai lúa miền tây ơi cho hỏi cái!
nếu mình muốn lấy dữ liệu từ thư mục khác thì mình viết như thế nào?
 
Mình làm thử rồi nhưng không đc nên mới lên đây hỏi lại bạn mong bạn chỉ giúp hộ mình!
 
ví dụ file này ở 2 thư mục khác nhau mình muốn lấy dữ liệu qua lại thì mình cần làm như thế nào?
file đính kèm bạn xem nhé!
 

File đính kèm

  • KetNoi AE1.zip
    41.6 KB · Đọc: 13
ví dụ file này ở 2 thư mục khác nhau mình muốn lấy dữ liệu qua lại thì mình cần làm như thế nào?
file đính kèm bạn xem nhé!
Làm cho bạn cái dialog mở theo ý muốn.

1./ Code cho access form

Mã:
Option Compare Database
Private Sub cmdCapNhat_Click()
Dim fd As Object, strFileName As String
 Set fd = CreateObject("MSComDlg.CommonDialog")
    With fd
        .ShowOpen
        If Len(.FileName) > 0 Then
            strFileName = .FileName
            Else
            Exit Sub
        End If
    End With
    With DoCmd
        .SetWarnings (False)
        sSQL = "UPDATE [TB hang hoa] b " _
          & "RIGHT JOIN " _
          & "[Excel 8.0;HDR=YES;IMEX=2;DATABASE=" & strFileName & "].[Sheet1$B4:G18] a " _
          & "ON a.Mahang=b.Mahang " _
          & "SET b.ngay=a.ngay,b.Mahang=a.Mahang,b.tenhang=a.tenhang," _
          & "b.makholuutru=a.makholuutru,b.tenkholuutru=a.tenkholuutru," _
          & "b.Soluongban=a.Soluongban " _
          & "where a.mahang is not null"
        DoCmd.RunSQL sSQL
        Me.RecordSource = "TB hang hoa"
        .SetWarnings (True)
    End With
Set fd = Nothing
End Sub

Private Sub cmdLayDuLieu_Click()
Dim fd As Object, strFileName As String
 Set fd = CreateObject("MSComDlg.CommonDialog")
    With fd
        .ShowOpen
        If Len(.FileName) > 0 Then
            strFileName = .FileName
            Else
            Exit Sub
        End If
    End With
    With DoCmd
        .SetWarnings (False)
        .RunSQL "Delete * from [TB hang hoa]"
        .TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, _
            "TB hang hoa", strFileName, True, "B4:G18"
         Me.RecordSource = "TB hang hoa"
        .SetWarnings (True)
    End With
Set fd = Nothing

End Sub

2./ Code cho file Excel:

Mã:
Sub HLMT_Update()
    On Error GoTo loi
    Set Cn = CreateObject("ADODB.Connection")
    Dim mySQL As String
    Dim fd As Object, strFileName As String
    Set fd = CreateObject("MSComDlg.CommonDialog")
    With fd
        .ShowOpen
        If Len(.Filename) > 0 Then
            strFileName = .Filename
            Else
            Exit Sub
        End If
    End With

    With Cn
        mySQL = "UPDATE [TB hang hoa] b " _
              & "right JOIN " _
              & "[Excel 8.0;HDR=Yes;IMEX=2;DATABASE=" _
              & ThisWorkbook.FullName & "].[Sheet1$B4:G600] a  " _
              & "ON b.Mahang=a.Mahang " _
              & "SET b.ngay=a.ngay,b.Mahang=a.Mahang,b.tenhang=a.tenhang," _
              & "b.makholuutru=a.makholuutru,b.tenkholuutru=a.tenkholuutru," _
              & "b.Soluongban=a.Soluongban " _
              & "where a.mahang is not null"
        .Provider = "Microsoft Jet 4.0 OLE DB Provider"
        .ConnectionString = "Data Source=" & strFileName
        .CursorLocation = adUseClient
        .Open
        .Execute mySQL
        .Close
    End With
    Set Cn = Nothing
    Set fd = Nothing
    Exit Sub
loi:
    MsgBox Err.Description

End Sub
Sub HLMT_LayDuLieu()
    Dim cnn As Object, rst As Object, strCNString As String, lsSQL As String
    Set cnn = CreateObject("ADODB.Connection")
    Set rst = CreateObject("ADODB.Recordset")
    Dim fd As Object, strFileName As String
    Set fd = CreateObject("MSComDlg.CommonDialog")
    With fd
        .ShowOpen
        If Len(.Filename) > 0 Then
            strFileName = .Filename
            Else
            Exit Sub
        End If
    End With

    strCNString = "Data Source=" & strFileName
    On Error GoTo loi
    With cnn
        .Provider = "Microsoft Jet 4.0 OLE DB Provider"
        .ConnectionString = strCNString
        .CursorLocation = adUseClient
        .Open
    
    End With
    lsSQL = "SELECT * " & _
            "FROM [TB hang hoa]"
    rst.Open lsSQL, cnn, adOpenStatic, adLockReadOnly
    Range("B5:G6000").ClearContents
    Range("B5").CopyFromRecordset rst
    rst.Close: cnn.Close
    Set rst = Nothing: Set cnn = Nothing
    Set fd = Nothing
    Exit Sub
loi:
    MsgBox Err.Description
End Sub
 
Vậy bạn thử code sau cho file Excel này thử coi được không nhé.

Mã:
Sub HLMT_Update()
    On Error GoTo loi
    Set Cn = CreateObject("ADODB.Connection")
    Dim mySQL As String
    Dim strFileName
    strFileName = Application.GetOpenFilename()
    With Cn
        mySQL = "UPDATE [TB hang hoa] b " _
              & "right JOIN " _
              & "[Excel 8.0;HDR=Yes;IMEX=2;DATABASE=" _
              & ThisWorkbook.FullName & "].[Sheet1$B4:G600] a  " _
              & "ON b.Mahang=a.Mahang " _
              & "SET b.ngay=a.ngay,b.Mahang=a.Mahang,b.tenhang=a.tenhang," _
              & "b.makholuutru=a.makholuutru,b.tenkholuutru=a.tenkholuutru," _
              & "b.Soluongban=a.Soluongban " _
              & "where a.mahang is not null"
        .Provider = "Microsoft Jet 4.0 OLE DB Provider"
        .ConnectionString = "Data Source=" & strFileName
        .CursorLocation = adUseClient
        .Open
        .Execute mySQL
        .Close
    End With
    Set Cn = Nothing
    Exit Sub
loi:
    MsgBox Err.Description

End Sub
Sub HLMT_LayDuLieu()
    Dim cnn As Object, rst As Object, strCNString As String, lsSQL As String
    Set cnn = CreateObject("ADODB.Connection")
    Set rst = CreateObject("ADODB.Recordset")
Dim strFileName
    strFileName = Application.GetOpenFilename()
    strCNString = "Data Source=" & strFileName
    On Error GoTo loi
    With cnn
        .Provider = "Microsoft Jet 4.0 OLE DB Provider"
        .ConnectionString = strCNString
        .CursorLocation = adUseClient
        .Open
    
    End With
    lsSQL = "SELECT * " & _
            "FROM [TB hang hoa]"
    rst.Open lsSQL, cnn, adOpenStatic, adLockReadOnly
    Range("B5:G6000").ClearContents
    Range("B5").CopyFromRecordset rst
    rst.Close: cnn.Close
    Set rst = Nothing: Set cnn = Nothing
    Exit Sub
loi:
    MsgBox Err.Description
End Sub
 
mình test ok rồi bạn à!
tiện thể cho mình hỏi luôn, nếu mình muốn chỉ định thư mục mặc định ở một ổ đỉa bất kỳ thì mình làm như thế nào?
vì công việc của mình là lấy dữ liệu ở rất nhiều mấy khác nhau nên mình muốn làm mặc định cho tiện!
 
mình test ok rồi bạn à!
tiện thể cho mình hỏi luôn, nếu mình muốn chỉ định thư mục mặc định ở một ổ đỉa bất kỳ thì mình làm như thế nào?
vì công việc của mình là lấy dữ liệu ở rất nhiều mấy khác nhau nên mình muốn làm mặc định cho tiện!

Bạn tim và thay strFileName thành đường dẫn đến file là được.
 
còn phần access thì bạn giúp mình luôn, nếu thư mục có khoảng cách thì nó có hiểu không bạn?
 
còn phần access thì bạn giúp mình luôn, nếu thư mục có khoảng cách thì nó có hiểu không bạn?

Hiểu hết đó bạn, bạn thử nhé. Nếu thư mục cố định thì không cần dùng cách trên chi cho rắc rối, đưa thẳng đường dẫn vào luôn là được.
 
thì file lúc nảy mình có ví ** đó bạn bạn làm hộ mình để mình học hỏi!
thông cảm mình hơi gà! trong sub HLMT_Update nếu dữ liệu có rất nhiều cột thì làm theo bạn thì hơi dài dòng bạn có cách nào ngắn gọn hơn không?
 
thì file lúc nảy mình có ví ** đó bạn bạn làm hộ mình để mình học hỏi!
thông cảm mình hơi gà! trong sub HLMT_Update nếu dữ liệu có rất nhiều cột thì làm theo bạn thì hơi dài dòng bạn có cách nào ngắn gọn hơn không?
Bạn xem file đính kèm nhé, về code ngắn hơn thì mình chưa nghĩ ra, bạn tạm dùng thế nhé.
 

File đính kèm

  • Test.rar
    45.8 KB · Đọc: 62
còn cái tạo đường dẩn cố định tới file muốn lấy dữ liệu thì sao bạn?
ví dụ: trong 2 folder1 và 2 nằm tại ổ D:\folder1\vidu.xls
 
Web KT
Back
Top Bottom