Đố vui về ADO, DAO.

Liên hệ QC
Xin chào tất cả các bạn yêu thích, đã và đang sử dụng công cụ ADO.
Hôm nay mình có một câu đố vui thế này :
* Giả sử mình tạo một foder có tên là : YESTERDAY-TODAY;NOW
* Trong folder trên có 1 file excel có gán 1 đoạn code sau :
Mã:
Sub test()
    With [B]CreateObject("ADODB.Connection")[/B]
        .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & [B]ThisWorkbook.FullName[/B] & _
                                    ";Extended Properties=""Excel 12.0;HDR=No;"";"
        .Open
    End With
    Set cnn = Nothing
End Sub
* Câu hỏi là : Làm sao để sub test() hoạt động được !

Cảm ơn mọi người đã tham gia !
Thêm 2 cái dấu nháy phải không bạn?
 
Thêm 2 cái dấu nháy phải không bạn?
chính xác!
trong chuỗi connectionstring ở trên thiếu 2 dấu nháy !
mà bạn trả lời nhanh quá --=0, câu hỏi tiếp theo dành cho các thành viên có huy hiệu < 1 sao cứng :
* Bây giờ cũng trong folder YESTERDAY-TODAY;NOW , có 1 file ACCSES : A.mdb
* Câu hỏi đặt ra : ta sẽ phải chính sửa chuỗi connectionstring ở trên như thế nào ? để có thể kết nối đến file A.mdb !

Cảm ơn mọi người đã tham gia !
 
chính xác!
trong chuỗi connectionstring ở trên thiếu 2 dấu nháy !
mà bạn trả lời nhanh quá --=0, câu hỏi tiếp theo dành cho các thành viên có huy hiệu < 1 sao cứng :
* Bây giờ cũng trong folder YESTERDAY-TODAY;NOW , có 1 file ACCSES : A.mdb
* Câu hỏi đặt ra : ta sẽ phải chính sửa chuỗi connectionstring ở trên như thế nào ? để có thể kết nối đến file A.mdb !

Cảm ơn mọi người đã tham gia !
Nói 2 cái dấu nháy mà không nói rõ ở đâu thì ai biết thêm ở đâu chứ. Lỡ như thêm nháy thế này
& 'ThisWorkbook.FullName' & thì chắc khóc quá

Mình 4 sao cứng kìa mà hỏng biết đường trả lời huống chi ép < 1 sao cứng thì ế cho chết luôn
 
Nói 2 cái dấu nháy mà không nói rõ ở đâu thì ai biết thêm ở đâu chứ. Lỡ như thêm nháy thế này
& 'ThisWorkbook.FullName' & thì chắc khóc quá

Mình 4 sao cứng kìa mà hỏng biết đường trả lời huống chi ép < 1 sao cứng thì ế cho chết luôn
Với khả năng mình biết lỗi ConnectString là do tên folder đặt trùng với ký hiệu bắt buộc của câu lệnh connect đó là dấu ";' nếu folder đặt tên không trùng ký hiệu đó thì lệnh connect vẫn bình thường không có gì thay đổi.
Nếu sửa lại chính xác thì là vày
[GPECODE=vb]
Sub test()
With CreateObject("ADODB.Connection")
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & ThisWorkbook.FullName & "';Extended Properties=""Excel 12.0;HDR=No;"";"
.Open
End With
'Set cnn = Nothing
End Sub
[/GPECODE]
Tức là thêm 1 dấu nháy ' trong Data Source='" và 1 dấu nháy "';Extended. Trong đoạn sub không có biến cnn nên bỏ đi nếu có thì set cnn = nothing
 
