Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Hỏi] Tạo forms tìm kiếm nhiều đối tượng với nhiều điều kiện khác nhau ?
#31
(21-06-13, 11:22 AM)Xuân Thanh Đã viết: Đề bài bạn yêu cầu : Ghi cái mã nào thì hiển thị cái mã đó. Trong CSDL không có mã MX thì làm sao thể hiện được? Nếu y/c khác thì phải thực hiện cách khác. Đây là cách đặt vấn đề không rõ ràng nên thế.

Dear Xuân Thanh,

Giờ mình sẽ mô tả công việc hiện tại của mình để bạn tiện chỉ dẫn.
Mình làm công việc quản lý tình hình mỹ phẩm của công ty. Công ty mẹ bên nước ngoài sẽ thường gởi thông tin các sản phẩm theo yêu cầu của công ty trong nước hoặc họ tự gởi nếu có gì mới hay thay đổi. Nhiệm vụ của mình là theo dõi dữ liệu. Khi sếp làm việc sếp bên nước ngoài quyết định tháng này bán cái gì, thì sẽ bảo kiểm tra thông tin có hay chưa, nếu chưa thì bảo nước ngoài gởi về.
Còn về phần dữ liệu thì một sản phẩm có nhiều code, có khi trùng nhau vì thế ý mình sẽ thiết kế một trường có tên là "hệ thống code" chứa toàn bộ code của một sản phẩm mỗi code sẽ cách nhau 1 dấu "," khi tìm sẽ dựa theo trường này, nếu dùng theo mẫu file demo chỉ nhập được 1 code và duy nhất. VD: nhập vào máy code "A" đến khi xếp hỏi lại dùng code "B" kết quả cho ra 0 thì tiêu. Còn nếu làm theo mẫu mình đăng ở mấy bai trước thì 1 lần chỉ kiểm tra được 1 giá trị trong khi thực tế 1 lần mình kiểm tra it nhất la 20 giá trị. 040
Mong các bạn hỗ trợ để giải quyết vấn đề.
Hiện mình đang ở SG nếu bạn Xuân Thanh cũng ở SG, mình muốn mời bạn chủ nhật này đi uống cafe. Trước để làm quen, sau thì mình muốn học hỏi thêm. 015
Chữ ký của dinh_trong_hoa
Reply
Những người đã cảm ơn
#32
(21-06-13, 12:29 PM)dinh_trong_hoa Đã viết:
(21-06-13, 11:22 AM)Xuân Thanh Đã viết: Đề bài bạn yêu cầu : Ghi cái mã nào thì hiển thị cái mã đó. Trong CSDL không có mã MX thì làm sao thể hiện được? Nếu y/c khác thì phải thực hiện cách khác. Đây là cách đặt vấn đề không rõ ràng nên thế.

Dear Xuân Thanh,

Giờ mình sẽ mô tả công việc hiện tại của mình để bạn tiện chỉ dẫn.
Mình làm công việc quản lý tình hình mỹ phẩm của công ty. Công ty mẹ bên nước ngoài sẽ thường gởi thông tin các sản phẩm theo yêu cầu của công ty trong nước hoặc họ tự gởi nếu có gì mới hay thay đổi. Nhiệm vụ của mình là theo dõi dữ liệu. Khi sếp làm việc sếp bên nước ngoài quyết định tháng này bán cái gì, thì sẽ bảo kiểm tra thông tin có hay chưa, nếu chưa thì bảo nước ngoài gởi về.
Còn về phần dữ liệu thì một sản phẩm có nhiều code, có khi trùng nhau vì thế ý mình sẽ thiết kế một trường có tên là "hệ thống code" chứa toàn bộ code của một sản phẩm mỗi code sẽ cách nhau 1 dấu "," khi tìm sẽ dựa theo trường này, nếu dùng theo mẫu file demo chỉ nhập được 1 code và duy nhất. VD: nhập vào máy code "A" đến khi xếp hỏi lại dùng code "B" kết quả cho ra 0 thì tiêu. Còn nếu làm theo mẫu mình đăng ở mấy bai trước thì 1 lần chỉ kiểm tra được 1 giá trị trong khi thực tế 1 lần mình kiểm tra it nhất la 20 giá trị. 040
Mong các bạn hỗ trợ để giải quyết vấn đề.
Hiện mình đang ở SG nếu bạn Xuân Thanh cũng ở SG, mình muốn mời bạn chủ nhật này đi uống cafe. Trước để làm quen, sau thì mình muốn học hỏi thêm. 015
Bạn thử xem qua cái file demo tôi gửi chưa? Cách tiếp cận cũng giống bạn Xuanthanh nhưng tìm dạng fulltext trên tất cả các trường. Gõ vào cái gì nó sẽ đưa ra danh sách có chứa cái đấy! Nếu muốn tìm kiếm Exact thì thêm vài điều khiển nữa là được. Nhưng cơ bản giống tiếp cận trong file đính kèm ở trước.
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn
#33
(21-06-13, 12:45 PM)paulsteigel Đã viết:
(21-06-13, 12:29 PM)dinh_trong_hoa Đã viết:
(21-06-13, 11:22 AM)Xuân Thanh Đã viết: Đề bài bạn yêu cầu : Ghi cái mã nào thì hiển thị cái mã đó. Trong CSDL không có mã MX thì làm sao thể hiện được? Nếu y/c khác thì phải thực hiện cách khác. Đây là cách đặt vấn đề không rõ ràng nên thế.

