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
Bạn đừng quên là còn 1 bài tập để áp dụng cho bài toán này nhen bạn.

Không hiểu tôi phát biểu như vầy có đúng không, khi ta chọn một điều kiện nào đó rồi xóa (delete) thì những dòng còn lại tự chuyển lên, giống như ta delete hàng trong excel, nhưng khi ta update "trắng" này thì những hàng rỗng đó còn nguyên, có đúng không ạ?
 
Không hiểu tôi phát biểu như vầy có đúng không, khi ta chọn một điều kiện nào đó rồi xóa (delete) thì những dòng còn lại tự chuyển lên, giống như ta delete hàng trong excel, nhưng khi ta update "trắng" này thì những hàng rỗng đó còn nguyên, có đúng không ạ?
Dĩ nhiên thế, câu này giống như clearcontents
 
Dĩ nhiên thế, câu này giống như clearcontents

Đúng rồi, clearcontents có thể được dùng trong Access không bạn? Tại tôi hỏi lúc đó là đang học môi trường Access nên hỏi là vậy, vì khi ta đặt con trỏ vào tiêu đề hàng của Excel và bấm nút Delete thì nó chỉ ClearContents, còn với Access thì nó Delete đi một hàng. Cái tôi có lẽ cần thật sự là như trong Access vậy đó bạn, đã là cơ sở dữ liệu thì đâu có chuyện trống hàng này có hàng kia phải không bạn?
 
Đúng rồi, clearcontents có thể được dùng trong Access không bạn? Tại tôi hỏi lúc đó là đang học môi trường Access nên hỏi là vậy, vì khi ta đặt con trỏ vào tiêu đề hàng của Excel và bấm nút Delete thì nó chỉ ClearContents, còn với Access thì nó Delete đi một hàng. Cái tôi có lẽ cần thật sự là như trong Access vậy đó bạn, đã là cơ sở dữ liệu thì đâu có chuyện trống hàng này có hàng kia phải không bạn?
Tôi nghĩ bạn dư sức để giải quyết vần đề này. Dĩ nhiên là vẫn dùng theo cách trên + thêm 1 bước nữa là sắp xếp lại csdl là được. Chịu khó đi đường vòng vậy.
 
Tôi nghĩ bạn dư sức để giải quyết vần đề này. Dĩ nhiên là vẫn dùng theo cách trên + thêm 1 bước nữa là sắp xếp lại csdl là được. Chịu khó đi đường vòng vậy.

Vậy vòng là vòng làm sao bạn? Chẳng lẽ tôi lại copy nguyên cái CSDL tôi lại cho nó Sort bằng lệnh ORDER BY rồi sau đó tôi lại xóa "trắng" lần nữa toàn bộ và tôi lại gán nó vào hay sao?

Hỏi vậy thôi, chứ tôi biết cố ép "heo kéo xe" cũng không hiệu quả đâu, nội việc update "trắng" thôi tôi đã thấy nó chậm quá rồi, cho nên như tôi đã nói, chỉ dùng nó khi truy xuất dữ liệu là tuyệt vời thôi, ngoài ra nó không thích hợp làm việc khác đâu.

Cám ơn bạn đã cất công hướng dẫn cho tôi.
 
Vậy vòng là vòng làm sao bạn? Chẳng lẽ tôi lại copy nguyên cái CSDL tôi lại cho nó Sort bằng lệnh ORDER BY rồi sau đó tôi lại xóa "trắng" lần nữa toàn bộ và tôi lại gán nó vào hay sao?

Hỏi vậy thôi, chứ tôi biết cố ép "heo kéo xe" cũng không hiệu quả đâu, nội việc update "trắng" thôi tôi đã thấy nó chậm quá rồi, cho nên như tôi đã nói, chỉ dùng nó khi truy xuất dữ liệu là tuyệt vời thôi, ngoài ra nó không thích hợp làm việc khác đâu.

Cám ơn bạn đã cất công hướng dẫn cho tôi.
Vấn đề là tôi muốn nói cho bạn biết, ADO cũng đa dạng chứ không phải như bạn nói nó chỉ đơn thuần là truy vấn, trích lọc dữ liệu. Còn về việc áp dụng vào thực tế thì tùy vào trường hợp mà ta chọn cách nào cho nó tối ưu. Bạn nói cố ép "heo kéo xe" sao bạn lại cố viết hàm max?

