ADO căn bản: Kết nối truy vấn CSDL từ file Excel đến file Access.

Liên hệ QC
Cho mình hỏi lấy dữ liệu từ nhiều table trong 1 file access thì thực hiện như thế nào. cảm ơn!
 
Mã:
Public cnn As New ADODB.Connection
Sub Moketnoi()
Set cnn = New ADODB.Connection
Dim strCNString As String
strCNString = "Data Source=" & ThisWorkbook.Path & "\CSDL.mdb"
With cnn
    .Provider = "Microsoft Jet 4.0 OLE DB Provider"
    .ConnectionString = strCNString
    .Properties("Jet OLEDB:Database Password") = "1234"
    .CursorLocation = adUseClient
    .Open

End With

End Sub
Các bạn cho mình hỏi là kết nối với csdl accdb có pass như thế nào vây? như Sub trên mình thay csdl mdb thanh accdb thì chỉ có thể kết nối khi không có pass. file accdb có pass thì không kết nối được

cảm ơn mọi người nhiều!
 
1. accdb thì provider phải là ACE chứ. (Provider)

2. ACE hay Jet gì thì cũng mở password qua Jet. (Properties)
Tuy nhiên, vì nó là Jet cho nên nó không mở được những files được password encrypted theo kiểu của 2007 trở lên.
Muốn mở bằng connection string này thì phải encrypt nó lại theo kiểu cũ (2003).
- Vào Access, tháo password. Đóng lại.
- vào Access->File->Options->Client
Settings->Advanced, tích "use legacy encryption"
- Đặt password trở lại.
Encrypt kiểu cũ như vầy không an toàn bằng kiểu mới. Nhưng đó là cách duy nhất để kết nối với ADO.
 
các pro cho mình hỏi, ta có thể dùng excel để tạo hoặc xóa đi 1 trường dữ liệu của 1 bảng trong access được không, nếu có thì có thể cho em code ví dụ đc không. Rất mong câu trả lời của các pro, em cảm ơn./.
 
các pro cho mình hỏi, ta có thể dùng excel để tạo hoặc xóa đi 1 trường dữ liệu của 1 bảng trong access được không, nếu có thì có thể cho em code ví dụ đc không. Rất mong câu trả lời của các pro, em cảm ơn./.
Bạn hoàn toàn có thể thêm và xóa trường dữ liệu bình thường bằng ví dụ sau:

1. Xóa
Mã:
ALTER TABLE TenTable DROP COLUMN TenTruongDLCanXoa
2. Thêm
Mã:
ALTER TABLE TenTable ADD COLUMN TenTruongDLCanThem  KieuDuLieu
 
Xin được góp ý thêm 1 chút:

SQL WHERE Clause:

The WHERE clause is used to filter records.

Mệnh đề WHERE được sử dụng để lọc records

The WHERE clause is used to extract only those records that fulfill a specified criterion.

Mệnh đề WHERE được sử dụng để trích xuất các records đáp ứng một tiêu chí xác định.

Cú pháp SQL WHERE:
Mã:
SELECT column_name(s)
FROM table_name
WHERE column_name operator value

LƯU Ý:

