Bài tập về ADO căn bản.

Liên hệ QC
Làm chi cho nó lòng vòng vậy anh? sao ta không xác định luôn ngay từ đầu cái vùng đó rồi gán xuống luôn?
Em biết vậy, nhưng hỏi để biết các trường hợp xảy ra vì đang học mà anh
Anh cho biết thêm các cấu trúc tương tự như SELECT, hoặc ra bài tập đơn giản tiếp theo nhé
Cảm ơn Anh.
 
Em biết vậy, nhưng hỏi để biết các trường hợp xảy ra vì đang học mà anh
Anh cho biết thêm các cấu trúc tương tự như SELECT, hoặc ra bài tập đơn giản tiếp theo nhé
Cảm ơn Anh.
Select còn nhiều trường hợp, ta đi từ từ nhé.
Dùng câu lệnh select kết hợp với điều kiện lọc là Where
[GPECODE=sql]Select TenCot
From TenBang
Where TenCot TenDkLoc GiaTriDKLoc[/GPECODE]

Vui lòng xem thêm http://www.giaiphapexcel.com/forum/...ile-Excel-đến-file-Access&p=427955#post427955

Bài Tập 2: =>Ở file B.xls ta kết nối và lấy dữ liệu từ sheet Data của file A.xls với điều kiện là thứ tự cột (GhiChu>TEN>STT>SoLuong) + lọc cột GhiChu là những dòng có 'x'. Xin xem kết quả ở hình bên dưới.

32.jpg

paperclip.png
Tập tin đính kèm
 
Select còn nhiều trường hợp, ta đi từ từ nhé.
Dùng câu lệnh select kết hợp với điều kiện lọc là Where
[GPECODE=sql]Select TenCot
From TenBang
Where TenCot TenDkLoc GiaTriDKLoc[/GPECODE]

Vui lòng xem thêm http://www.giaiphapexcel.com/forum/...ile-Excel-đến-file-Access&p=427955#post427955

Bài Tập 2: =>Ở file B.xls ta kết nối và lấy dữ liệu từ sheet Data của file A.xls với điều kiện là thứ tự cột (GhiChu>TEN>STT>SoLuong) + lọc cột GhiChu là những dòng có 'x'. Xin xem kết quả ở hình bên dưới.

View attachment 95057

paperclip.png
Tập tin đính kèm
Ha, ha tư duy theo thứ tự đề ra được ngay liền à
[GPECODE=vb]Sub Trich_ADO()
Dim lsSQL As String, cnn As Object, lrs As Object
Set cnn = CreateObject("ADODB.Connection")
Set lrs = CreateObject("ADODB.Recordset")
With cnn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.Path & "\A.xls" & _
";Extended Properties=""Excel 8.0;HDR=Yes;"";"
.Open
End With
lsSQL = "SELECT GhiChu, TEN, STT, SoLuong FROM [Data$] " & _
"WHERE GhiChu = 'x'"
lrs.Open lsSQL, cnn, 3, 1
Range("A2").CopyFromRecordset lrs
lrs.Close: Set lrs = Nothing
cnn.Close: Set cnn = Nothing

End Sub
[/GPECODE]
Kể cả 2 điều kiện lọc em cũng đã "Vọc" thử bằng cách thay lsSQL như sau
[GPECODE=vb] lsSQL = "SELECT GhiChu, TEN, STT, SoLuong FROM [Data$] " & _
"WHERE SoLuong >5 AND GhiChu ='x'"


[/GPECODE]
 
Lần chỉnh sửa cuối:
Ha, ha tư duy theo thứ tự đề ra được ngay liền à
[GPECODE=vb]Sub Trich_ADO()
Dim lsSQL As String, cnn As Object, lrs As Object
Set cnn = CreateObject("ADODB.Connection")
Set lrs = CreateObject("ADODB.Recordset")
With cnn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.Path & "\A.xls" & _
";Extended Properties=""Excel 8.0;HDR=Yes;"";"
.Open
End With
lsSQL = "SELECT GhiChu, TEN, STT, SoLuong FROM [Data$] " & _
"WHERE GhiChu = 'x'"
lrs.Open lsSQL, cnn, 3, 1
Range("A2").CopyFromRecordset lrs
lrs.Close: Set lrs = Nothing
cnn.Close: Set cnn = Nothing

End Sub
[/GPECODE]
Kể cả 2 điều kiện lọc em cũng đã "Vọc" thử bằng cách thay lsSQL như sau
[GPECODE=vb] lsSQL = "SELECT GhiChu, TEN, STT, SoLuong FROM [Data$] " & _
"WHERE SoLuong >5 AND GhiChu ='x'"