Với khả năng mình biết lỗi ConnectString là do tên folder đặt trùng với ký hiệu bắt buộc của câu lệnh connect đó là dấu ";' nếu folder đặt tên không trùng ký hiệu đó thì lệnh connect vẫn bình thường không có gì thay đổi.
Nếu sửa lại chính xác thì là vày
[GPECODE=vb]
Sub test()
With CreateObject("ADODB.Connection")
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & ThisWorkbook.FullName & "';Extended Properties=""Excel 12.0;HDR=No;"";"
.Open
End With
'Set cnn = Nothing
End Sub
[/GPECODE]
Tức là thêm 1 dấu nháy ' trong Data Source='" và 1 dấu nháy "';Extended. Trong đoạn sub không có biến cnn nên bỏ đi nếu có thì set cnn = nothing
Có tí cơ bản về ADO thì nhìn vào là biết liền. Chủ topic gài bẫy thôi mà. Tại vì bài 142 la lên là chính xác mà không nói cho nháy vào chỗ nào strong câu lệnh SQL nên mình chọt cho vui
Quy định của ADO là vậy mà. Số thì không cần bao bọc, text thì bao bằng 2 dấu nháy đơn, ngày thì bao bằng dấu #
 
Có tí cơ bản về ADO thì nhìn vào là biết liền. Chủ topic gài bẫy thôi mà. Tại vì bài 142 la lên là chính xác mà không nói cho nháy vào chỗ nào strong câu lệnh SQL nên mình chọt cho vui
Quy định của ADO là vậy mà. Số thì không cần bao bọc, text thì bao bằng 2 dấu nháy đơn, ngày thì bao bằng dấu #

Tự nhiên thấy nhớ anh Hai Lúa nên đố vui cho đỡ nhớ thôi !
 
Tự nhiên thấy nhớ anh Hai Lúa nên đố vui cho đỡ nhớ thôi !
Dạo này thấy ít người dùng ADO thì phải có lẽ nó hơi khó nhớ cầu lệnh nên ít viết, ADO, DAO luôn mạnh trong việc tổng hợp số liệu nếu ta khai thác chúng đúng cách
Quy định của ADO là vậy mà. Số thì không cần bao bọc, text thì bao bằng 2 dấu nháy đơn, ngày thì bao bằng dấu #
Vì vây tốt nhất nên bao text lại = 2 dấu nháy là an toàn
Lâu rồi không thấy anh Hai Lúa ra câu đố về ADO chắc ít người tham gia nên anh Đỏm buồn --=0 (Ai biểu ra câu đố khó quá mà)
 
Dạo này thấy ít người dùng ADO thì phải có lẽ nó hơi khó nhớ cầu lệnh nên ít viết, ADO, DAO luôn mạnh trong việc tổng hợp số liệu nếu ta khai thác chúng đúng cách

Vì vây tốt nhất nên bao text lại = 2 dấu nháy là an toàn
Lâu rồi không thấy anh Hai Lúa ra câu đố về ADO chắc ít người tham gia nên anh Đỏm buồn --=0 (Ai biểu ra câu đố khó quá mà)
Khi sử dụng các truy vấn SQL thì thường người dùng nghĩ tới Access, có lẽ đó cũng là một lý do khiến ADO ít phổ biến trong Excel.
Và qua các bài cơ bản tại topic này, các bài viết của anh HLMT, các bạn hungpecc1, bạn mnhung49... hy vọng mình sẽ tiến bộ hơn nữa ^^.
 
Khi sử dụng các truy vấn SQL thì thường người dùng nghĩ tới Access, có lẽ đó cũng là một lý do khiến ADO ít phổ biến trong Excel.
Và qua các bài cơ bản tại topic này, các bài viết của anh HLMT, các bạn hungpecc1, bạn mnhung49... hy vọng mình sẽ tiến bộ hơn nữa ^^.
Mình cũng như các bạn chủ yếu học hỏi từ anh Hai Lúa, cố gắng hiểu câu lệnh SQL, các câu truy vấn nếu ai biết sơ về Access sẽ học dễ hơn mau tiếp thu vì các câu truy vấn giống trong Access là chủ yếu, lâu rồi không đụng lại SQL nên thấy cũng nhớ nhớ --=0
 