Bạn nói:
chỉ dùng nó khi truy xuất dữ liệu là tuyệt vời thôi, ngoài ra nó không thích hợp làm việc khác đâu.
Cái này bạn đừng vội kết luận, ADO sẽ làm nhiều điều hơn bạn tưởng đấy. Mình không dám nói mình hiểu hết cái này nhưng nếu biết áp dụng nó là công cụ cho bạn đi kiếm tiền đó bạn.
 
Lần chỉnh sửa cuối:
Vấn đề là tối muốn nói cho bạn biết, ADO cũng đa dạng chứ không phải như bạn nói nó chỉ đơn thuần là truy vấn, trích lọc dữ liệu. Còn về việc áp dụng vào thực tế thì tùy vào trường hợp mà ta chọn cách nào cho nó tồi ưu. Bạn nói cố ép "heo kéo xe" sao bạn lại cố viết hàm max?

Bạn nói:

Cái này bạn đừng vội kết luận, ADO sẽ làm nhiều điều hơn bạn tưởng đấy. Mình không dám nói mình hiểu hết cái này nhưng nếu biết áp dụng nó là công cụ cho bạn đi kiếm tiền đó bạn.

Hàm Max mà tôi tập viết đó là tôi học thuật và so sánh mức độ viết hàm của tôi có tương tự, có giống với hàm Max thật hay không, và dĩ nhiên tôi viết để tôi học thêm, tôi khám phá thêm nhiều thứ như tôi đã nói ở bài kết luận cuối cùng của tôi đó. Thật sự tôi có dùng hàm Max bao giờ đâu, những thử sức là một chuyện, thực hiện là một chuyện, nhưng tôi cảm thấy thích thú vì mình có thể làm được như vậy, và tốc độ chắc cũng không đến nổi tồi và tính chính xác không đến nổi tệ nếu tôi chỉnh sửa logic lại một chút. Còn cái này rõ ràng là không cải tiến được gì tốc độ được rồi vì câu lệnh SQL nó bất di bất dịch như thế rồi nên đành phải chịu thôi bạn ạ.

Câu màu đỏ là đương nhiên rồi bạn, "nhất nghệ tinh, nhất thân vinh" mà, dù là làm vệ sinh hay nhà bác học, nếu chuyên tâm yêu thích công việc của mình thì ai cũng có thể hái ra tiền bằng nghiệp vụ của mình cả.
 
Lần chỉnh sửa cuối:
Còn cái này rõ ràng là không cải tiến được gì tốc độ được rồi vì câu lệnh SQL nó bất di bất dịch như thế rồi nên đành phải chịu thôi bạn ạ.

Câu màu đỏ là đương nhiên rồi bạn, "nhất nghệ tinh, nhất thân vinh" mà, dù là làm vệ sinh hay nhà bác học, nếu chuyên tâm yêu thích công việc của mình thì ai cũng có thể hái ra tiền bằng nghiệp vụ của mình cả.

Bạn nên lùi lại và nhìn lại vấn đề 1 cách tổng quan mới hiểu được

SQL cũng là một ngôn ngữ cho phép quản lý cơ sở dữ liệu lớn và xử lý các dữ liệu dưới góc độ cơ sở dữ liệu - các dữ liệu có mối tương quan chặt chẽ với nhau - Vì là ngôn ngữ nên nó cũng có thể làm được đủ chuyện nhất là khi kết hợp với ngôn ngữ VB nữa - không phải bất di bất dịch như bạn nói đâu.

trong khi đó Excel thì quản lý dữ liệu dạng theo ô tủn mủn mà thôi - không xét quan hệ dữ liệu giữa chúng nhiều; nhưng EXCEL mạnh về tính toán trình bày và trực quan

Vì thế yêu cầu của bạn ở đây
Không hiểu tôi phát biểu như vầy có đúng không, khi ta chọn một điều kiện nào đó rồi xóa (delete) thì những dòng còn lại tự chuyển lên, giống như ta delete hàng trong excel, nhưng khi ta update "trắng" này thì những hàng rỗng đó còn nguyên, có đúng không ạ?