[/GPECODE]
Anh trả lời rất nhanh, nhìn code thấy đúng yêu cầu. Nhưng anh nên xóa dữ liệu sheet đích trước khi ghi kết quả nhé.
Bổ sung bài tập 2: Lấy dòng tiêu đề cột ghi vào sheet kết quả = ado
 
Anh trả lời rất nhanh, nhìn code thấy đúng yêu cầu. Nhưng anh nên xóa dữ liệu sheet đích trước khi ghi kết quả nhé.
Bổ sung bài tập 2: Lấy dòng tiêu đề cột ghi vào sheet kết quả = ado
Em đang suy nghĩ điều này thì Anh đã ra đề
Em làm như sau nhưng không biết sao tiêu đề 2 cột cuối không xuất dữ liệu Anh giải thích thêm giúp em nhé
[GPECODE=vb]Sub Trich_ADO()
Dim lsSQL As String, cnn As Object, lrs As Object
Set cnn = CreateObject("ADODB.Connection")
Set lrs = CreateObject("ADODB.Recordset")
With cnn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.Path & "\A.xls" & _
";Extended Properties=""Excel 8.0;HDR=No;"";"
.Open
End With
lsSQL = "SELECT f4, f2, f1, f3 FROM [Data$] " & _
"WHERE f4= 'GhiChu' OR f4 ='x'"


lrs.Open lsSQL, cnn, 3, 1
[a:d].Clear
Range("A1").CopyFromRecordset lrs
lrs.Close: Set lrs = Nothing
cnn.Close: Set cnn = Nothing

End Sub


[/GPECODE]
 
Em đang suy nghĩ điều này thì Anh đã ra đề
Em làm như sau nhưng không biết sao tiêu đề 2 cột cuối không xuất dữ liệu Anh giải thích thêm giúp em nhé
[GPECODE=vb]Sub Trich_ADO()
Dim lsSQL As String, cnn As Object, lrs As Object
Set cnn = CreateObject("ADODB.Connection")
Set lrs = CreateObject("ADODB.Recordset")
With cnn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.Path & "\A.xls" & _
";Extended Properties=""Excel 8.0;HDR=No;"";"
.Open
End With
lsSQL = "SELECT f4, f2, f1, f3 FROM [Data$] " & _
"WHERE f4= 'GhiChu' OR f4 ='x'"


lrs.Open lsSQL, cnn, 3, 1
[a:d].Clear
Range("A1").CopyFromRecordset lrs
lrs.Close: Set lrs = Nothing
cnn.Close: Set cnn = Nothing

End Sub


[/GPECODE]

Không phải thế anh à, phải chọn HDR = Yes, trong code anh phải dùng 1 vòng lặp duyệt qua các tiêu đề cột, sau đó gán cái tiêu đề cột đó xuống sheet.
 
Không phải thế anh à, phải chọn HDR = Yes, trong code anh phải dùng 1 vòng lặp duyệt qua các tiêu đề cột, sau đó gán cái tiêu đề cột đó xuống sheet.
Vậy như thế này thì không còn sai nữa nhỉ
[GPECODE=vb]Sub Trich_ADO()
Dim lsSQL As String, cnn As Object, lrs As Object
Set cnn = CreateObject("ADODB.Connection")
Set lrs = CreateObject("ADODB.Recordset")
With cnn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.Path & "\A.xls" & _
";Extended Properties=""Excel 8.0;HDR=Yes;"";"
.Open
End With
lsSQL = "SELECT GhiChu, TEN, STT, SoLuong FROM [Data$] " & _
"WHERE GhiChu= 'x'"
lrs.Open lsSQL, cnn, 3, 1
[a:d].Clear
For i = 1 To lrs.fields.Count
Cells(1, i).Value = lrs.fields(i - 1).Name
Next
Range("A2").CopyFromRecordset lrs
lrs.Close: Set lrs = Nothing
cnn.Close: Set cnn = Nothing
End Sub


[/GPECODE]
 
[TIP]Bổ sung thêm bài tập 2[/TIP]

[GPECODE=sql]Select TenCot
From TenBang
Where DKLoc
Order By TenCotCanSapXep KieuSapXep[/GPECODE]
Cũng tương tự như trên ta lọc lấy ra những dòng với cột GhiChu không có đáng 'x', sắp xếp dữ liệu cột SoLuong theo thứ tự giảm dần.

