• NHỜ NÂNG CẤP CODE TÌM DỮ LIỆU
  • 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ý.
    đầ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
    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. 
    - 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