2016-04-13 25 views
0

Bu yüzden Envanter Veritabanımı bitirmek için yardıma ve yardıma ihtiyacım var.Access ile Temel Envanter Kurulumu

Şu İzlediğim Tablolar ve onlara alan vardır: (Tablo: Alanlar, ilk alandır birincil anahtar)

Öğeler: Ürün #, Öğe aza, Ürün Spec yeniden sıralama Düzeyi, Adet yeniden sıralama için , Adet

Hand

üzerine Materials_Used: ID (sadece otomatik numara alanı), Project, Öğe # Tutar

Projeler: Proje

Purchase_Orders: PONum, al d Tarih

Receiving_Amount: Kimlik (yine otomatik numaralandıran), Ürün #, Tutar, PONum

Ben 2 alanında'nın sorunlar yaşıyorum:

  1. Bağlama Ürünleri Receiving_Amount ile PONum içinde: Şu anda I girişi date ve POnum ve veri sayfası şeklinde Kabul miktarının bir alt formu etmesini isteyen Purchase_Orders formu vardır. Ben date ve PONum bir girin ve Purchase_Orders.ID ve Purchase_Orders.PONumber ------ Bu konular Wayne sayesinde çözüldü alıyorum alınan Ürünleri girmeden aşağı taşımak ve parametre değeri girin kutusuna sonra şeydir! otomatik kez bir öğe PO formu (buna ekleyerek) ve Malzeme Kullanılan formu (çıkarılınca) aracılığıyla Alınan edilir güncellemek için Öğeler tablo için Hand üzerinde Miktar Having

Database Relationship

+0

Yukarıdaki tablo ve alan tanımlarınız yanlış ya da parametre değerinizde bir yazım hatası var. 'Purchase_Orders' tablosunu ve bazı alanları gösterin, ancak daha sonra bir Albümü (Receiving_Amount'dan sonra :) var. Purchase_Orders'da 'ID' adlı bir alan var mı? Güncellemeye gelince, bazı Vba kodlarını, kullanılan QTY ve Materyalleri güncellemek için çalıştırmaya zorlamak için bir düğme tıklaması gibi bir şey öneririm. –

+0

Yukarıdaki Purchase_Orders tablosu yanlıştı, sadece yansıtacak şekilde düzenledim. Purchase_Orders için bir alan, sadece 'PONum' ve' Received Date' adlı bir alan yok. Ve güncellemek için bunu düşünüyordum ama bunun için kodun nasıl yazıldığından emin değilim, bu değeri Items tablosunun – Needtoknow

+0

altındaki doğru satıra geçirmeyi gerektireceğini biliyorum 'Sorun 1' yanlış alan adından kaynaklanıyor Ana ve alt form arasındaki bağlantıda veya sorguda ... 'ID' alanı yok ... Tam sözdizimini görmeden belki PONum'u kullanmak mı istiyorsunuz? 'Sorun 2' ile ilgili olarak, alt formunuz ne için kullanılıyor? Kullanıcı, PO'daki her bir öğe için alınan miktarda yazıyor mu? Eğer öyleyse, ilişkili tabloları güncellemek için bazı vba kodu sağlayabilirim. –

cevap

0

Çok kullanıcılı bir güncelleme ortamında çalışacağınız için, diğer kullanıcılarla çakışma olmadığından emin olmanız gerekir. En güvenli yaklaşım bir İŞLEM kullanmaktır.

Daha sonra, iki tablo güncellemek için nasıl ve ne zaman karar vermeniz gerekir. Kullanıcı bittiğinde tıkladığı düğmeyi kullanacak olan 'Seçenek 1' ile devam edelim. Düğmeyi tıkladıklarında aşağıdaki alt programı çağırmanız gerekir. Kullanıcı alt formda herhangi bir değişiklik yaptıysa da takip etmeli, ancak 'Kaydet' düğmesini tıklamayı unutmuş olmalısınız.

Sonra şiddetle Yaptığınız değişiklikleri izleme düşündürmektedir. Örneğin, kullanıcı 5'e girer, değişiklikleri kaydeder. Yarın, verilere bakıp, 5'i görüyor ve 6'ya değiştirmek istiyor ... ... gerçek envanteri bozacak. Önlenecek bir yöntem, PO satır öğeleri için işlendiğini ve güncellemeleri tekrar önlediğini belirten bir "bayrak" a sahip olmaktır.

Aşağıdaki kod yalnızca bir örnek ... Giriş ve çıkış kayıt kümeleri olması gerektiğini düşündüğümde kod yazdım, ancak işlenecek doğru girdi satırlarının seçilmesini sağlamanız ve sonra çıkış satırını seçmeniz gerekir.) tablolar için. içlerinde ## ile yorumlar için