là giống như vẻ quan niệm quản lý dữ liệu dạng trực quan của excel, trong khi đó SQL quản lý theo kiểu tập hợp dữ liệu quan hệ, nên Việc xóa một bản ghi trong CSDL thì SQL người ta quan niệm là Remove (dùng Delete from where , - khi này bạn sẽ thấy xóa theo điều kiện lọc trích nào đó rất nhanh và tiện lợi hơn excel nhiều)- và không cần quan tâm nhiều tới dòng dưới hay dòng trên - vì đó là quan tâm về trình bày màn hình thôi

Nói gọn lại, khó có thể so sánh 2 môi trường đó với nhau: muốn thiên về xử lý nhỏ và mặt trình bày thì dùng Excel, còn muốn quan tâm dữ lượng lớn và mối quan hệ logic nội tại của chúng thì dùng QLy CSDL như SQL (với các công cụ tương ứng Access, còn ADO chỉ là công cụ để liên hết thôi ......)

---------------
ah, tôi bấm cám ơn bài viết trên của bạn vì: Sự nhiệt thích thú, ham tìm hiểu, thắc mắc của bạn về học thuật như bạn viết
 
Lần chỉnh sửa cuối:
Nhờ giúp đở

Chào các Pro
mình hiện tại có 2 file Excel và Access muốn liên kế dữ liệu qua lại với nhau nhưng chua biết cách viết hàm qua lại nên nhờ các Pro giúp mình với nhé

1- ở file Excel có 2 nút lệnh
nút 1 thì dùng để update dữ liệu từ Access qua Excel
Nút 2 thì dùng để update dữ liệu từ Excel qua Access

2- ở file Access cũng có 2 lệnh tương tự.

mình mới tập sự loay hoay mãi mà chưa được nên qua đây nhờ các Pro chỉ bảo giúp!

thanks!
 

File đính kèm

  • KetNoi AE.zip
    37.1 KB · Đọc: 28
Lần chỉnh sửa cuối:
Chào các Pro
mình hiện tại có 2 file Excel và Access muốn liên kế dữ liệu qua lại với nhau nhưng chua biết cách viết hàm qua lại nên nhờ các Pro giúp mình với nhé

1- ở file Excel có 2 nút lệnh
nút 1 thì dùng để update dữ liệu từ Access qua Excel
Nút 2 thì dùng để update dữ liệu từ Excel qua Access

2- ở file Access cũng có 2 lệnh tương tự.

mình mới tập sự loay hoay mãi mà chưa được nên qua đây nhờ các Pro chỉ bảo giúp!

thanks!

Bạn nên đọc bài sau trước
[h=1]ADO căn bản: Kết nối truy vấn CSDL từ file Excel đến file Access.[/h]
 
Chào các Pro
mình hiện tại có 2 file Excel và Access muốn liên kế dữ liệu qua lại với nhau nhưng chua biết cách viết hàm qua lại nên nhờ các Pro giúp mình với nhé

1- ở file Excel có 2 nút lệnh
nút 1 thì dùng để update dữ liệu từ Access qua Excel
Nút 2 thì dùng để update dữ liệu từ Excel qua Access

2- ở file Access cũng có 2 lệnh tương tự.

mình mới tập sự loay hoay mãi mà chưa được nên qua đây nhờ các Pro chỉ bảo giúp!

thanks!

Làm luôn cho bạn câu 1, còn câu 2 bạn tự nghiên cứu nhé.

- Code lấy dữ liệu trong bảng [TB hang hoa] của file Access có đường dẫn là chung 1 folder với file Excel chạy code này.

[GPECODE=sql]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")
strCNString = "Data Source=" & ThisWorkbook.Path & "\Data.mdb"
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

[/GPECODE]

- Code cập nhật dữ liệu trong bảng [TB hang hoa] của file Access có đường dẫn là chung 1 folder với file Excel chạy code này.

[GPECODE=sql]Sub HLMT_Update()
On Error GoTo loi
Set Cn = CreateObject("ADODB.Connection")
Dim mySQL As String
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=" & ThisWorkbook.Path & "\Data.mdb"
.CursorLocation = adUseClient
.Open
.Execute mySQL
.Close
End With
Set Cn = Nothing
Exit Sub
loi:
MsgBox Err.Description

End Sub

[/GPECODE]

*) Tải file về, giải nén và chạy code ở file excel nhé.
 

