2012-01-13 37 views
5

Tôi có một hệ thống theo dõi công việc và có truy vấn trả về kết quả của tất cả các công việc quá hạn. Tôi có một biểu mẫu hiển thị từng công việc một, và có hai nút (Công việc đã được hoàn thành và Công việc chưa hoàn thành). Không hoàn thành chỉ đơn giản là hiển thị các hồ sơ tiếp theo. Tôi không thể tìm cách truy cập vào bản ghi hiện tại để cập nhật nội dung nếu nút "Đã hoàn thành" được nhấn, số gần nhất tôi có thể nhận là số dài đại diện cho vị trí bản ghi trong biểu mẫu.Cách cập nhật trực tiếp bản ghi trong cơ sở dữ liệu từ số biểu mẫu (Access 2007)

VBA để lấy chỉ mục của bản ghi trong biểu mẫu như sau.

Sub Jobcompleted(frm As Form) 
    Dim curr_rec_num As Long 
    curr_rec_num = frm.CurrentRecord 
End Sub 

Đây là ảnh đầu tiên của tôi tại VBA và sau một giờ tìm kiếm, tôi không thể tìm thấy bất kỳ điều gì để giải quyết vấn đề của mình. Tôi có nghĩ về cách này hoàn toàn sai không? Làm việc trong Microsoft Access 2007

Hơn nữa Info Tất cả các bảng được chuẩn hóa

xe Bảng: Chứa vehicle_id (pk), cũng như rego và mô hình vv

Job Bảng: Chứa job_id (pk), vehicle_id (fk) và thông tin khác về những gì cần xảy ra, cũng như ngày xảy ra tiếp theo, ngày giữa mỗi lần xảy ra công việc (tất cả công việc lặp lại) và thông tin khác

Lịch sử công việc Bảng: Chứa job_history_id (pk), job_id (fk), ngày hoàn thành và ý kiến ​​

Khi nút công việc hoàn thành được nhấn, nó sẽ tạo ra một mục mới trong bảng lịch sử công việc với ngày hiện tại, bất kỳ ý kiến ​​và công việc id

Đây là kịch bản tôi đang cố gắng để có được làm việc

Private Sub Command29_Click() 
    Dim strSQL1 As String 
    Dim strSQL2 As String 
    Set Rs = CurrentRs 
    Set db = CurrentDb 

    strSQL1 = "INSERT INTO completed_jobs(JOB_ID, DATE_COMPLETED, COMMENTS) VALUES " & Rs!job.ID & ", " & Date 
    db.Execute strSQL1, dbFailOnError 
    strSQL2 = "UPDATE job SET JOB_NEXT_OCCURANCE = JOB_NEXT_OCCURANCE+JOB_RECURRANCE_RATE WHERE job.ID = Rs!job.ID" 
    db.Execute strSQL2, dbFailOnError 
End Sub 

Lưu ý: Dòng Set Rs = CurrentRs hoàn toàn không chính xác, tôi tin rằng đây là những gì tôi cần tìm ra? Điều này được gọi là khi nhấn nút

Tôi đăng hình ảnh hiển thị biểu mẫu (không liên tục).

@HansUp, tôi nhận được những gì bạn đang nói, nhưng tôi không nghĩ đó là khá áp dụng (Tôi đã không cung cấp đủ thông tin lần đầu tiên xung quanh để bạn có thể hiểu rằng tôi nghĩ)

@sarh Tôi tin Recordset này mà bạn đang nói về những gì tôi cần, tuy nhiên tôi không thể tìm ra cách sử dụng nó, bất kỳ gợi ý nào?

@Matt Tôi chắc chắn 90% tôi đang sử dụng hình thức ràng buộc (Như tôi đã nói, mới truy cập, đang xem mọi thứ mọi người đề xuất và học khi tôi đi). Tất nhiên có một ID cho công việc (Chỉ cần không được hiển thị, không cần phải nhìn thấy), nhưng làm cách nào để truy cập vào nó để thực hiện một thao tác trên nó? SQL tôi có thể làm, tích hợp với truy cập/VBA Tôi mới tại

Form for ticking off jobs as they are completed, calls code shown

+1

"Tôi có làm theo cách này hoàn toàn sai không?" Tôi nghi ngờ bạn có thể được, thực hiện đúng cách, truy cập dễ dàng. Form của bạn có phải là một dạng liên tục không? Tại sao bạn không thể truy cập vào dữ liệu? Recordset của bạn có phức tạp vì vậy nó không thể cập nhật được không? Bạn đã thiết kế các bảng để bao gồm một id duy nhất chưa? Bạn đã bắt đầu công việc của bạn bằng cách đọc về cơ sở dữ liệu quan hệ? Bạn đã xem bất kỳ mẫu Truy cập nào chưa? – Fionnuala