Với khả năng mình biết lỗi ConnectString là do tên folder đặt trùng với ký hiệu bắt buộc của câu lệnh connect đó là dấu ";' nếu folder đặt tên không trùng ký hiệu đó thì lệnh connect vẫn bình thường không có gì thay đổi.
Nếu sửa lại chính xác thì là vày
[GPECODE=vb]
Sub test()
With CreateObject("ADODB.Connection")
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & ThisWorkbook.FullName & "';Extended Properties=""Excel 12.0;HDR=No;"";"
.Open
End With
'Set cnn = Nothing
End Sub
[/GPECODE]
Tức là thêm 1 dấu nháy ' trong Data Source='" và 1 dấu nháy "';Extended. Trong đoạn sub không có biến cnn nên bỏ đi nếu có thì set cnn = nothing

Vậy nếu ta không dùng dấu nháy (') thì làm sao cho nó chạy?
 
Vậy nếu ta không dùng dấu nháy (') thì làm sao cho nó chạy?
Vầy chắc được
PHP:
Sub test()
Dim duongdan As String
duongdan = ThisWorkbook.FullName
    With CreateObject("ADODB.Connection")
        .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= duongdan  ;Extended Properties=""Excel 12.0;HDR=No;"";"
        .Open
    End With
    'Set cnn = Nothing
End Sub
 
Vầy chắc được
PHP:
Sub test()
Dim duongdan As String
duongdan = ThisWorkbook.FullName
    With CreateObject("ADODB.Connection")
        .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= duongdan  ;Extended Properties=""Excel 12.0;HDR=No;"";"
        .Open
    End With
    'Set cnn = Nothing
End Sub

Code chạy không lỗi những nó không kết nối với Book1, nói chung là không phải vậy, em cũng chưa tìm ra chắc format hay sao đó
 
Code chạy không lỗi những nó không kết nối với Book1, nói chung là không phải vậy, em cũng chưa tìm ra chắc format hay sao đó
Mình chưa test vào file nhưng cũng nghi nghi rồi, té ra là không thể kết nối. Để xem xem coi sao.
Tại vì HLMT hỏi làm sao cho chạy thôi. Hic
 
Dùng kết nối với tham số. Tại các bạn quen dùng chuỗi kết nối chứ trên thực tế, khi kết nối không đơn giản thì người ta dùng tham số dễ kiểm soát hơn:

Mã:
With Cnn
  .Provider = IIF(Application.Version=12, "...", "...")
  .Properties("Data Source") = filePath
  .Properties("Extended Properties) = IIF(Application.Version=12, "...", "...")
  .Open
End With

tb. bài #140 của hungpec1 dừng lại ngay sau khi kết nối, chứ chưa hề đá động đến truy vấn. Cho nên ở đây ta chỉ nói về kết nối và chuỗi kết nối. Kết nối không liên quan gì đến SQL cả. Bạn nào nói SQL là sai.
Sau khi có kết nối rồi người ta mới gởi một lệnh SQL vào kết nối để truy vấn dữ liệu. Tuỳ theo loại máy lúc kết nối mà cách viết lệnh SQL có thể khác nhau. Tuy SQL là môt ngôn ngữ tiêu chuẩn nhưng mỗi cổ máy có thể thêm thắt một chút để tăng hiệu quả.
 
Lâu quá không ai tham gia đề tài này, hôm nay mình gửi câu đố đơn giản như sau:

1.jpg

==> Tôi viết câu truy vấn như thế nào sẽ cho ra kết quả như trên.
 

File đính kèm

  • De_DongTongCong_ADO.xls
    31 KB · Đọc: 43
Lần chỉnh sửa cuối:
Lâu quá không ai tham gia đề tài này, hôm nay mình gửi câu đố đơn giản như sau:

View attachment 129230

==> Tôi viết câu truy vấn như thế nào sẽ cho ra kết quả như trên.
Đợi thêm người tham gia cùng Topic nhưng chưa có ai nên em lại nộp bài đầu tiên anh Hai Lúa Miền Tấy nhé.

Mã:
Sub Tonghop()
    Dim cnn As Object, rst As Object, lSQL As String
    Set cnn = CreateObject("ADODB.Connection")
    Set rst = CreateObject("ADODB.recordset")
    Filename = Application.ThisWorkbook.FullName
    If Val(Application.Version) < 12 Then
        With cnn
            .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Filename & ";" & _
                                "Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"
            .Open
        End With
    Else
        With cnn
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Filename & ";" & _
                                "Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"
            .Open
        End With
    End If
    lSQL = "Select F2,F3,F4,F5,F6 From " _
         & "(Select F2,F3,F4,F5,F6 from " _
         & "(Select F2,F3,F4,F5,F6,F2 as o " _
         & "From [Dovui$A2:F16] as a " _
         & " Union all " _
         & "Select '',f3 & ' Total','',Sum(F5),Sum(F6),'' " _
         & "From [Dovui$A2:F16] as a " _
         & "Group by F3) as a) " _
         & "Union all " _
         & "Select '','zGrand Total:','',Sum(F5),Sum(F6) " _
         & "From [Dovui$A2:F16]" _
         & "Order by f3,f2"
    rst.Open lSQL, cnn, 3, 1
    Sheet1.[J2:N65536].CurrentRegion.ClearContents
    Sheet2.[J2].CopyFromRecordset rst
    rst.Close: Set rst = Nothing
    cnn.Close: Set cnn = Nothing
End Sub
 
Đợi thêm người tham gia cùng Topic nhưng chưa có ai nên em lại nộp bài đầu tiên anh Hai Lúa Miền Tấy nhé.

Mã:
Sub Tonghop()
    Dim cnn As Object, rst As Object, lSQL As String
    Set cnn = CreateObject("ADODB.Connection")
    Set rst = CreateObject("ADODB.recordset")
    Filename = Application.ThisWorkbook.FullName
    If Val(Application.Version) < 12 Then
        With cnn
            .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Filename & ";" & _
                                "Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"
            .Open
        End With
    Else
        With cnn
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Filename & ";" & _
                                "Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"
            .Open
        End With
    End If
    lSQL = "Select F2,F3,F4,F5,F6 From " _
         & "(Select F2,F3,F4,F5,F6 from " _
         & "(Select F2,F3,F4,F5,F6,F2 as o " _
         & "From [Dovui$A2:F16] as a " _
         & " Union all " _
         & "Select '',f3 & ' Total','',Sum(F5),Sum(F6),'' " _
         & "From [Dovui$A2:F16] as a " _
         & "Group by F3) as a) " _
         & "Union all " _
         & "Select '','zGrand Total:','',Sum(F5),Sum(F6) " _
         & "From [Dovui$A2:F16]" _
         & "Order by f3,f2"
    rst.Open lSQL, cnn, 3, 1
   [COLOR=#ff0000] Sheet1[/COLOR].[J2:N65536].CurrentRegion.ClearContents
   [COLOR=#ff0000] Sheet2[/COLOR].[J2].CopyFromRecordset rst
    rst.Close: Set rst = Nothing
    cnn.Close: Set cnn = Nothing
End Sub

Đúng rồi bạn à, Không làm khó được bạn rồi.
 
Lần chỉnh sửa cuối:
Nhân viên Lê Đức Trí có mã NV khác và cũng thuộc phòng khác vậy các bác (trùng tên khác mâ số và phòng)
vậy các bác làm sao?__--__
Đó chỉ là ví dụ, trong thực tế ta phải uyển chuyển để phù hợp với nhu cầu. Trường hợp bạn đưa ra nằm trong cái uyển chuyển đó.
 
Web KT
Back
Top Bottom