2016-08-02 3 views
0

これでAccessにデータベースがあり、(ジョブアプリケーション用に)1つのフォームを開いてボタンをクリックすると、コード:Me.OpenArgsは、アクセス時に新しいフォームを開こうとすると常にnullを返します

Private Sub cmdAddDemo_Click() 

DoCmd.OpenForm "sfrmAppDemographics", , , , , , txtApplID.Value 

End Sub 

ここで、txtApplIDは、アプリケーションのテーブル内の「アプリケーションID」番号の数値で埋められたテキストボックスです。私はこの値を "sfrmAppDemographics"フォームに渡して、アプリケーションの前述の形式で表示されたユーザーの正しい人口統計情報を開きます。

だから、私は人口のコードでこれをやったの形成:

Private Sub Form_Open(Cancel As Integer) 

Dim rs As DAO.Recordset 
Set rs = Me.Recordset 
If rs.RecordCount = 0 Then 
    rs.AddNew 
    rs!ApplID = Me.OpenArgs 
    rs.Update 
Else 
    MsgBox Me.OpenArgs 
End If 
Me.Requery 

End Subの

何の人口統計学的情報はありませんのであれば、アイデアがある、それは使用して新しいものを作成します。 ApplIDが渡されたopenargsから取得され、このユーザーの人口統計データがある場合、openargs(メッセージが動作しているかどうかを確認するためのテスト)としてメッセージボックスがポップアップ表示されます。私はいつもエラー "実行時エラー '94':無効なNullの使用" - MsgBoxの行にします。 (データベースには人口統計のレコードがあるため)。私がElse MsgBox Me.OpenArgsを取り出すと、それはApplID 1を持つdbの最初の人口統計情報を表示するだけです。Strange。私は、Form_OpenコードのOpenArgs機能を使ってApplIDを渡すことも、アクセスすることもできないようです。どんな助け?

+0

これは私には意味がありません。フォームのレコードセットに基づいてレコードセットを設定しようとしていますか?まだロードされていない可能性もあります。レコードセットにデータがないかぎり、OpenArgsにはトラップされません.AppIDをチェックすることさえありません。あなたのコードの最上部に 'Debug.Print Me.OpenArgs'を置くと、Form_Openイベントに渡されていることが示されます。 – dbmitch

答えて

1

OpenArgsは、フォームに渡される文字列です。

:OpenArgsとしてさらにIDを渡すために

Private Sub cmdAddDemo_Click() 

    DoCmd.OpenForm "sfrmAppDemographics", WhereCondition:="ApplID = " & txtApplID.Value 

End Sub 

あなたはそれが存在しない場合は、レコードを作成したい場合は、それが理にかなって:あなたはと呼ばれるフォームをフィルタリングしたい場合は、WhereConditionパラメータを使用します

DoCmd.OpenForm "sfrmAppDemographics", WhereCondition:="ApplID = " & txtApplID.Value, _ 
        OpenArgs:=txtApplID.Value 

、その後

Private Sub Form_Open(Cancel As Integer) 

' No need for a separate recordset here 
If Me.RecordsetClone.EOF Then 
    ' We are already in a new record, just set the bound ID control to create it 
    Me!ApplID = Me.OpenArgs 
    ' if you want to save the new record immediately 
    Me.Dirty = False 
End If 

End Sub 

PSあなたのコードでMe.OpenArgsがNullの場合、txtApplIDはNullでした。私は他の理由を見ません。

+0

ありがとうございました!それがトリックでした。 –

+0

しかし、まだ人口統計データを持っていないレコードを開くと、それは壊れているようですが、「実行時エラー '2448'このオブジェクトに値を割り当てることはできません」という行に表示されますMe!ApplID = Me.OpenArgs。新しい空白の人口統計データを作成するにはどうすればよいですか? –

+0

'ApplID'という名前のコントロールを持ち、フォームのApplID列にバインドされていますか?そうでなければ、テキストボックスを作成します。すべてが機能したら、 'Visible = False'に設定することができます。はいの場合は、ロックされていますか? – Andre

0

ただ、アンドレからのコードに、acNewRecをDoCmd.GoToRecordを追加するために必要な、それが滞りなく働いていた...

Private Sub Form_Open(Cancel As Integer) 

    If Me.RecordsetClone.EOF Then 

     DoCmd.GoToRecord , , acNewRec 

     Me!ApplID.Value = Me.OpenArgs 

     Me.Dirty = False 

    End If 

End Sub 
関連する問題