Lưu ý: Không hiển thị cột GhiChu vào bảng tính.
 
Lần chỉnh sửa cuối:
[TIP]Bổ sung thêm bài tập 2[/TIP]

[GPECODE=sql]Select TenCot
From TenBang
Where DKLoc
OrderBy TenCotCanSapXep KieuSapXep[/GPECODE]
Cũng tương tự như trên ta lọc lấy ra những dòng với cột GhiChu không có đáng 'x', sắp xếp dữ liệu cột SoLuong theo thứ tự giảm dần.

Lưu ý: Không hiển thị cột GhiChu vào bảng tính.
Cũng tương tự như trên ta lọc lấy ra những dòng với cột GhiChu không có đáng 'x' thôi (chưa nói đến sắp xếp) em thay câu lệnh
[GPECODE=vb] lsSQL = "SELECT GhiChu, TEN, STT, SoLuong FROM [Data$] " & _
"WHERE GhiChu= 'x'"[/GPECODE]
Bằng
[GPECODE=vb] lsSQL = "SELECT GhiChu, TEN, STT, SoLuong FROM [Data$] " & _

"WHERE GhiChu= ''"
[/GPECODE]
 
Cũng tương tự như trên ta lọc lấy ra những dòng với cột GhiChu không có đáng 'x' thôi (chưa nói đến sắp xếp) em thay câu lệnh
[GPECODE=vb] lsSQL = "SELECT GhiChu, TEN, STT, SoLuong FROM [Data$] " & _
"WHERE GhiChu= 'x'"[/GPECODE]
Bằng
[GPECODE=vb] lsSQL = "SELECT GhiChu, TEN, STT, SoLuong FROM [Data$] " & _

"WHERE GhiChu= ''"
[/GPECODE]

Chưa được đâu anh, anh thử lại nhé và anh xem:

Lưu ý Không hiển thị cột GhiChu vào bảng tính.
 
Chưa được đâu anh, anh thử lại nhé và anh xem:
Em loay hoay mãi với yêu cầu này "những dòng với cột GhiChu không có đáng 'x' " vẫn chưa được. Anh gợi ý cho em xem vì sao đùng "WHERE GhiChu = 'x'" hoặc"WHERE GhiChu <> ''" thì được
Còn "WHERE GhiChu = ''" thì lại không được nhỉ
 
Em loay hoay mãi với yêu cầu này "những dòng với cột GhiChu không có đáng 'x' " vẫn chưa được. Anh gợi ý cho em xem vì sao đùng "WHERE GhiChu = 'x'" hoặc"WHERE GhiChu <> ''" thì được
Còn "WHERE GhiChu = ''" thì lại không được nhỉ
Còn yêu cầu đề ra đại khái như thế này (tuy nhiên chưa được ý trên)
[GPECODE=vb] lsSQL = "SELECT TEN, STT, SoLuong FROM [Data$] " & _
"WHERE GhiChu = ''" & _
"ORDER BY SoLuong DESC"[/GPECODE]
 
Em loay hoay mãi với yêu cầu này "những dòng với cột GhiChu không có đáng 'x' " vẫn chưa được. Anh gợi ý cho em xem vì sao đùng "WHERE GhiChu = 'x'" hoặc"WHERE GhiChu <> ''" thì được
Còn "WHERE GhiChu = ''" thì lại không được nhỉ

Đơn giản nếu không cho hiển thị cột ghi chú vào bảng tính thì ở trên anh không select cột GhiChu. Còn where thì anh có thể cho vào điều kiện là :

Xin nói thêm:
  1. Is null là dòng dữ liệu bị trống.
  2. Is not null là dòng dữ liệu không trống.
Nó sẽ giúp ích rất nhiều cho anh sau này đó.
Anh thử nhé.
 
Đơn giản nếu không cho hiển thị cột ghi chú vào bảng tính thì ở trên anh không select cột GhiChu. Còn where thì anh có thể cho vào điều kiện là :


Xin nói thêm:
  1. Is null là dòng dữ liệu bị trống.
  2. Is not null là dòng dữ liệu không trống.
Nó sẽ giúp ích rất nhiều cho anh sau này đó.
Anh thử nhé.
Vậy là câu lệnh
[GPECODE=vb] lsSQL = "SELECT TEN, STT, SoLuong FROM [Data$] " & _
"WHERE GhiChu is Null " & _
"ORDER BY SoLuong DESC"
[/GPECODE]
Giải được bài tập của Anh rồi chứ gì
Em test thử với NullString mà không được không ngờ nó là Null
Cảm ơn Anh rất nhiều.
 
