-
RE: NHỜ NÂNG CẤP CODE TÌM DỮ LIỆU
ongke0711 > 18-02-24, 09:27 PM
Tôi sẽ không tham gia chủ để này nữa vì tôi thấy bạn khá bảo thủ và cứ nghĩ cách thiết kế mình là đúng (mặc dù nó sai cơ bản, chẳng cần phần mềm qui mô gì cả). Mấy cái chuyện xây dựng csdl trên Access, SQL Server, mySQL tôi làm khá nhiều rồi, việc kết nối đa người dùng, qua internet trên diễn đàn cũng đã có nhiều, không có gì ghê gớm như các lý do bạn đưa ra. Các lý đo đó chỉ là biện hộ cho cách làm của mình theo hướng mình nghĩ là đúng. Bạn cứ lên mạng kiếm mấy bài thực tập của sinh viên về quản lý học sinh, nó rất đơn giản nhưng đảm bảo sự chuẩn hoá table các cấp 1,2,3. Cái gì cũng phải qua kiến thức cơ bản, xây nhà không móng thì có thể sập ngay lúc hoàn công.
Các bạn khác hỗ trợ nhe. Tôi bó tay chấm com rồi. -
RE: NHỜ NÂNG CẤP CODE TÌM DỮ LIỆU
vandao > 26-12-24, 12:11 PM
cái này rất dễ xử lý.
đầu tiên là tạo thêm 2 tabl:
- 1 table chỉ có 1 field duy nhất, "TenCanTim" hay gì đó tùy thích và đặt tên túy thích
- 1 table là gồm những những field thông tin mà bạn muốn có và "TenHocsinh" trong table nay cũng duoc set index (yes duplicateOK)
sau đó thì viet code dùng "Seek" là ra hết. không sót 1 em nào
vd:
dim Db as database
dim Tbl1 as recordset, tbl2 as record set, tbl3 as recordset
set db = currentDb
set tbl1=db.openrecord("tên củaTable số 1 ở trên, dbopentable)
set tbl2=db.openracordset("tên của table số 2 ở trên", dbopentable)
set tbl3+db.openrecrdset("Tên của table chứa dữ liệu mà ta muốn tìm", dbopentable)
tbl1.index="TencanTim"
if tbl3.recordcount>0 then
tbl3.movefirst : do until tbl3.eof
tbl1.seek "=", "Tencantim"
if not nomatch tbl1!tencantim" then
tbl2.addnew
tbl2!tenhocsinh=ten
....gì gì nữa
tbl2.update
tbl3.movenest: loop
end if
end if
dữ liệu tìm được sẽ lưu ở tbl2
phần tiếp theo là của bạn -
RE: NHỜ NÂNG CẤP CODE TÌM DỮ LIỆU
ongke0711 > 27-12-24, 09:28 AM
(26-12-24, 12:11 PM)vandao Đã viết: cái này rất dễ xử lý.
Nhìn code của bạn thì chắc là bạn làm trong Access 2023, nếu dùng code này cho Access 2010 trở lên sẽ báo lỗi ngay.
đầu tiên là tạo thêm 2 tabl:
- 1 table chỉ có 1 field duy nhất, "TenCanTim" hay gì đó tùy thích và đặt tên túy thích
- 1 table là gồm những những field thông tin mà bạn muốn có và "TenHocsinh" trong table nay cũng duoc set index (yes duplicateOK)
sau đó thì viet code dùng "Seek" là ra hết. không sót 1 em nào
vd:
dim Db as database
dim Tbl1 as recordset, tbl2 as record set, tbl3 as recordset
set db = currentDb
set tbl1=db.openrecord("tên củaTable số 1 ở trên, dbopentable)
set tbl2=db.openracordset("tên của table số 2 ở trên", dbopentable)
set tbl3+db.openrecrdset("Tên của table chứa dữ liệu mà ta muốn tìm", dbopentable)
tbl1.index="TencanTim"
if tbl3.recordcount>0 then
tbl3.movefirst : do until tbl3.eof
tbl1.seek "=", "Tencantim"
if not nomatch tbl1!tencantim" then
tbl2.addnew
tbl2!tenhocsinh=ten
....gì gì nữa
tbl2.update
tbl3.movenest: loop
end if
end if
dữ liệu tìm được sẽ lưu ở tbl2
phần tiếp theo là của bạn
- Phương thức “Seek” chỉ có trong Access 2003 trở về trước.
- Không khai báo tường minh Database và Recordset (phong cách viết code thời trước). Khai báo kiểu của bạn thì khi qua Access 2010 trở lên nó sẽ tự hiểu là bạn đang khai báo ADO recordset chứ không phải DAO recordset và tất nhiên nó sẽ tự động dùng thư viện của ADO => Báo lỗi ngay. -
RE: NHỜ NÂNG CẤP CODE TÌM DỮ LIỆU
huyhoang22 > 18-01-25, 09:34 AM
Mình thấy ongke0711 nói đúng mà có thể dùng truy vấn kết hợp nhẹ với vba thì ra mọi kết quả mong muốn.
mình dùng cách tìm kiếm như sau
Like IIf([Forms]![F02]![NVSUB]![chkDes]=True,'*' & [Forms]![F02]![NVSUB]![txtSrchText] & '*','')
AND hoặc OR tùy theo yêu cầu truy vấn tiếp.
Private Sub txtSearchFor_Change()
Dim vSearchString As String
vSearchString = Me.txtSearchFor.Text
Me.txtSrchText.Value = vSearchString
Form_F41.Requery
End Sub