• Filter với backend là sql server
  • Filter với backend là sql server

    mrsiro > 04-10-18, 05:45 PM

    Chào mọi người, nếu dùng access kết nối access thì mình sử dụng:
     

    Mã:
    me.filter = điệu kiện

    me.filteron = true


    Còn đối với access kết nối với sqlserver thì dùng lệnh gì để thay thế.
  • RE: Filter với backend là sql server

    ongke0711 > 05-10-18, 02:48 PM

    Khi bạn xác định dùng Access làm Font End, SQL Server làm backend thì bạn phải xác định dùng cách gì để giao tiếp với SQL Server. Sau khi xác định dùng công cụ nào để kết nối thì cứ bám theo các phương thức, thuộc tính của công cụ đó mà thao tác dữ liệu.

    Nếu dùng ODBC thì sẽ quen thuộc hơn khi mới chuyển đổi Access lên SQL Server. Khi Dó bạn dùng Linked Table với SQL server thông qua công nghệ ODBC, sau đó code, query cũng làm như Linked table thông thường của Access mà bạn đã quen thuộc.

    Nếu bạn chọn kết nối bằng ADO thì buộc phải ngâm cứu các method, property của nó để xử lý dữ liệu. Một cách thức tốt hay dùng nhất là: Dùng ADO Recordset để lấy dữ liệu và dùng Stored Procedure thông qua ADO Command để Inser, Udpdate, Delete dữ liệu.

    Đối với câu hỏi trên của bạn thì bạn có thể tạo Stored Proc(SP) để tìm kiếm sau đó từ Form dùng ADO Command để chạy SP này và trả về Recordset cho Form. Mọi hoạt động sau khi thao tác với dữ liệu trên SQL Server thì bạn phải load lại Recordset cho Form.
    Bạn phải tự nghiên cứu thêm nhiều về SQL Server: dùng Dynamic SQL, Stored Proc...

    Trong loạt bài của anh LeHongDuc có hướng dẫn chi tiết, demo khá rõ hầu hết các trường hợp một Form thao tác dữ liệu có thể có. Bạn đọc và ngâm cứu demo là có thể giải quyết các yêu cầu trên của bạn rồi.

    Link post: http://thuthuataccess.com/forum/thread-5297.html
  • RE: Filter với backend là sql server

    mrsiro > 05-10-18, 06:13 PM

    Mình đã nghĩ tới cách tạo SP có filter sẵn trên SQL server, nhưng đúng như bạn nói mỗi lần cần filter lại phải load lại recordset với tất cả thao tác tạo kết nối tới ngắt kết nối.

    Vì thế ý mình ở đây muốn hỏi là có cách nào load recordset về rồi, lúc này mình cần thì mình chỉ filter trên cục recordset đã load về, chứ ko phải mỗi lần muốn filter lại phải load từ sql về tiếp.
  • RE: Filter với backend là sql server

    ongke0711 > 06-10-18, 12:44 AM

    ADO Recordset vẫn có phương thức Find và Filter nhưng xét về mặt hiệu quả (về tốc độ và bộ nhớ) thì không bằng việc chạy câu lệnh SQL để lọc lấy dữ liệu về từ SQL Server.

    ADO.Find và Filter không hỗ trợ Index nên việc tìm kiếm sẽ không nhanh. Find chỉ tìm được trên 1 field và nó phải duyệt qua từng dòng (record) trong cái recordset mà bạn đã tạo cho đến cuối để tìm kiếm. Filter thì tốt hơn, có thể lọc trên nhiều Fields, tốc độ tìm kiếm nhanh hơn Find nhưng nó cũng có điểm yếu là sẽ tạo một cursor khác (như recordset) trên bộ nhớ để lưu bộ records vừa lọc được.
    Khi bạn muốn tận dụng ADO Recordset có sẵn trên bộ nhớ để dùng Filter (hay Find) để lọc, tìm kiếm thông tin gì đó thì phải load về sẳn một Recordset đủ lớn chứa thông tin để lọc, khi đó cũng đã tốn tài nguyên để load về nhiều record dư thừa hơn nhu cầu.
    Bạn cần cân nhắc chi phí tài nguyên bỏ ra giữa 2 hình thức: tạo nhiều Recordset nhỏ tải về các dữ liệu cần lọc (dùng SQL) hoặc là tải về một recordset lớn rồi dùng nó để lọc ra các Recordset nhỏ (dùng ADO Filter).

    Bạn xem biểu đồ sau để thấy tại sao tôi không khuyến khích dùng lại ADO Filter.

    [Hình: 45115656641_55cbf0a9bc_o.gif]
  • RE: Filter với backend là sql server

    mrsiro > 06-10-18, 04:17 PM

    Chào bạn, nếu được bạn vui lòng giúp mình theo cái ADO filter khi load full recordset về form rồi được ko. Với cách tạo filter sẵn trên sql để load về thì mình đã làm được rồi.