Vậy là câu lệnh
[GPECODE=vb] lsSQL = "SELECT TEN, STT, SoLuong FROM [Data$] " & _
"WHERE GhiChu is Null " & _
"ORDER BY SoLuong DESC"
[/GPECODE]
Giải được bài tập của Anh rồi chứ gì
Em test thử với NullString mà không được không ngờ nó là Null
Cảm ơn Anh rất nhiều.
Câu trả lời của anh hoàn toàn chính xác, anh rất có khiếu về ado lại chịu khó test và học. Sau 1 thời gian em sẽ học ado lại từ anh.
Hôm nay chỉ đến đây, ngày mai mình sẽ tiếp tục. Mong anh hưởng ứng.
 
[TIP]Bài tập 3: Gán tên cho cột[/TIP]
Gán tên cột của 1 bảng:

Cú pháp:
[GPECODE=sql]SELECT TenCotCuTrongCSDL AS GanThanhTenMoi
FROM TenBang[/GPECODE]

Với Ví dụ csdl ở trên làm sao khi ta gán xuống sheet lần lượt có tên như sau:

  • STT Thay = ID
  • TEN thay = Name
  • SoLuong thay = Q'Ty
  • GhiChu thay = Remarks
 
Lần chỉnh sửa cuối:
[TIP]Bài tập 3: Gán tên cho cột[/TIP]
Gán tên cột của 1 bảng:

Cú pháp:
[GPECODE=sql]SELECT TenCotCuTrongCSDL AS GanThanhTenMoi
FROM TenBang[/GPECODE]

Với Ví dụ csdl ở trên làm sao khi ta gán xuống sheet lần lượt có tên như sau:

  • STT Thay = ID
  • TEN thay = Name
  • SoLuong thay = Q'Ty
  • GhiChu thay = Remarks
Cũng phải thử đủ mội cách theo cấu trúc đã gợi ý
Và kết quả như thế này đúng không Anh?
[GPECODE=vb] lsSQL = "SELECT STT as [ID], TEN as [Name], SoLuong as [Q'ty], GhiChu as [Remarks] " & _
"FROM [Data$] "
[/GPECODE]
Thử gán
[GPECODE=vb]Arr = Array("ID", "Name", "Q'ty", "Remarks")[/GPECODE]
Rồi dùng:
[GPECODE=vb] lsSQL = "SELECT STT, TEN, SoLuong, GhiChu as Arr " & _
"FROM [Data$] "
[/GPECODE]
Nhưng không được. Có giải pháp giải quyết theo hướng này được không Anh?
 
Lần chỉnh sửa cuối:
Cũng phải thử đủ mội cách theo cấu trúc đã gợi ý
Và kết quả như thế này đúng không Anh?
[GPECODE=vb] lsSQL = "SELECT STT as [ID], TEN as [Name], SoLuong as [Q'ty], GhiChu as [Remarks] " & _
"FROM [Data$] "
[/GPECODE]
Thử gán
[GPECODE=vb]Arr = Array("ID", "Name", "Q'ty", "Remarks")[/GPECODE]
Rồi dùng:
[GPECODE=vb] lsSQL = "SELECT STT, TEN, SoLuong, GhiChu as Arr " & _
"FROM [Data$] "
[/GPECODE]
Nhưng không được. Có giải pháp giải quyết theo hướng này được không Anh?

Câu đầu tiên là ok rồi đó anh, còn gán vào Arr thì phải như sau:

[GPECODE=sql] arr = Array("ID", "Name", "Q'ty", "Remarks")
lsSQL = "SELECT STT as " & arr(0) & " , TEN as " & arr(1) & " , SoLuong as [" & arr(2) & "] , GhiChu as " & arr(3) & _
" FROM [Data$] "

[/GPECODE]
 
Câu đầu tiên là ok rồi đó anh, còn gán vào Arr thì phải như sau:

[GPECODE=sql] arr = Array("ID", "Name", "Q'ty", "Remarks")
lsSQL = "SELECT STT as " & arr(0) & " , TEN as " & arr(1) & " , SoLuong as [" & arr(2) & "] , GhiChu as " & arr(3) & _
" FROM [Data$] "

[/GPECODE]
Vậy thì có hơn gì cách trên đâu Anh?
 
Web KT

Bài viết mới nhất

Back
Top Bottom