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

Liên hệ QC
[TIP]Bài Tập 4: Lấy dữ liệu duy nhất[/TIP]

Cú pháp:

[GPECODE=sql]SELECT DISTINCT TenCotCanLay
FROM TenBang[/GPECODE]

Với TenCotCanLay là tên các cột trong cơ sở dữ liệu mà ta muốn lấy dữ liệu.

[NOTE1]Với cơ sở dữ liệu như bên dưới anh, chị hãy:
  1. Lấy ra dữ liệu duy nhất các cột như sau: [TP],[MATERIAL NAME],[SPEC 2],[COLOR NAME],[UNIT], [ORIGIN],[SUPPLIER]
  2. Sắp xếp lại các cột trên theo thứ tự tăng dần.
[/NOTE1]
 

File đính kèm

  • Database.rar
    23.1 KB · Đọc: 153
[TIP]Bài Tập 4: Lấy dữ liệu duy nhất[/TIP]

Cú pháp:

[GPECODE=sql]SELECT DISTINCT TenCotCanLay
FROM TenBang[/GPECODE]

Với TenCotCanLay là tên các cột trong cơ sở dữ liệu mà ta muốn lấy dữ liệu.

[NOTE1]Với cơ sở dữ liệu như bên dưới anh, chị hãy:
  1. Lấy ra dữ liệu duy nhất các cột như sau: [TP],[MATERIAL NAME],[SPEC 2],[COLOR NAME],[UNIT], [ORIGIN],[SUPPLIER]
  2. Sắp xếp lại các cột trên theo thứ tự tăng dần.
[/NOTE1]
Cho em hỏi thêm:
1. Lấy duy nhất 1 cột nào đó, sao lại lấy duy nhất các cột?
2. Sắp xếp theo thứ tự tăng dần 1 cột hay nhiều cột, nếu nhiều cột phải có thứ tự ưu tiên
Trông có hơi khó nha
 
Cho em hỏi thêm:
1. Lấy duy nhất 1 cột nào đó, sao lại lấy duy nhất các cột?
2. Sắp xếp theo thứ tự tăng dần 1 cột hay nhiều cột, nếu nhiều cột phải có thứ tự ưu tiên
Trông có hơi khó nha

1. Lấy duy nhất dòng của các cột có tên như trên.
2. Sắp xếp tất cả các cột theo thứ tự như trên hoặc theo thứ tự như sau:
[TP],[ORIGIN],[SUPPLIER],[MATERIAL NAME],[SPEC 2],[COLOR NAME],[UNIT]
 
1. Lấy duy nhất dòng của các cột có tên như trên.
2. Sắp xếp tất cả các cột theo thứ tự như trên hoặc theo thứ tự như sau:
[TP],[ORIGIN],[SUPPLIER],[MATERIAL NAME],[SPEC 2],[COLOR NAME],[UNIT]
Anh kiểm tra xem đáp có đúng ý Anh không nhé
[GPECODE=vb]Sub Trich_ADO_Unique()
Dim lsSQL As String, cnn As Object, lrs As Object
Set cnn = CreateObject("ADODB.Connection")
Set lrs = CreateObject("ADODB.Recordset")
Dim Arr()
With cnn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.Path & "\Database.xls" & _
";Extended Properties=""Excel 8.0;HDR=Yes;"";"
.Open
End With
lsSQL = "SELECT DISTINCT [TP], [MATERIAL NAME], [SPEC 2], [COLOR NAME], [UNIT], [ORIGIN], [SUPPLIER] " & _
"FROM [tblData$] " & _
"ORDER BY [TP],[ORIGIN],[SUPPLIER],[MATERIAL NAME],[SPEC 2],[COLOR NAME],[UNIT]"
lrs.Open lsSQL, cnn, 3, 1
[a:g].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]
Trong có vẽ học kiểu này rất nhanh nhỉ. Cảm ơn Anh rất nhiều
 
Anh đã trả lời đúng chính xác theo yêu cầu.
Xin hỏi thêm là:
[NOTE1]Anh, chị hãy mở file Batabase lên rồi gõ cell nào đó tùy ý vào cột có dạng số là giá trị text nào đó, lưu lại:
  1. Hãy dùng câu lệnh select bình thường để chọn tất cả các cột có trong csdl, cho biết kết quả những cell có dạng text đó có xuất hiện hay không?
  2. Nếu không thì tại sao và cho biết cách khắc phục.
[/NOTE1]
 
Anh đã trả lời đúng chính xác theo yêu cầu.
Xin hỏi thêm là:
[NOTE1]Anh, chị hãy mở file Batabase lên rồi gõ cell nào đó tùy ý vào cột có dạng số là giá trị text nào đó, lưu lại:
  1. Hãy dùng câu lệnh select bình thường để chọn tất cả các cột có trong csdl, cho biết kết quả những cell có dạng text đó có xuất hiện hay không?
  2. Nếu không thì tại sao và cho biết cách khắc phục.