+1

BTW nếu một người khác cũng tán thành câu hỏi của bạn, bạn sẽ có đủ danh tiếng để đăng hình ảnh của biểu mẫu, điều này có thể hữu ích, sau đó lại có thể không :) – Fionnuala

+0

Tôi sẽ upvote cho tải lên hình ảnh có thể bạn đang sử dụng một hình thức ràng buộc và do đó sẽ có thể bao gồm một trường với số duy nhất của công việc (tôi chắc chắn hy vọng nó có một) và sau đó bạn có thể tham chiếu trường văn bản này trong Update SQL của bạn. –

Trả lời

2

Theo tôi được biết tình hình của bạn, hình thức của bạn là dữ liệu-bound bound (bạn có thể chỉ số kỷ lục), vì vậy - hình thức của bạn đã nằm trên hồ sơ này.Nếu bạn cần cập nhật một số trường của tập dữ liệu cơ bản, bạn có thể viết một số thông tin như

Me!SomeField = ... 
DoCmd.RunCommand acCmdSaveRecord 

Nếu biểu mẫu của bạn có điều khiển ràng buộc "SomeField", thì biểu mẫu sẽ được cập nhật tự động.

Nếu điều này không hiệu quả, bạn có thể xem xét một vài hướng khác:

1) Cập nhật bản ghi bằng mã SQL. Ví dụ: bạn có ID bản ghi cần được cập nhật trong tập dữ liệu biểu mẫu, để bạn có thể viết nội dung như sau:

Call CurrentDB.Execute(_ 
"UPDATE SomeTable SET SomeField = SomeValue WHERE SomeTableID = " & Me!SomeTableID, dbSeeChanges) 

2) Bạn có thể xem thuộc tính Dấu trang - cả Bản ghi và Biểu mẫu đều có thuộc tính này, nó mô tả vị trí kỷ lục. Vì vậy, bạn có thể viết một cái gì đó như thế này (không phải là ví dụ tốt nhất, nhưng có thể giúp bạn để có được một ý tưởng):

Dim Rs as Recordset 
Set Rs = Me.RecordsetClone 'make a reference copy of the form recordset 
Rs.Bookmark = Me.Bookmark 'locate this recordset to the form current record 
+0

Không chắc chắn về cách thông báo ngăn xếp ngăn xếp hoạt động, nhưng tôi đã đăng thêm thông tin ở trên – StandOff

+0

@StandOff Tôi tin nguồn bản ghi của biểu mẫu của bạn chứa trường JOB_ID, do đó, để sử dụng nó, bạn có thể chỉ viết Me! JOB_ID (không cần thêm CurrentRs). Vì vậy, strSQL1 (nhưng không có ý kiến) Tôi sẽ viết lại như là "INSERT INTO completed_jobs (JOB_ID, DATE_COMPLETED) giá trị (" & Rs! Job.ID & ", Date())" – sarh

+0

Chỉ cần nhận thấy, tôi đã thực hiện một misprint trong mã đầu tiên Đoạn trích - nó phải là tôi! SomeField thay vì Rs! SomeField, xin lỗi, cố định. – sarh

1

Hãy xem xét một cách tiếp cận đơn giản hơn. Tôi nghi ngờ bạn cần phải quan tâm đến tài sản CurrentRecord của biểu mẫu. Và tôi không thấy lý do tại sao bạn nên cần một nút lệnh cho "Đã được hoàn thành" và một cho "chưa được hoàn thành".

Thêm trường loại dữ liệu "Có/Không" vào bảng được sử dụng bởi nguồn bản ghi của biểu mẫu của bạn. Đặt thuộc tính giá trị mặc định là 0, đại diện cho False hoặc No. Gọi nó là "completion_status". Tạo một biểu mẫu mới bằng cách sử dụng nguồn bản ghi đó. Sau đó, biểu mẫu của bạn có thể có một kiểm soát hộp kiểm cho completion_status.

Bản ghi mới được thêm vào sẽ có Sai/Không như completion_status --- hộp kiểm sẽ xuất hiện không được chọn. Hoàn thành_status cho các bản ghi khác trong các biểu mẫu có thể được chuyển đổi giữa Có (đã chọn) và Không (bỏ chọn) bằng cách sử dụng điều khiển hộp kiểm.

+0

Không chắc chắn về cách hoạt động của cảnh báo Tràn ngăn xếp, nhưng tôi đã đăng thêm thông tin abouve – StandOff

Các vấn đề liên quan