2017-06-28 5 views
0

私はいくつかのチームの大きな入力基準になるリンクされたODBCテーブルを使用してMS Accessでフォームを構築しています。私はそれが大半を持っているが、自動的にメインテーブルのプライマリIDを生成して、エージェントがそうする必要がないようにテキストボックスを設定しようとしています。効果的な自動番号のSQLでの構築。別のテーブルで作成されたIDを使用してMS Accessでテーブルのフィールドを自動集計する方法

ODBCテーブルの世代とローリングの編集が正常に行われており、生成されたコードを関連するフィールドに取り込むだけです。私は、ボタンのクリックにマクロを使用して、次のコード持っています:

Private Sub cmdSubmitDetails_Click() 

Dim strSQL As String 
Dim rst As Recordset 
Dim db As Database 
Dim para As String 

para = InputBox("Please Enter Your User ID:") 
strSQL = "SELECT Min([P_ID]) AS ID FROM QA_IDS WHERE EV_ID = " & para & ";" 

Set db = CurrentDb 
Set rst = db.OpenRecordset(strSQL) 
Me.ID.Text = rst!ID 

rst.Close 
Set rst = Nothing 
Set db = Nothing 


End Sub 

Me.IDは私が移入しようとしている分野です。行内でエラーが発生しています

Set rst = db.OpenRecordset(strSQL) 

実行時エラー '3464'データ型の不一致が条件式に含まれています。

これはMS Accessの最初の本当の話です。私は解決策をオンラインで探しました。どんな助けでも大歓迎です。

+0

条件式 'WHERE EV_ID = "&para & ";"にデータ型の不一致がありますか?おそらく文字列を期待していないのでしょうか?とにかく、AccessデザインGUIを通じてデフォルト値を設定する方が良いかもしれません。 – anotherfred

+0

ありがとうございます。それをテストするために、私はクエリをハード値に変更し、うまくいきました。入力は55231の数値ですが、ODBCテーブルのデータ型はVarCharなので、文字列が動作することを期待していました。より一致する可能性が高い別のデータ型はありますか? –

+0

私はまた、 "SELECT * FROM qrySELECT_MINIMUM_ID"を使用してAccessでパラメータを使用してクエリを構築しようとしましたが、期待される1パラメータが0になってエラーが発生しました。 –

答えて

0

私は別の方法で試していたことを達成することができ、誰かが将来的に役立つと思う投稿をすると思いました。

矛盾したデータ型の問題を回避するために、SQLを実行するために(ユーザーIDの入力を含む)クエリを使用し、それを新しいテーブルに追加しました。次に、DLookupでそのテーブルから情報を取り出し、そのテーブルをパージします。私は次のコードで終わった。

Private Sub cmdSubmitDetails_Click() 

Dim x As String 
Dim y As String 
Dim z As String 

DoCmd.SetWarnings False 
DoCmd.OpenQuery ("AppendID") 
x = DLookup("[ID]", "[TempID]") 
Me.ID = x 
y = DLookup("[EV_ID]", "[TempID]") 
Me.EVALUATOR_ID = y 
DoCmd.OpenQuery ("qryDELETE_TEMP_ID") 
DoCmd.OpenQuery ("qryAddNextCallID") 
DoCmd.OpenQuery ("qryDELETE_MINIMUM_ID") 
DoCmd.SetWarnings True 

End Sub