Dear Xuân Thanh,

Giờ mình sẽ mô tả công việc hiện tại của mình để bạn tiện chỉ dẫn.
Mình làm công việc quản lý tình hình mỹ phẩm của công ty. Công ty mẹ bên nước ngoài sẽ thường gởi thông tin các sản phẩm theo yêu cầu của công ty trong nước hoặc họ tự gởi nếu có gì mới hay thay đổi. Nhiệm vụ của mình là theo dõi dữ liệu. Khi sếp làm việc sếp bên nước ngoài quyết định tháng này bán cái gì, thì sẽ bảo kiểm tra thông tin có hay chưa, nếu chưa thì bảo nước ngoài gởi về.
Còn về phần dữ liệu thì một sản phẩm có nhiều code, có khi trùng nhau vì thế ý mình sẽ thiết kế một trường có tên là "hệ thống code" chứa toàn bộ code của một sản phẩm mỗi code sẽ cách nhau 1 dấu "," khi tìm sẽ dựa theo trường này, nếu dùng theo mẫu file demo chỉ nhập được 1 code và duy nhất. VD: nhập vào máy code "A" đến khi xếp hỏi lại dùng code "B" kết quả cho ra 0 thì tiêu. Còn nếu làm theo mẫu mình đăng ở mấy bai trước thì 1 lần chỉ kiểm tra được 1 giá trị trong khi thực tế 1 lần mình kiểm tra it nhất la 20 giá trị. 040
Mong các bạn hỗ trợ để giải quyết vấn đề.
Hiện mình đang ở SG nếu bạn Xuân Thanh cũng ở SG, mình muốn mời bạn chủ nhật này đi uống cafe. Trước để làm quen, sau thì mình muốn học hỏi thêm. 015
Bạn thử xem qua cái file demo tôi gửi chưa? Cách tiếp cận cũng giống bạn Xuanthanh nhưng tìm dạng fulltext trên tất cả các trường. Gõ vào cái gì nó sẽ đưa ra danh sách có chứa cái đấy! Nếu muốn tìm kiếm Exact thì thêm vài điều khiển nữa là được. Nhưng cơ bản giống tiếp cận trong file đính kèm ở trước.

Sorry bạn, hôm nay nghe bạn nói mình mới thấy link đính kèm, mình đã xem qua, cấu trúc như thế không ứng dụng được vào trường hợp của mình, vì một lần mình tìm trên 20 code sản phẩm, và một số điều kiện phụ. File demo của bạn Xuân Thanh là đúng ý mình rồi, tuy nhiên còn bị kẹt ở chổ không tìm được những code tương tự, phải nhập chính xác code thì mới tìm ra
Thank bạn đã góp ý.
Chữ ký của dinh_trong_hoa
Reply
Những người đã cảm ơn
#34
Thực ra, trong tìm kiếm người ta thường tìm cách đơn giản hóa vấn đề chứ không cần phải làm phức tạp ra. Google là một ví dụ về tìm kiếm.
Mình đã làm một file ví dụ cho bạn. Nếu muốn tìm theo nhiều điều kiện, người ta xử lý chuỗi tìm kiếm trước. Sau đó xây dựng thuật toán tìm kiếm để hỗ trợ tìm nhiều dữ kiện.
Mình cụ thể hóa cách làm của Xuan Thanh ra một bài như trong file liên kết trong bài đầu của mình.
Tài liệu mẫu ở đây
Cách tiếp cận thế này:
1. Xử lý dữ kiện tìm kiếm
2. Xây dựng truy vấn
3. Thực hiện.
Phần querry của mình là để làm mẫu vì thế nếu muốn dùng cho các kiểu dữ liệu khác nhau thì phải sửa tí chú.
Ở đây cốt lõi là
Mã PHP:
Private Function BuildSQL(txtIn As StringtxtFields As String) As String
    