SQL sử dụng dấu nháy đơn (') bao quanh các giá trị chuỗi (hầu hết các hệ thống cơ sở dữ liệu cũng sẽ chấp nhận dấu ngoặc kép).

Tuy nhiên, giá trị số không được kèm theo trong dấu nháy đơn!
Tks bác nhiều. Mình mới mò về vba nên k rành nhờ bác chỉ giúp như sau: mình muốn mệnh đề where nó = với giá trị 1 ô mình nhập thì khai báo như thế nào nhỉ?
Vd: mình có 1 nút và ô A1 với các giá trị cách nhau dấu , là 1990,1991,1992, khi bấm vào nút thì sẽ lọc năm sinh điều kiện này, nếu không nhập thì lấy tất cả thì làm sao bác
 
Lần chỉnh sửa cuối:
Tks bác nhiều. Mình mới mò về vba nên k rành nhờ bác chỉ giúp như sau: mình muốn mệnh đề where nó = với giá trị 1 ô mình nhập thì khai báo như thế nào nhỉ?
Vd: mình có 1 nút và ô A1 với các giá trị cách nhau dấu , là 1990,1991,1992, khi bấm vào nút thì sẽ lọc năm sinh điều kiện này, nếu không nhập thì lấy tất cả thì làm sao bác
Cột Năm Sinh trong CSDL của bạn dạng nào? yyyy hay dd/mm/yyyy?
 
Làm phiền các Bạn chút ... Bạn nào còn sử dụng Office 2003 nhờ tải 2 File Access sau về mở lên Save As sang Access 2003 dùm mình với
File đó hình như là Office 1997 Or 2000 gì đó mình mở trên Office 2016x64 không được
Xin cảm ơn
 

File đính kèm

  • ChangeAccess_2003.rar
    16 KB · Đọc: 10
Làm phiền các Bạn chút ... Bạn nào còn sử dụng Office 2003 nhờ tải 2 File Access sau về mở lên Save As sang Access 2003 dùm mình với
File đó hình như là Office 1997 Or 2000 gì đó mình mở trên Office 2016x64 không được
Xin cảm ơn
Thêm Table báo cáo error
 

File đính kèm

  • ChangeAccess_2003.rar
    47.4 KB · Đọc: 7
Nếu sau này dân chúng họ lên Windows10 hết ko cài được Office 2003 thì mấy file Access 1997 to 2000 trên các phần mềm củ muốn xem lại data thì sao ta ???!!! chắc bỏ quá ( Hiện tại thấy nhiều Cty to trà bá còn Xài Windows Server 2003 )
 
Bây giờ bắt đầu ta lấy dữ liệu từ bảng tblData ra Excel cell bắt đầu là A5.

1./ Lấy tất cả các cột có trong bảng:

Mã:
Sub LayDuLieuTatCaCot()
On Error GoTo loi


Dim lsSQL As String: Dim rst As New ADODB.Recordset
If cnn.State <> 1 Then Moketnoi


    lsSQL = "SELECT * " & _
            "FROM tblData"
          
    rst.Open lsSQL, cnn, adOpenStatic, adLockReadOnly
    Cells.ClearContents
    Range("A5").CopyFromRecordset rst
  
rst.Close
Set rst = Nothing
cnn.Close
Set cnn = Nothing
Exit Sub
loi:
MsgBox Err.Description
End Sub

2./ Lấy 3 cột (SUPPLIER, [MATERIAL NAME], [COLOR NAME]) lưu ý nếu ta select cột nào trước thì nó sẽ ra cột đó trước, ví dụ tôi lấy cột Supplier trước thì nó sẽ hiển thị cột này trước, mặc dù vị trí thực của nó nằm trong bảng ở sau các cột kia.

Mã:
Sub LayDuLieu3Cot()
On Error GoTo loi


Dim lsSQL As String: Dim rst As New ADODB.Recordset
If cnn.State <> 1 Then Moketnoi


    lsSQL = "SELECT SUPPLIER, [MATERIAL NAME], [COLOR NAME] " & _
            "FROM tblData"


          
    rst.Open lsSQL, cnn, adOpenStatic, adLockReadOnly
    Cells.ClearContents
    Range("E5").CopyFromRecordset rst
  
rst.Close
Set rst = Nothing
cnn.Close
Set cnn = Nothing
Exit Sub
loi:
MsgBox Err.Description
End Sub

[video=youtube;MH2-fAElpXw]


Cho mình hỏi, ở code trên bạn sẽ copy dữ liệu trường SUPPLIER, [MATERIAL NAME], [COLOR NAME] liền nhau vào excel, bắt đầu từ ô A5. Nếu mình muốn trên excel A5 để dữ liệu SUPPLIER, C5 để dữ liệu MATERIAL NAME, T5 để COLOR NAME thì có cách nào nhanh không bạn?

Mình hỏi thêm hỏi thêm một vấn đề khác, giả sử trong CSDL của bạn có trường POQTY
1593228511209.png
Nếu ở excel mình có một dự liệu nhập hàng hôm đó, muốn: Cứ có hàng hóa mã ID là 1 thì sẽ cộng số excel vào số đã có trên POQTY thì cách cộng trực tiếp vào access không bạn? (mình chưa rành access, hiện thì mình phải dùng code copy dữ liệu POQTY của ID 1 ra ngoài excel, cộng rồi update lại vào excel)
 
Lần chỉnh sửa cuối:
Nếu sau này dân chúng họ lên Windows10 hết ko cài được Office 2003 thì mấy file Access 1997 to 2000 trên các phần mềm củ muốn xem lại data thì sao ta ???!!! chắc bỏ quá ( Hiện tại thấy nhiều Cty to trà bá còn Xài Windows Server 2003 )
office 2016, 365 đều có thể mở được file mdb của 2003 trở về trước. Một số thư viện (ocx) bản cũ khó tìm ảnh hưởng đến ActiveX controls khi mở lên, nhưng có thể thay thế bằng control phiên bản mới
 
office 2016, 365 đều có thể mở được file mdb của 2003 trở về trước. Một số thư viện (ocx) bản cũ khó tìm ảnh hưởng đến ActiveX controls khi mở lên, nhưng có thể thay thế bằng control phiên bản mới
Mấy file Access 1997 to 2000 em mở trên Office 2016 nó ko cho đó Anh
Anh thử file file sau trên Office 2016 xem sao ... Hình như nó là Access 1997 To 2000 gì đó
 

File đính kèm

  • database.rar
    10.8 KB · Đọc: 6
Mấy file Access 1997 to 2000 em mở trên Office 2016 nó ko cho đó Anh
Anh thử file file sau trên Office 2016 xem sao ... Hình như nó là Access 1997 To 2000 gì đó
Tôi mới thử bằng 2016 thì không được thật vì file kiểu cũ quá (1997-2000, nếu 2003 thì có thể được). Tuy nhiên 2007 hay 2010 thì mở được 1997 vì có tính năng convert, 2013 trở về sau thì không:

1593237595358.png
 
1. Cho mình hỏi, ở code trên bạn sẽ copy dữ liệu trường SUPPLIER, [MATERIAL NAME], [COLOR NAME] liền nhau vào excel, bắt đầu từ ô A5. Nếu mình muốn trên excel A5 để dữ liệu SUPPLIER, C5 để dữ liệu MATERIAL NAME, T5 để COLOR NAME thì có cách nào nhanh không bạn?

2. Mình hỏi thêm hỏi thêm một vấn đề khác, giả sử trong CSDL của bạn có trường POQTY
View attachment 240107
Nếu ở excel mình có một dự liệu nhập hàng hôm đó, muốn: Cứ có hàng hóa mã ID là 1 thì sẽ cộng số excel vào số đã có trên POQTY thì cách cộng trực tiếp vào access không bạn? (mình chưa rành access, hiện thì mình phải dùng code copy dữ liệu POQTY của ID 1 ra ngoài excel, cộng rồi update lại vào excel)
1. Dùng câu lệnh truy vấn bỏ trống cột.

Mã:
Select Supplier,'',MaterialName,'','',.... From...
2. Tạo bảng mới, lấy ID làm mối quan hệ với bảng gốc. Rồi xử lý bằng câu lệnh SQL chứ ai lại cập nhật trực tiếp vào bảng gốc.
 
office 2016, 365 đều có thể mở được file mdb của 2003 trở về trước. Một số thư viện (ocx) bản cũ khó tìm ảnh hưởng đến ActiveX controls khi mở lên, nhưng có thể thay thế bằng control phiên bản mới
Thì trước khi úp hỏi em cũng có tìm hiểu hết rồi Access 1997 to 2000 chỉ mở trên Office 2003 xong Save As To 2003 xong từ 2003 muốn làm gì tiếp với các Build sau đó thì làm tiếp

Sau đó Em có quậy trên Delphi thì vô tình Em thấy Delphi nó xử được File Access 1997 to 2000 bằng cách Compact and Repair Database sau khi chạy xong mở lại file đó nó sẻ hỏi như hình sau thì chọn No xong thoát xong mở lại nó là OK

1.png

Khi nào rảnh Em sẻ viết nó thành 1 Hàm API sử dụng khi cần để cứu dữ liệu File Access 1997 to 2000 mà các máy Windows10 sau này ko còn hổ trợ cài Office 2003 nữa
 
Web KT
Back
Top Bottom