Bak .... SİZİN kontrol adlarını kullanmak için kod düzeltin.

bir açıklama fazlasına ihtiyaç olursa haber verin.

Option Compare Database 
Option Explicit 

' BeginTrans, CommitTrans, Rollback Methods Example 
' After the BeginTrans method starts a transaction that isolates all the changes made, 
' the CommitTrans method saves the changes. 
' Notice that you can use the Rollback method to undo changes that you saved using 
' the Update method. Furthermore, the main transaction is nested within another transaction 
' that automatically rolls back any changes made by the user during this example. 

' One or more table pages remain locked while the user decides whether or not to accept the changes. 
' For this reason, make sure you only execute the transaction on some event - don't allow a user 
' to be interactive, else he may go to lunch and may lock pages someone else needs! 

' Add to: Receiving_Amount: ID(again autonumber), Item#, Amount, PONum 
' Subtract from: Materials_Used: ID(just an Autonumber field), Project, Item#, Amount 

Sub BeginTransX_Update_Inventory() 
    On Error GoTo Error_trap 

    Dim wrkDefault  As DAO.Workspace 
    Dim dbs    As DAO.Database 
    Dim tblInput  As DAO.recordSet 
    Dim tblItems  As DAO.recordSet 
    'Dim tblMaterials As DAO.recordSet 

    ' Get default Workspace. 
    Set wrkDefault = DBEngine.Workspaces(0) 
    Set dbs = CurrentDb 

    ' ## Change the following line to use the name of the form control that has your PONum 
    Set tblInput = dbs.OpenRecordset("select * from MaterialsRec where PONum = " & Me.txtPONum & ";")   '<<< This will be the source of your changes. Can use a query to filter exact rows. 

    ' Start transaction. 
    wrkDefault.BeginTrans 

    Do While Not tblInput.EOF 

     Set tblItems = dbs.OpenRecordset("select * from [Items] where [Item#] = " & tblInput![item] & ";") ' <<< This will be where the updates are applied. 

     ' Increase Qty on Hand 
     tblItems.Edit 
     tblItems![Qty on Hand] = tblItems![Qty on Hand] + tblInput!Amount 
     tblItems.Update 

     '## Add a text field named 'ProcStatus' to table MaterialsRec, or delete the following update ... your choice... 
     tblInput.Edit 
     tblInput!ProcStatus = "updated" 
     tblInput.Update 

     tblInput.MoveNext 
    Loop 

    ' You can remove the following code if desired... 
    ' Ask if the user wants to commit to all the changes made above. 
    If MsgBox("Save changes?", vbYesNo) = vbYes Then 
     wrkDefault.CommitTrans 
    Else 
     wrkDefault.Rollback 
    End If 

    tblInput.Close 
    tblItems.Close 
    'tblMaterials.Close 
    Set tblItems = Nothing 
    'Set tblMaterials = Nothing 
    Set dbs = Nothing 
    Set wrkDefault = Nothing 
    Exit Sub 

Error_trap: 
    wrkDefault.Rollback 
    MsgBox "An error was encountered, but all changes were rolled back." & vbCrLf & _ 
      "Err: " & Err.Number & vbCrLf & _ 
      "Desc: " & Err.Description 
End Sub 
+0

Evet, daha fazla bir açıklamaya ihtiyacım var. 3 sorgu oluşturmak doğru mu? Değişikliğe neden olanı seçmek için 1'inci, ancak sonraki 2 sorgusu yapması gerekeni yapamazsınız – Needtoknow

+0

Lütfen her soruyu yanıtlayın: (1) Alt formunuzun bir PO için satır öğelerinin kayıt kümesine bağlı olduğunu mu varsayıyorum? (2) Kullanıcılar, bir veya daha fazla satır öğesinde QTY'yi güncelleyebilir? (3) Adet eklemek ve çıkarmak için diğer iki tabloyu güncellemeniz gerekir mi? (4) Tablo Projeleri PO'nuzla nasıl ilgilidir? Eşleşecek anahtar görmüyorum? (5) Formunuzun PONum, ReceivedDate, Item # ve AMT (qty?) Için anahtarları vardır. Benim örneğimde, 'Giriş Sorgusu' üzerinde çalıştığınız PO için satır öğeleri seçer. 'Kullanılan Malzemeler' satırlarının nasıl alınacağını bilmeden, ben .. –

+0

1: Evet, girilen her bir PO için, birden fazla öğe olabilir. Yani Purchased_order tablosunda, bu PO – Needtoknow