Tôi có forms dữ liệu như trong file đính kèm, nếu dùng query update thì dữ liệu tính toán, update chậm, nhưng nếu tính toán trược tiếp trên form dữ liệu tính toán nhanh. Rất Mong các bạn trong forum trợ giúp về việc update dữ liệu từ form vào table dữ liệu
Rất mong nhận được sự trợ giúp của anh em trong forum
(12-12-13, 11:15 AM)chuvoicon Đã viết: Tôi có forms dữ liệu như trong file đính kèm, nếu dùng query update thì dữ liệu tính toán, update chậm, nhưng nếu tính toán trược tiếp trên form dữ liệu tính toán nhanh. Rất Mong các bạn trong forum trợ giúp về việc update dữ liệu từ form vào table dữ liệu
Rất mong nhận được sự trợ giúp của anh em trong forum
Mình chưa hình dung ra ý tưởng của bạn là gì, bạn nên nói chi tiết hơn. Nếu bạn cần gấp cho công việc thì mình trao đổi online nick yahoo của mình là dinh_trong_hoa.
Cảm ơn bạn dinh_trong_hoa đã quan tâm đến chương trình của mình
Hiện nay mình đang cần chuyển dữ liệu đã tính toán từ forms (bạn xem forms) về lại table. Vì hệ thống của mình xây dựng dùng query rất phức tạp (vì các dữ kiện liên kết với nhau, công đoạn sau phụ thuộc công đoạn trước) và dùng query update được nhưng chưa thực sự thuận lợi và hiệu quả (hiện nay mình đang dùng update query - đã có queryupdate trong file)
Nếu dùng tính toán trực tiếp trên form rất thuận lợi, nhưng mình đang yếu khi cần chuyển dữ liệu đã tính toán về table để từ table dữ liệu liên kết cho các công việc khác
12-12-13, 03:00 PM (Được chỉnh sửa: 13-12-13, 09:34 AM bởi paulsteigel.)
Bạn cần làm 2 việc:
1. Chọn tất cả các textbox trên form chi tiết mà bạn đã có công thức tính toán, đặt thuộc tính Tag =1 (trong mục Other của bảng thuộc tính). Làm như vậy để thủ tục sau đây sẽ chỉ duyệt các điều khiển có Tag=1 để thực hiện query tính toán.
2. Mở form, chọn sự kiện AfterUpdate, đưa đoạn mã sau vào.
Mã PHP:
Private Sub Form_AfterUpdate() Dim obj As Control, Sql As String For Each obj In Me.Controls If obj.Tag = 1 Then ' Su dung thuoc tinh Tag de dua query vaof If Nz(obj, 0) <> 0 Then Sql = Sql & ",a." & obj.Name & "=" & obj End If Next obj ' Chay query Sql = "UPDATE chitiet as a SET " & Mid(Sql, 2) & " WHERE a.Stt=" & stt & ";" Debug.Print Sql CurrentDb.Execute Sql End Sub
Mỗi khi bạn sửa, thêm số liệu, đoạn code trên sẽ chạy và thực hiện cập nhập số liệu tính toán trong bảng theo query đấy...
Mã PHP:
UPDATE chitiet as a SET a.tpxen=232,a.tpin=132,a.slphun=132,a.bhaophun=6,a.tphun=126,a.slsong=126,a.toin=126,a.slboi=126,a.bhaoboi=10, a.tpboi=116,a.soluongbe=116,a.betay=13,a.betudong=14,a.tpbe=103,a.sldan=103,a.bhaodan=0.515 WHERE a.Stt=305;
Ví dụ, khi bạn sửa số lượng đặt hàng, đoạn query trên sẽ cập nhập bản ghi có STT 305 theo công thức tính toán đã có sẵn trên form.
Vài điểm lưu ý thêm:
Thông thường, quy tắc chuẩn hóa CSDL đòi hỏi người dùng chỉ đưa số liệu gốc vào CSDL/bảng, các số liệu phát sinh từ việc tính toán các số liệu nguyên thủy (gốc/element data) chỉ nên dùng Truy vấn để thực hiện. Nếu các số liệu tính toán kia không thay đổi theo thời gian thì mới áp dụng việc tính và lưu vào CSDL.
Khi nào có thời gian, tôi sẽ viết thêm một vài bài về điều này!
(12-12-13, 02:13 PM)chuvoicon Đã viết: Cảm ơn bạn dinh_trong_hoa đã quan tâm đến chương trình của mình
Hiện nay mình đang cần chuyển dữ liệu đã tính toán từ forms (bạn xem forms) về lại table. Vì hệ thống của mình xây dựng dùng query rất phức tạp (vì các dữ kiện liên kết với nhau, công đoạn sau phụ thuộc công đoạn trước) và dùng query update được nhưng chưa thực sự thuận lợi và hiệu quả (hiện nay mình đang dùng update query - đã có queryupdate trong file)
Nếu dùng tính toán trực tiếp trên form rất thuận lợi, nhưng mình đang yếu khi cần chuyển dữ liệu đã tính toán về table để từ table dữ liệu liên kết cho các công việc khác
Chào bạn,
Form nó tiện dụng, dễ dùng nhưng không linh động bằng query, nó đòi hỏi có ý tưởng và cấu trúc dữ liệu rõ ràng. Bạn nói chung chung như thế thật khó ....Mình thích dùng form hơn query, vừa trang trí tuỳ tích, thiết kế ra ai cũng dùng được. Mình gởi bạn file mẫu tham khảo, file này thiết kế với mục đích quản lý doanh thu.
(12-12-13, 03:12 PM)dinh_trong_hoa Đã viết: Chào bạn,
Form nó tiện dụng, dễ dùng nhưng không linh động bằng query, nó đòi hỏi có ý tưởng và cấu trúc dữ liệu rõ ràng. Bạn nói chung chung như thế thật khó ....Mình gởi bạn file mẫu tham khảo, file này thiết kế với mục đích quản lý doanh thu.
Chúc bạn thành công.
Chương trình này của mình không phục vụ quản lý doanh thu (nếu mở rộng hệ thống thì có thể quản lý cả doanh thu, quản lý luôn công nợ, kho ... --> gộp). Chương trình của mình viết phục vụ công việc sản xuất - lập kế hoạch sản xuất cho các bộ phận sản xuất (dữ liệu sản xuất lấy chủ yếu từ cái table chi tiết của mình ), bạn xem có thấy các thuộc tính liên hệ phụ thuộc các công đoạn sau phụ thuộc vào công đoạn trước. Mình đang cần thay thế không dùng query (đã có queryupdate - 2 đến 3 click mới cập nhật hết ) mà tính toán trực tiếp trên form (đã làm) sau đó chuyển dữ liệu đã tính toán về table
(12-12-13, 03:12 PM)dinh_trong_hoa Đã viết: Chào bạn,
Form nó tiện dụng, dễ dùng nhưng không linh động bằng query, nó đòi hỏi có ý tưởng và cấu trúc dữ liệu rõ ràng. Bạn nói chung chung như thế thật khó ....Mình gởi bạn file mẫu tham khảo, file này thiết kế với mục đích quản lý doanh thu.
Chúc bạn thành công.
Chương trình này của mình không phục vụ quản lý doanh thu (nếu mở rộng hệ thống thì có thể quản lý cả doanh thu, quản lý luôn công nợ, kho ... --> gộp). Chương trình của mình viết phục vụ công việc sản xuất - lập kế hoạch sản xuất cho các bộ phận sản xuất (dữ liệu sản xuất lấy chủ yếu từ cái table chi tiết của mình ), bạn xem có thấy các thuộc tính liên hệ phụ thuộc các công đoạn sau phụ thuộc vào công đoạn trước
Trân trọng
Ac...Mình không hiểu công việc của bạn như thế nào, ý bạn ra sao. Nên không thể thực hiện trên file của bạn. Mình gởi file với mục đích để bạn tham khảo giao diện và cách vận hành, để xem có gần với ý của bạn không.
(12-12-13, 03:00 PM)paulsteigel Đã viết: Bạn cần làm 2 việc:
1. Chọn tất cả các textbox trên form chi tiết mà bạn đã có công thức tính toán, đặt thuộc tính Tag =1 (trong mục Other của bảng thuộc tính). Làm như vậy để thủ tục sau đây sẽ chỉ duyệt các điều khiển có Tag=1 để thực hiện query tính toán.
2. Mở form, chọn sự kiện AfterUpdate, đưa đoạn mã sau vào.
Mã PHP:
Private Sub Form_AfterUpdate() Dim obj As Control, Sql As String For Each obj In Me.Controls If obj.Tag = 1 Then ' Su dung thuoc tinh Tag de dua query vaof If Nz(obj, 0) <> 0 Then Sql = Sql & ",a." & obj.Name & "=" & obj End If Next obj ' Chay query Sql = "UPDATE chitiet as a SET " & Mid(Sql, 2) & " WHERE a.Stt=" & stt & ";" Debug.Print Sql CurrentDb.Execute Sql End Sub
Mỗi khi bạn sửa, thêm số liệu, đoạn code trên sẽ chạy và thực hiện cập nhập số liệu tính toán trong bảng theo query đấy...
Mã PHP:
UPDATE chitiet as a SET a.tpxen=232,a.tpin=132,a.slphun=132,a.bhaophun=6,a.tphun=126,a.slsong=126,a.toin=126,a.slboi=126,a.bhaoboi=10, a.tpboi=116,a.soluongbe=116,a.betay=13,a.betudong=14,a.tpbe=103,a.sldan=103,a.bhaodan=0.515 WHERE a.Stt=305;
Ví dụ, khi bạn sửa số lượng đặt hàng, đoạn query trên sẽ cập nhập bản ghi có STT 305 theo công thức tính toán đã có sẵn trên form.
Vài điểm lưu ý thêm:
Thông thường, quy tắc chuẩn hóa CSDL đòi hỏi người dùng chỉ đưa số liệu gốc vào CSDL/bảng, các số liệu phát sinh từ việc tính toán các số liệu nguyên thủy (gốc/element data) chỉ nên dùng Truy vấn để thực hiện. Nếu các số liệu tính toán kia không thay đổi theo thời gian thì mới áp dụng việc tính và lưu vào CSDL.
Khi nào có thời gian, tôi sẽ viết thêm một vài bài về điều này!
Trân thành cảm ơn Paul
Với sự kiện trên của Paul đã thay thế cho query update không cần dùng đến update query nữa, vì dữ liệu tính toán trên phụ thuộc vào rất nhiều tham số nên nếu dùng update query việc xử lý dữ liệu chậm (không thực hiện được one click one query) nên tính toán trên form và trả dữ liệu sau khi đã được tính toán về csdl là biện pháp khả thi nhất của mình trong trường hợp này
>>>Trân thành cảm ơn Paul - Trân trọng cảm ơn bạn đã chân thành>>
Trích dẫn:Với sự kiện trên của Paul đã thay thế cho query update không cần dùng đến update query nữa, vì dữ liệu tính toán trên phụ thuộc vào rất nhiều tham số nên nếu dùng update query việc xử lý dữ liệu chậm (không thực hiện được one click one query) nên tính toán trên form và trả dữ liệu sau khi đã được tính toán về csdl là biện pháp khả thi nhất của mình trong trường hợp này
Bạn nói vừa đúng mà vừa không đúng.
Đúng khi không phải chạy truy vấn cập nhập ở ngoài môi trường Form và;
Không đúng vì tôi vẫn dùng truy vấn cập nhập nhưng với 1 bản ghi hiện thời sau khi có sự điều chỉnh của người dùng.
Vài dòng võ vẽ một chút!
Thân
Paul cho hỏi thêm chút là với sự kiện trên chỉ thực hiện cập nhật dữ liệu có kết quả thay đổi <>0, còn các kết quả có kết quả =0 sau khi thay đổi sẽ không chuyển vào csdl đúng không?. Vậy trong trường hợp này những kết quả sau khi thay đổi sẽ không được chuyển cập nhập toàn bộ vào csdl mà chỉ chuyển kết quả thay đổi có giá trị <>0
Ví dụ khi mình thay đổi thuộc tính phụ thuộc(là một biến không phải giá trị) ở một khâu nào đó: ban đầu tính toán qua các công đoạn a-b-c nhưng sau khi thực hiện chỉ cần qua công đoạn a-c không cần qua công đoạn b khi đó kết quả của công đoạn b =0 trên form nhưng sẽ không được cập nhật vào csdl?