File đính kèm

  • KetNoi AE.rar
    34 KB · Đọc: 64
Cảm ơn bạn đã giúp mình nhé thực sự mình rất gà về vấn đề này bạn có thể giúp luôn mình không để mình học theo cách viết của bạn để học hỏi thêm chứ bảo mình nghiên cứu chắc còn khuya mới ra!

thật sự cảm ơn bạn!
 
Cảm ơn bạn đã giúp mình nhé thực sự mình rất gà về vấn đề này bạn có thể giúp luôn mình không để mình học theo cách viết của bạn để học hỏi thêm chứ bảo mình nghiên cứu chắc còn khuya mới ra!

thật sự cảm ơn bạn!

1./ Code lấy dữ liệu từ Excel sang Access:

Mã:
Private Sub cmdLayDuLieu_Click()
With DoCmd
    .SetWarnings (False)
    .RunSQL "Delete * from [TB hang hoa]"
    .TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, _
        "TB hang hoa", CurrentProject.Path & "\Vi du.xls", True, "B4:G18"
     Me.RecordSource = "TB hang hoa"
    .SetWarnings (True)
End With

End Sub

2./ Code cập nhật dữ liệu từ Excel sang bảng Access:

Mã:
Private Sub cmdCapNhat_Click()
With DoCmd
    .SetWarnings (False)
    sSQL = "UPDATE [TB hang hoa] b " _
      & "RIGHT JOIN " _
      & "[Excel 8.0;HDR=YES;IMEX=2;DATABASE=" & CurrentProject.Path & "\Vi du.xls].[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"
    .RunSQL sSQL
    Me.RecordSource = "TB hang hoa"
    .SetWarnings (True)
End With

End Sub
 

File đính kèm

  • KetNoi AE.rar
    38.3 KB · Đọc: 53
Cảm ơn bạn đã giup mình định hỏi thêm nhờ bạn làm giúp mình làm 1 file excel va access nhưng lại sợ mình đòi hỏi quá nhiều nên thôi lúc khác nhờ bạn làm tiếp vậy cảm ơn nhiều nhé bạn!

à bạn ơi cho mình hỏi với nếu đuôi của Access 2007 là accdb thì sửa lại khai báo file trên là sao bạn nhờ bạn chỉ giúp mình nhé!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Nhờ bạn giúp hộ nhé

Tình hình là thế này
mình có 1 file access và 1 file excel liên kết qua lại nhưng vì một số lý do nào đó mình cần báo cáo đi bằng file excel nên phải lấy dữ liệu qua excel để báo cáo nhưng mổi lần lấy rất cực.
mình muốn khi báo cáo đi mình chỉ việc thực hiện gỏ ngày cần tìm thì tự đọng nó sẽ lọc giúp mình số lượng thống kê xuất nhận tồn của những ngày đó. mình vào đây nhờ các pro chỉ giáo hộ mình

chi tiết cụ thể trong file dính kèm mình có minh họa!
 

File đính kèm

  • KetNoi AE.zip
    77.8 KB · Đọc: 36
Tình hình là thế này
mình có 1 file access và 1 file excel liên kết qua lại nhưng vì một số lý do nào đó mình cần báo cáo đi bằng file excel nên phải lấy dữ liệu qua excel để báo cáo nhưng mổi lần lấy rất cực.
mình muốn khi báo cáo đi mình chỉ việc thực hiện gỏ ngày cần tìm thì tự đọng nó sẽ lọc giúp mình số lượng thống kê xuất nhận tồn của những ngày đó. mình vào đây nhờ các pro chỉ giáo hộ mình

chi tiết cụ thể trong file dính kèm mình có minh họa!

Nó đâu có ăn nhập gì đến những thắc mắc trên đâu bạn?
 
Ý mình là thế này
mình muốn lọc dữ liêu từ trong 2 table
để lấy kết quả báo cáo xuất nhập tồn báo đi
bằng excel
bạn có thể giúp mình không?
 
Ý mình là thế này
mình muốn lọc dữ liêu từ trong 2 table
để lấy kết quả báo cáo xuất nhập tồn báo đi
bằng excel
bạn có thể giúp mình không?

Bạn tạo Query trong file Access của bạn đi rồi gửi cái chuổi SQL đó lên đây nhé.
 
Web KT
Back
Top Bottom