2017-07-10 12 views
1

特定のシナリオでデータを手動で入力するために使用するフォームを作成しようとしています。ほとんどのデータは、正常に動作しているCSVファイルから入力されます。私は4テーブル、PartAssemblyMachineOrderJobを持っています。私は基本テーブルに入力するためのコード、Partをフォームから問題なく作成できました。この問題は、部品がPID自動番号フィールドによって参照され、アセンブリが自動番号フィールドAIDによって参照されているAssemblyおよびMachineOrderテーブルにデータを入力しています。私はこれを実行するためのさまざまな種類のメソッドを試してきましたが、私のコメントアウトされたコードには少ししか見ることができません。私は、これまでのところ正しいコードに最も近いと信じているものが、Dlookupファンクションの値を見つけているにもかかわらず、Accessがパラメータ値rPIDを求めているというエラーが出ています。私は、同じことがrAIDセクションにも当てはまると仮定しています。フォームからの外部キーを持つINSERT INTOテーブル

それ以外の場合は、INSERTを使用していて、UPDATEメソッドを使用すると、キー違反のエラーが表示されることがあります。

フォームが私の問題があるかもしれないもの上の任意のアドバイスは大歓迎され、私は学生ですHOTEntry

と呼ばれ、これは私がそうどんなプロのアプリケーションで学んだものを使用しようとしている私の最初の時間ですすべての建設的な批判が欲しい!謝罪これはかなり具体的な質問ですが、私は無駄に二日間のためにそれに取り組んできたので、私は本当にこの上のヘルプを使用することができれば...

マイコード:

Sub HOTParts2() 

Dim rPID As Integer 
Dim rAID As Integer 
Dim dbs As DAO.Database 
Dim sqlstr1 As String 
Dim sqlstr2 As String 
Dim sqlstr3 As String 
Dim sqlstr4 As String 

Set dbs = CurrentDb 

'sqlstr1 = "INSERT INTO Assembly (PID, ModelNum, ModelRev, ModelDescription) " _ 
'  & "SELECT (PID,Forms!HOTEntry!txtHotModel, Forms!HOTEntry!txtHotRev, Forms!HOTEntry!txtHotDes)" _ 
'  & "FROM Part " _ 
'  & "WHERE Part.PartName = Forms!HOTEntry!txtPartName AND Part.Config = Forms!HOTEntry!txtConfigEntry AND Part.Rev = Forms!HOTEntry!txtRevEntry" 
sqlstr1 = "INSERT INTO Assembly (ModelNum, ModelRev, ModelDescription,PID) " _ 
     & "VALUES (Forms!HOTEntry!txtHotModel, Forms!HOTEntry!txtHotRev, Forms!HOTEntry!txtHotDes," & "rPID" & ");" 
' 
'sqlstr2 = "UPDATE Assembly " _ 
'  & "SET PID =" & rPID & " " _ 
'  & "WHERE Assembly.ModelNum = Forms!HOTEntry!txtHotModel And Assembly.ModelDescription = Forms!HOTEntry!txtHotDes And Assembly.ModelRev = Forms!HOTEntry!txtHotRev;" 
' 
'sqlstr3 = "INSERT INTO MachineOrder (AID, Serial, CustName) " _ 
'  & "SELECT (AID,Forms!HOTEntry!txtHotSerial, Forms!HOTEntry!txtHotCust)" _ 
'  & "FROM Assembly" _ 
'  & "WHERE Assembly.Model=Forms!HOTEntry!txtHotModel And ModelDescription= Forms!HOTEntry!txtHotDes And ModelRev = Forms!HOTEntry!txtHotRev; " 
sqlstr3 = "INSERT INTO MachineOrder (Serial, CustName, AID) " _ 
     & "VALUES (Forms!HOTEntry!txtHotSerial, Forms!HOTEntry!txtHotCust," & "rAID" & ");" 
' 
'sqlstr4 = "UPDATE MachineOrder " _ 
'  & "SET AID =" & rAID & " " _ 
'  & "WHERE AID IS NULL;" 

rPID = DLookup("PID", "Part", "PartName = " & "'" & Forms!HOTEntry!txtPartName & "'" & " And " & "Config = " & "'" & Forms!HOTEntry!txtConfigEntry & "'" & " And " & "Rev = " & "'" & Forms!HOTEntry!txtRevEntry & "'") 

DoCmd.RunSQL sqlstr1 
'DoCmd.RunSQL sqlstr2 

rAID = DLookup("AID", "Assembly", "ModelNum = " & "'" & Forms!HOTEntry!txtHotModel & "'" & " And " & "ModelDescription = " & "'" & Forms!HOTEntry!txtHotDes & "'" & " And " & "ModelRev = " & "'" & Forms!HOTEntry!txtHotRev & "'") 

DoCmd.RunSQL sqlstr3 
'DoCmd.RunSQL sqlstr4 


End Sub 

答えて

0

まあ、ルックアップされたrPIDとrAIDをクエリで使用する場合は、VBAでそれらを設定するだけではありません。手動でそれらをSQLステートメントで入力し、パラメーターとQueryDefを使用し、QueryDefのパラメーターを入力するか、SQLステートメントの中にDLookUpを入れます。 はあなたの最初の文では、ここで最初のアプローチでのみ引用符で囲まれていないRPIDを行く、とRPIDが設定された後:

rPID = DLookup("PID", "Part", "PartName = " & "'" & Forms!HOTEntry!txtPartName & "'" & " And " & "Config = " & "'" & Forms!HOTEntry!txtConfigEntry & "'" & " And " & "Rev = " & "'" & Forms!HOTEntry!txtRevEntry & "'") 
sqlstr1 = "INSERT INTO Assembly (ModelNum, ModelRev, ModelDescription,PID) " _ 
    & "VALUES (Forms!HOTEntry!txtHotModel, Forms!HOTEntry!txtHotRev, Forms!HOTEntry!txtHotDes," & rPID & ");" 
DoCmd.RunSQL sqlstr1 
+0

うわー、私はすでにそれを試してみましたと思ったが、私は変数の後sqlstr文を持つと思うがそれを置きます本当に設定されたトリックでした。ありがとうございました! – ZachE

関連する問題