[/NOTE1]
1. Dữ liệu không xuất hiện
2. Để khắc phục sử dụng thêm: IMEX=1 cuối câu lệnh cnn.ConnectionString
 
1. Dữ liệu không xuất hiện
2. Để khắc phục sử dụng thêm: IMEX=1 cuối câu lệnh cnn.ConnectionString

Em xin nói thêm: Nếu sử dụng IMEX=1 thì nó sẽ lấy tất tần tật, nếu trong cột vừa dạng số vừa dạng text thì nó sẽ chuyển kiểu dữ liệu cột đó thành text, ngược lại nếu dùng IMEX=0 và 2 thì nó sẽ bỏ giá trị text mà chỉ lấy số.
 
Em xin nói thêm: Nếu sử dụng IMEX=1 thì nó sẽ lấy tất tần tật, nếu trong cột vừa dạng số vừa dạng text thì nó sẽ chuyển kiểu dữ liệu cột đó thành text, ngược lại nếu dùng IMEX=0 và 2 thì nó sẽ bỏ giá trị text mà chỉ lấy số.
Điều em muốn hỏi là trong cột dữ liệu vừa có định dạng số, vừa text nếu IMEX=1 thì lấy toàn bộ nhưng số vẫn chuyển thành text. Vậy làm sao để lấy được dữ liệu xuất ra vừa cả số, vừa cả text theo đúng định dạng csdl của nó
 
Điều em muốn hỏi là trong cột dữ liệu vừa có định dạng số, vừa text nếu IMEX=1 thì lấy toàn bộ nhưng số vẫn chuyển thành text. Vậy làm sao để lấy được dữ liệu xuất ra vừa cả số, vừa cả text theo đúng định dạng csdl của nó

Phải kết hợp VBA anh à, trong CSDL quy định kiểu dữ liệu của cả field (Cột), nên việc nhập liệu vừa số vừa text là không đúng chuẩn, nó sẽ hiểu là text.
 
Phải kết hợp VBA anh à, trong CSDL quy định kiểu dữ liệu của cả field (Cột), nên việc nhập liệu vừa số vừa text là không đúng chuẩn, nó sẽ hiểu là text.
Anh nói cụ thể hơn kết hợp như thế nào? chẳng lẻ duyệt hết dữ liệu lấy ra và chuyển sang định dạng số? như vậy tốc độ chắc là chậm
 
Anh nói cụ thể hơn kết hợp như thế nào? chẳng lẻ duyệt hết dữ liệu lấy ra và chuyển sang định dạng số? như vậy tốc độ chắc là chậm

Đâu cần duyệt qua từng cell anh, có nhiều cách để chuyển qua dạng số, ví dụ như *1, tạo cột phụ chuyển nó về value rồi xóa cột phụ... Em nghĩ Anh dư sức để làm.
 
[TIP]Bài tập 5: Chèn 1 mẫu tin vào cơ sở dữ liệu[/TIP]

1./ Cú pháp:

[GPECODE=sql]INSERT INTO [Tên Bảng] ([Cột 1], [Cột 2], ...,[Cột n])
VALUES (GiaTri_1, GiaTri_2, ...,GiaTri_n)[/GPECODE]

Lưu ý phần GiaTri:

  • Nhập ngày thì phải thêm # bao quanh ngày (VD:#15/06/1977#)
  • Nhập số thì chỉ ghi số, không cần thêm gì cả
  • Nhập dạng chuổi thì phải thêm dấu nháy bao quanh chuổi đó(VD: 'HLMT')

2./ Bài Tập:

[INFO1]Anh, chị hãy nhập liệu 1 mẫu tin sau vào cơ sở dữ liệu
  • ID=415
  • W_HDATE=10/01/2013
  • PONO=DW12WQ009
  • MATERIAL NAME=POLY ZIPPER #5
  • COLOR NAME=BEIGE
  • UNIT=M
  • SUPPLIER=HHH VIETNAM
[/INFO1]
 
[TIP]Bài tập 5: Chèn 1 mẫu tin vào cơ sở dữ liệu[/TIP]

1./ Cú pháp:

[GPECODE=sql]INSERT INTO [Tên Bảng] ([Cột 1], [Cột 2], ...,[Cột n])
VALUES (GiaTri_1, GiaTri_2, ...,GiaTri_n)[/GPECODE]

Lưu ý phần GiaTri:

  • Nhập ngày thì phải thêm # bao quanh ngày (VD:#15/06/1977#)
  • Nhập số thì chỉ ghi số, không cần thêm gì cả
  • Nhập dạng chuổi thì phải thêm dấu nháy bao quanh chuổi đó(VD: 'HLMT')
2./ Bài Tập:

[INFO1]Anh, chị hãy nhập liệu 1 mẫu tin sau vào cơ sở dữ liệu
  • ID=415
  • W_HDATE=10/01/2013
  • PONO=DW12WQ009
  • MATERIAL NAME=POLY ZIPPER #5
  • COLOR NAME=BEIGE
  • UNIT=M
  • SUPPLIER=HHH VIETNAM
[/INFO1]
Loay hiay mãi với code sau, nó chèn được dữ liệu nhưng với các code chèn dữ liệu dạng text bị lỗi nhưng chưa tim được nguyên nhân
[GPECODE=vb] Sub Insert_Data_ADO()
Dim lsSQL As String, cnn As Object, lrs As Object
Set cnn = CreateObject("ADODB.Connection")
Set lrs = CreateObject("ADODB.Recordset")
Dim Arr()
With cnn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.Path & "\Database.xls" & _
";Extended Properties=""Excel 8.0;HDR=Yes;"";"
.Open
End With
lsSQL = "INSERT INTO [tblData$] ([ID], [W_HDATE], [PONO], [MATERIAL NAME], [COLOR NAME], [UNIT], [SUPPLIER]) " & _
"VALUES (415, #1/10/2013#, 'DW12WQ009', 'POLY ZIPPER #5', 'BEIGE', 'M', 'HH VIETNAM')"
lrs.Open lsSQL, cnn, 3, 1
Set lrs = Nothing
cnn.Close: Set cnn = Nothing
End Sub
[/GPECODE]
Thử với IMEX=1 cũng không được
 
[info]ADO có thể ghi dữ liệu từ file đang mở vào file đang đóng cùng một Folder được không ạ? Ngoài ADO thì còn có cách nào khác không?
Em dùng code Bài tập 2 để lấy dữ liệu từ 1 file đang đóng thì được, nếu muốn lấy dữ liệu từ 2 file cùng Form thì có được hay không?
Xin cảm ơn ![/info]
 
[info]ADO có thể ghi dữ liệu từ file đang mở vào file đang đóng cùng một Folder được không ạ? Ngoài ADO thì còn có cách nào khác không?
Em dùng code Bài tập 2 để lấy dữ liệu từ 1 file đang đóng thì được, nếu muốn lấy dữ liệu từ 2 file cùng Form thì có được hay không?
Xin cảm ơn ![/info]
1. ADO có thể ghi dữ liệu từ file đang mở vào file đang đóng cùng một Folder được không ạ?
Câu hỏi này chính là Bài tập 5 đây bạn
2. nếu muốn lấy dữ liệu từ 2 file cùng Form thì có được hay không?
Ý của bạn cụ thể nhe thế nào?
 
1. ADO có thể ghi dữ liệu từ file đang mở vào file đang đóng cùng một Folder được không ạ?
Câu hỏi này chính là Bài tập 5 đây bạn
2. nếu muốn lấy dữ liệu từ 2 file cùng Form thì có được hay không?
Ý của bạn cụ thể nhe thế nào?
Hai file cùng 1 folder, cùng form (tiêu đề cột, số cột, chỉ khác dòng), đơn giản là chỉ coppy 2 sheet được chỉ định trong 2 file đang đóng vào 1 file đang mở.
 
Loay hiay mãi với code sau, nó chèn được dữ liệu nhưng với các code chèn dữ liệu dạng text bị lỗi nhưng chưa tim được nguyên nhân
[GPECODE=vb] Sub Insert_Data_ADO()
Dim lsSQL As String, cnn As Object, lrs As Object
Set cnn = CreateObject("ADODB.Connection")
Set lrs = CreateObject("ADODB.Recordset")
Dim Arr()
With cnn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.Path & "\Database.xls" & _
";Extended Properties=""Excel 8.0;HDR=Yes;"";"
.Open
End With
lsSQL = "INSERT INTO [tblData$] ([ID], [W_HDATE], [PONO], [MATERIAL NAME], [COLOR NAME], [UNIT], [SUPPLIER]) " & _
"VALUES (415, #1/10/2013#, 'DW12WQ009', 'POLY ZIPPER #5', 'BEIGE', 'M', 'HH VIETNAM')"
lrs.Open lsSQL, cnn, 3, 1
Set lrs = Nothing
cnn.Close: Set cnn = Nothing
End Sub
[/GPECODE]
Thử với IMEX=1 cũng không được
Em thấy kết quả của anh như thế là ok rồi mà. Đâu thấy xuất hiện lỗi gì đâu anh?

Hai file cùng 1 folder, cùng form (tiêu đề cột, số cột, chỉ khác dòng), đơn giản là chỉ coppy 2 sheet được chỉ định trong 2 file đang đóng vào 1 file đang mở.
Hoàn toàn có thể được em à, emm hãy đưa ví dụ nhé.
 
Web KT
Back
Top Bottom