' Chia tham số tìm kiếm ra thành các phần tử của mảng để xây dựng truy vấn tìm kiếm
    Dim inVar As Variant, fldName As Variant
    Dim i As Long, j As Long, tmpVar As String, SqlTxt As String
    inVar = Split(txtIn, txtDelm)
    fldName = Split(txtFields, ",")
    ' 
Xây dựng chuỗi cấu thành truy vấn
    
For LBound(fldNameTo UBound(fldName)
        
tmpVar fldName(j)
        
fldName(j) = ""
        
For LBound(inVarTo UBound(inVar)
            If 
Nz(Trim(inVar(i)), "") <> "" Then
                fldName
(j) = fldName(j) & "OR " tmpVar " Like '*" inVar(i) & "*' "
            
End If
        
Next
        fldName
(j) = tmpVar " IN (Select " tmpVar " From nxb Where " Mid(fldName(j), 4) & ")"
        
SqlTxt SqlTxt "OR " fldName(j)
    
Next
    
' Hoàn thiện chuỗi truy vấn
    SqlTxt = "SELECT manxb, tennxb, diachi, dienthoai FROM nxb Where " & Mid(SqlTxt, 4) & ";"
    BuildSQL = SqlTxt
End Function 
Trong đó txtFields là danh sách các trường cần tìm kiếm theo
txtFieldName = "manxb,tennxb,diachi,dienthoai"
Bạn có thể thử bằng cách gõ nội dung bất kỳ cần tìm kiếm và phân cách bằng dấu ";"
Thân!
P/S nếu bạn muốn có câu trả lời dễ nhấn cho ứng dụng của bạn thì hãy gửi bảng dữ liệu cần tìm kiếm lên, mọi người sẽ giúp bạn!
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn dinh_trong_hoa
#35
(21-06-13, 02:12 PM)paulsteigel Đã viết: Thực ra, trong tìm kiếm người ta thường tìm cách đơn giản hóa vấn đề chứ không cần phải làm phức tạp ra. Google là một ví dụ về tìm kiếm.
Mình đã làm một file ví dụ cho bạn. Nếu muốn tìm theo nhiều điều kiện, người ta xử lý chuỗi tìm kiếm trước. Sau đó xây dựng thuật toán tìm kiếm để hỗ trợ tìm nhiều dữ kiện.
Mình cụ thể hóa cách làm của Xuan Thanh ra một bài như trong file liên kết trong bài đầu của mình.
Tài liệu mẫu ở đây
Cách tiếp cận thế này:
1. Xử lý dữ kiện tìm kiếm
2. Xây dựng truy vấn
3. Thực hiện.
Phần querry của mình là để làm mẫu vì thế nếu muốn dùng cho các kiểu dữ liệu khác nhau thì phải sửa tí chú.
Ở đây cốt lõi là
Mã PHP:
Private Function BuildSQL(txtIn As StringtxtFields As String) As String
    
' Chia tham số tìm kiếm ra thành các phần tử của mảng để xây dựng truy vấn tìm kiếm
    Dim inVar As Variant, fldName As Variant
    Dim i As Long, j As Long, tmpVar As String, SqlTxt As String
    inVar = Split(txtIn, txtDelm)
    fldName = Split(txtFields, ",")
    ' 
Xây dựng chuỗi cấu thành truy vấn
    
For LBound(fldNameTo UBound(fldName)
        
tmpVar fldName(j)
        
fldName(j) = ""
        
For LBound(inVarTo UBound(inVar)
            If 
Nz(Trim(inVar(i)), "") <> "" Then
                fldName
(j) = fldName(j) & "OR " tmpVar " Like '*" inVar(i) & "*' "
            
End If
        
Next
        fldName
(j) = tmpVar " IN (Select " tmpVar " From nxb Where " Mid(fldName(j), 4) & ")"
        
SqlTxt SqlTxt "OR " fldName(j)
    
Next
    
' Hoàn thiện chuỗi truy vấn
    SqlTxt = "SELECT manxb, tennxb, diachi, dienthoai FROM nxb Where " & Mid(SqlTxt, 4) & ";"
    BuildSQL = SqlTxt
End Function 
Trong đó txtFields là danh sách các trường cần tìm kiếm theo
txtFieldName = "manxb,tennxb,diachi,dienthoai"
Bạn có thể thử bằng cách gõ nội dung bất kỳ cần tìm kiếm và phân cách bằng dấu ";"
Thân!
P/S nếu bạn muốn có câu trả lời dễ nhấn cho ứng dụng của bạn thì hãy gửi bảng dữ liệu cần tìm kiếm lên, mọi người sẽ giúp bạn!

Dear paulsteigel,
Cám ơn bạn, mình hiểu rồi, mình sẽ nghiên cứu file bạn gởi, bước đầu xem qua thì thấy ok rồi
Thank bạn nhiều
Chữ ký của dinh_trong_hoa
Reply
Những người đã cảm ơn
#36
(21-06-13, 02:12 PM)paulsteigel Đã viết: Thực ra, trong tìm kiếm người ta thường tìm cách đơn giản hóa vấn đề chứ không cần phải làm phức tạp ra. Google là một ví dụ về tìm kiếm.
Mình đã làm một file ví dụ cho bạn. Nếu muốn tìm theo nhiều điều kiện, người ta xử lý chuỗi tìm kiếm trước. Sau đó xây dựng thuật toán tìm kiếm để hỗ trợ tìm nhiều dữ kiện.
Mình cụ thể hóa cách làm của Xuan Thanh ra một bài như trong file liên kết trong bài đầu của mình.
Tài liệu mẫu ở đây
Cách tiếp cận thế này:
1. Xử lý dữ kiện tìm kiếm
2. Xây dựng truy vấn
3. Thực hiện.
Phần querry của mình là để làm mẫu vì thế nếu muốn dùng cho các kiểu dữ liệu khác nhau thì phải sửa tí chú.
Ở đây cốt lõi là
Mã PHP:
Private Function BuildSQL(txtIn As StringtxtFields As String) As String
    
' Chia tham số tìm kiếm ra thành các phần tử của mảng để xây dựng truy vấn tìm kiếm
    Dim inVar As Variant, fldName As Variant
    Dim i As Long, j As Long, tmpVar As String, SqlTxt As String
    inVar = Split(txtIn, txtDelm)
    fldName = Split(txtFields, ",")
    ' 
Xây dựng chuỗi cấu thành truy vấn
    
For LBound(fldNameTo UBound(fldName)
        
tmpVar fldName(j)
        
fldName(j) = ""
        
For LBound(inVarTo UBound(inVar)
            If 
Nz(Trim(inVar(i)), "") <> "" Then
                fldName
(j) = fldName(j) & "OR " tmpVar " Like '*" inVar(i) & "*' "
            
End If
        
Next
        fldName
(j) = tmpVar " IN (Select " tmpVar " From nxb Where " Mid(fldName(j), 4) & ")"
        
SqlTxt SqlTxt "OR " fldName(j)
    
Next
    
' Hoàn thiện chuỗi truy vấn
    SqlTxt = "SELECT manxb, tennxb, diachi, dienthoai FROM nxb Where " & Mid(SqlTxt, 4) & ";"
    BuildSQL = SqlTxt
End Function 
Trong đó txtFields là danh sách các trường cần tìm kiếm theo
txtFieldName = "manxb,tennxb,diachi,dienthoai"
Bạn có thể thử bằng cách gõ nội dung bất kỳ cần tìm kiếm và phân cách bằng dấu ";"
Thân!
P/S nếu bạn muốn có câu trả lời dễ nhấn cho ứng dụng của bạn thì hãy gửi bảng dữ liệu cần tìm kiếm lên, mọi người sẽ giúp bạn!

Dear paulsteigel,

Mình đã tham khảo file bạn gởi và thấy rất hay, nhờ bạn giải thích giùm ý nghĩa các câu lệnh mà bạn sử dụng và cấu trúc của nó.
VD: fillSQL BuildSQL => có chức năng gì ? cấu trúc ra sao ?
Split(txtFields, ",") => mình tra cứu tài liệu thấy cấu trúc của nó chỉ có 1 vế, của bạn tới 02 vế ?
Mình ko qua trường lớp nên hơi khó khăn khi phân tích các bài mẫu trên mạng. Mong bạn chỉ dẫn thêm.
Thank
Chữ ký của dinh_trong_hoa
Reply
Những người đã cảm ơn
#37
Xin phép giải thích một chút theo yêu cầu của bạn nhé;
1. Hàm Split được sử dụng để bẻ một chuỗi ra một mảng 1 chiều trong đó chuỗi được cấu thành từ các phần tử được phân cách nhau bằng dấu phân cách.
Cách sử dụng
Split([Chuỗi],[Dấu phân cách],[giới hạn],[cách so sánh])
Nếu chỉ đưa 1 tham số thì hàm tự động nhận dạng dấu phân cách là khoảng trắng " ";
Thường người ta chỉ dùng đến 2 tham số là cùng.
Ngược lại với hàm Split là hàm Join dùng để nối phần tử của mảng một chiều thành chuỗi.

2. Hàm BuildSQL trong bài là hàm tôi tự viêt bằng VBA để xử lý các điều kiện thành câu truy vấn hoàn chỉnh.
BuildSQL(txtIn As String, txtFields As String)
Tham số txtIn là chuỗi tham số đầu vào của câu tìm kiếm mà bạn muốn tìm, txtFields là chuỗi chứa tên các trường cần thực hiện lệnh tìm kiếm.
Ở đây chuỗi này tôi đặt là danh sách trường có phân cách bằng dấu phẩy.
Trong hàm này có nhiều biện pháp xử lý để hình thành câu truy vấn dạng
Mã PHP:
Select a from tenbang where a in (Câu truy vấn phụ trả về danh sách các bản ghi thỏa mãn điều kiện đầu vào bạn vừa nhập
Câu truy vấn phụ có dạng
Mã PHP:
select a from tenbang where a like '*" & từng mã tìm kiếm & "'" 
Như vậy câu truy vấn phụ sẽ liệt kê tất cả các bản ghi gần giống với mã điều kiện đầu vào.
Tôi phải dùng câu truy vấn phụ để tránh làm phức tạp hóa cú pháp tìm kiếm.

Giờ thì bạn đã hiểu cách dùng Split và thủ tục của tôi rồi chứ.

Bài này bên cạnh việc phải tìm hiểu về cách viết câu lệnh truy vấn một cách nghiêm chỉnh (đọc tài liệu về SQL), thì phần còn lại đơn thuần chỉ là lập trình VBA.
Nếu bạn chưa hiểu về VBA thì hãy nên bắt đầu đọc một cuốn sách về VBA đã và thử làm một vài cấu trúc đơn giản, và nếu có thể thì cố gắng học về thuật toán. Bạn sẽ có thể tự mình làm được những điều như trên nhờ 2 nhóm kiến thức đó.
Ở đây có một lưu ý:
Trong sự kiện Change của textbox, nếu ta chỉ tham chiếu textbox.value thì nó sẽ không cập nhập cái ta đang gõ, mà phải dùng textbox.text.
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn dinh_trong_hoa , Noname , MatTroiNguQuen , Che_Guevara
#38
(22-06-13, 05:51 PM)paulsteigel Đã viết: Xin phép giải thích một chút theo yêu cầu của bạn nhé;
1. Hàm Split được sử dụng để bẻ một chuỗi ra một mảng 1 chiều trong đó chuỗi được cấu thành từ các phần tử được phân cách nhau bằng dấu phân cách.
Cách sử dụng
Split([Chuỗi],[Dấu phân cách],[giới hạn],[cách so sánh])
Nếu chỉ đưa 1 tham số thì hàm tự động nhận dạng dấu phân cách là khoảng trắng " ";
Thường người ta chỉ dùng đến 2 tham số là cùng.
Ngược lại với hàm Split là hàm Join dùng để nối phần tử của mảng một chiều thành chuỗi.

2. Hàm BuildSQL trong bài là hàm tôi tự viêt bằng VBA để xử lý các điều kiện thành câu truy vấn hoàn chỉnh.
BuildSQL(txtIn As String, txtFields As String)
Tham số txtIn là chuỗi tham số đầu vào của câu tìm kiếm mà bạn muốn tìm, txtFields là chuỗi chứa tên các trường cần thực hiện lệnh tìm kiếm.
Ở đây chuỗi này tôi đặt là danh sách trường có phân cách bằng dấu phẩy.
Trong hàm này có nhiều biện pháp xử lý để hình thành câu truy vấn dạng
Mã PHP:
Select a from tenbang where a in (Câu truy vấn phụ trả về danh sách các bản ghi thỏa mãn điều kiện đầu vào bạn vừa nhập
Câu truy vấn phụ có dạng
Mã PHP:
select a from tenbang where a like '*" & từng mã tìm kiếm & "'" 
Như vậy câu truy vấn phụ sẽ liệt kê tất cả các bản ghi gần giống với mã điều kiện đầu vào.
Tôi phải dùng câu truy vấn phụ để tránh làm phức tạp hóa cú pháp tìm kiếm.

Giờ thì bạn đã hiểu cách dùng Split và thủ tục của tôi rồi chứ.

Bài này bên cạnh việc phải tìm hiểu về cách viết câu lệnh truy vấn một cách nghiêm chỉnh (đọc tài liệu về SQL), thì phần còn lại đơn thuần chỉ là lập trình VBA.
Nếu bạn chưa hiểu về VBA thì hãy nên bắt đầu đọc một cuốn sách về VBA đã và thử làm một vài cấu trúc đơn giản, và nếu có thể thì cố gắng học về thuật toán. Bạn sẽ có thể tự mình làm được những điều như trên nhờ 2 nhóm kiến thức đó.
Ở đây có một lưu ý:
Trong sự kiện Change của textbox, nếu ta chỉ tham chiếu textbox.value thì nó sẽ không cập nhập cái ta đang gõ, mà phải dùng textbox.text.

Dear paulsteigel,

Tiếp theo bài trước, sau khi listbox đã thể hiện các giá trị cần tìm, mình muốn rút các giá trị đó ra excel. Nhờ bạn hướng dẫn giùm mình !
Thank
Chữ ký của dinh_trong_hoa
Reply
Những người đã cảm ơn
#39
(26-06-13, 02:58 PM)dinh_trong_hoa Đã viết:
(22-06-13, 05:51 PM)paulsteigel Đã viết: Xin phép giải thích một chút theo yêu cầu của bạn nhé;
1. Hàm Split được sử dụng để bẻ một chuỗi ra một mảng 1 chiều trong đó chuỗi được cấu thành từ các phần tử được phân cách nhau bằng dấu phân cách.
Cách sử dụng
Split([Chuỗi],[Dấu phân cách],[giới hạn],[cách so sánh])
Nếu chỉ đưa 1 tham số thì hàm tự động nhận dạng dấu phân cách là khoảng trắng " ";
Thường người ta chỉ dùng đến 2 tham số là cùng.
Ngược lại với hàm Split là hàm Join dùng để nối phần tử của mảng một chiều thành chuỗi.

2. Hàm BuildSQL trong bài là hàm tôi tự viêt bằng VBA để xử lý các điều kiện thành câu truy vấn hoàn chỉnh.
BuildSQL(txtIn As String, txtFields As String)
Tham số txtIn là chuỗi tham số đầu vào của câu tìm kiếm mà bạn muốn tìm, txtFields là chuỗi chứa tên các trường cần thực hiện lệnh tìm kiếm.
Ở đây chuỗi này tôi đặt là danh sách trường có phân cách bằng dấu phẩy.
Trong hàm này có nhiều biện pháp xử lý để hình thành câu truy vấn dạng
Mã PHP:
Select a from tenbang where a in (Câu truy vấn phụ trả về danh sách các bản ghi thỏa mãn điều kiện đầu vào bạn vừa nhập
Câu truy vấn phụ có dạng
Mã PHP:
select a from tenbang where a like '*" & từng mã tìm kiếm & "'" 
Như vậy câu truy vấn phụ sẽ liệt kê tất cả các bản ghi gần giống với mã điều kiện đầu vào.
Tôi phải dùng câu truy vấn phụ để tránh làm phức tạp hóa cú pháp tìm kiếm.

Giờ thì bạn đã hiểu cách dùng Split và thủ tục của tôi rồi chứ.

Bài này bên cạnh việc phải tìm hiểu về cách viết câu lệnh truy vấn một cách nghiêm chỉnh (đọc tài liệu về SQL), thì phần còn lại đơn thuần chỉ là lập trình VBA.
Nếu bạn chưa hiểu về VBA thì hãy nên bắt đầu đọc một cuốn sách về VBA đã và thử làm một vài cấu trúc đơn giản, và nếu có thể thì cố gắng học về thuật toán. Bạn sẽ có thể tự mình làm được những điều như trên nhờ 2 nhóm kiến thức đó.
Ở đây có một lưu ý:
Trong sự kiện Change của textbox, nếu ta chỉ tham chiếu textbox.value thì nó sẽ không cập nhập cái ta đang gõ, mà phải dùng textbox.text.

Dear paulsteigel,

Tiếp theo bài trước, sau khi listbox đã thể hiện các giá trị cần tìm, mình muốn rút các giá trị đó ra excel. Nhờ bạn hướng dẫn giùm mình !
Thank
Có một bài tớ đã trả lời ở diễn đàn rồi vê việc transfer sang Excel đấy!...
Xem ở đây này!
Mã PHP:
Option Compare Database

Function Export2Excel(Optional qryName As StringOptional qryString As StringOptional ExlFileName As String) As Boolean
    
'On Error GoTo errHandler
    If qryName = "" Then
        If qryString = "" Then
            MsgBox "Chua co cau lenh Truy van SQL..", vbInformation
            GoTo errHandler
        End If
        ' 
Tao Query tam thoi
        CurrentDb
.CreateQueryDef "tmp_Qry"qryString
        qryName 
"tmp_Qry"
    
End If
    If 
ExlFileName "" Then ExlFileName CurrentProject.Path "\" & qryName & ".xls"
    ' Xoa file Excel neu da ton tai
    If Dir(ExlFileName) <> "" Then Kill ExlFileName
    ' Xuat ra Excel
    'DoCmd.OutputTo acOutputQuery, qryName, acCmdOutputToExcel, ExlFileName
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, qryName, ExlFileName, True
    Export2Excel = True
errHandler:
    If Export2Excel Then
        MsgBox "
Da xuat thanh cong ra Excel..Ten tap tin la: [" & vbclrf & ExlFileName, vbInformation
    Else
        MsgBox "
Viec xuat file ra Excel khong thanh cong...", vbInformation
    End If
    Err.Clear
    On Error Resume Next
    ' xoa Query tam
    If qryName = "
tmp_Qry" Then DoCmd.DeleteObject acQuery, qryName
End Function

Sub Test()
    'Call Export2Excel("
Query1")
    Call Export2Excel(, "
SELECT a.tentgCount(b.tensach) AS Dausach FROM tacgia AS a INNER JOIN sach AS b ON a.matg=b.matg GROUP BY a.tentg;")
End Sub 
Bạn có thể tham khảo thủ tục Test
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn
#40
(26-06-13, 03:26 PM)paulsteigel Đã viết:
(26-06-13, 02:58 PM)dinh_trong_hoa Đã viết:
(22-06-13, 05:51 PM)paulsteigel Đã viết: Xin phép giải thích một chút theo yêu cầu của bạn nhé;
1. Hàm Split được sử dụng để bẻ một chuỗi ra một mảng 1 chiều trong đó chuỗi được cấu thành từ các phần tử được phân cách nhau bằng dấu phân cách.
Cách sử dụng
Split([Chuỗi],[Dấu phân cách],[giới hạn],[cách so sánh])
Nếu chỉ đưa 1 tham số thì hàm tự động nhận dạng dấu phân cách là khoảng trắng " ";
Thường người ta chỉ dùng đến 2 tham số là cùng.
Ngược lại với hàm Split là hàm Join dùng để nối phần tử của mảng một chiều thành chuỗi.

2. Hàm BuildSQL trong bài là hàm tôi tự viêt bằng VBA để xử lý các điều kiện thành câu truy vấn hoàn chỉnh.
BuildSQL(txtIn As String, txtFields As String)
Tham số txtIn là chuỗi tham số đầu vào của câu tìm kiếm mà bạn muốn tìm, txtFields là chuỗi chứa tên các trường cần thực hiện lệnh tìm kiếm.
Ở đây chuỗi này tôi đặt là danh sách trường có phân cách bằng dấu phẩy.
Trong hàm này có nhiều biện pháp xử lý để hình thành câu truy vấn dạng
Mã PHP:
Select a from tenbang where a in (Câu truy vấn phụ trả về danh sách các bản ghi thỏa mãn điều kiện đầu vào bạn vừa nhập
Câu truy vấn phụ có dạng
Mã PHP:
select a from tenbang where a like '*" & từng mã tìm kiếm & "'" 
Như vậy câu truy vấn phụ sẽ liệt kê tất cả các bản ghi gần giống với mã điều kiện đầu vào.
Tôi phải dùng câu truy vấn phụ để tránh làm phức tạp hóa cú pháp tìm kiếm.

Giờ thì bạn đã hiểu cách dùng Split và thủ tục của tôi rồi chứ.

Bài này bên cạnh việc phải tìm hiểu về cách viết câu lệnh truy vấn một cách nghiêm chỉnh (đọc tài liệu về SQL), thì phần còn lại đơn thuần chỉ là lập trình VBA.
Nếu bạn chưa hiểu về VBA thì hãy nên bắt đầu đọc một cuốn sách về VBA đã và thử làm một vài cấu trúc đơn giản, và nếu có thể thì cố gắng học về thuật toán. Bạn sẽ có thể tự mình làm được những điều như trên nhờ 2 nhóm kiến thức đó.
Ở đây có một lưu ý:
Trong sự kiện Change của textbox, nếu ta chỉ tham chiếu textbox.value thì nó sẽ không cập nhập cái ta đang gõ, mà phải dùng textbox.text.

Dear paulsteigel,

Tiếp theo bài trước, sau khi listbox đã thể hiện các giá trị cần tìm, mình muốn rút các giá trị đó ra excel. Nhờ bạn hướng dẫn giùm mình !
Thank
Có một bài tớ đã trả lời ở diễn đàn rồi vê việc transfer sang Excel đấy!...
Xem ở đây này!
Mã PHP:
Option Compare Database

Function Export2Excel(Optional qryName As StringOptional qryString As StringOptional ExlFileName As String) As Boolean
    
'On Error GoTo errHandler
    If qryName = "" Then
        If qryString = "" Then
            MsgBox "Chua co cau lenh Truy van SQL..", vbInformation
            GoTo errHandler
        End If
        ' 
Tao Query tam thoi
        CurrentDb
.CreateQueryDef "tmp_Qry"qryString
        qryName 
"tmp_Qry"
    
End If
    If 
ExlFileName "" Then ExlFileName CurrentProject.Path "\" & qryName & ".xls"
    ' Xoa file Excel neu da ton tai
    If Dir(ExlFileName) <> "" Then Kill ExlFileName
    ' Xuat ra Excel
    'DoCmd.OutputTo acOutputQuery, qryName, acCmdOutputToExcel, ExlFileName
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, qryName, ExlFileName, True
    Export2Excel = True
errHandler:
    If Export2Excel Then
        MsgBox "
Da xuat thanh cong ra Excel..Ten tap tin la: [" & vbclrf & ExlFileName, vbInformation
    Else
        MsgBox "
Viec xuat file ra Excel khong thanh cong...", vbInformation
    End If
    Err.Clear
    On Error Resume Next
    ' xoa Query tam
    If qryName = "
tmp_Qry" Then DoCmd.DeleteObject acQuery, qryName
End Function

Sub Test()
    'Call Export2Excel("
Query1")
    Call Export2Excel(, "
SELECT a.tentgCount(b.tensach) AS Dausach FROM tacgia AS a INNER JOIN sach AS b ON a.matg=b.matg GROUP BY a.tentg;")
End Sub 
Bạn có thể tham khảo thủ tục Test

Dear paulsteigel,

Mình thấy rồi, nhưng ngôn ngữ bạn dùng cao qua mình theo không kịp, bạn có thể cắt nghĩa giùm mình không.
Thank
Chữ ký của dinh_trong_hoa
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Cách đề tạo Combo Box và List Box Tương ứng Godspear 1 41 Hôm qua, 01:42 PM
Bài mới nhất: toancvp
  [Help] Cập nhật combobox 2 từ combobox 1 (dữ liệu ở nhiều bảng) votinh.tq 6 207 22-11-16, 11:34 PM
Bài mới nhất: votinh.tq
  Lọc có điều kiện ở listbox phiacuoiconduong 2 94 18-11-16, 06:40 PM
Bài mới nhất: ongke0711
  Lọc theo điều kiện trong listbox Ranju 3 179 06-10-16, 05:26 PM
Bài mới nhất: Ranju
  Thay đổi màu nền các dòng theo điều kiện trên form Continuous tranthanhan1962 9 1,700 27-09-16, 11:01 PM
Bài mới nhất: ongke0711

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