2016-06-01 9 views
0

私はデータベースです//アクセスnoob、だから私に同行してください。私は、コンサルタントとそのベンダーを技術コンサルティング会社に追跡するためのデータベースを用意しています。一部のコンサルタントは独自のベンダーであり、一部のコンサルタントは契約を処理する第三者ベンダーがあります。コンサルタントが自分のベンダーでもある場合、連絡先情報は両者で同じです。 Contact Infoは、ConsultantID(ConsultantTのプライマリキー)とVendorID(VendorTのプライマリキー)のプライマリキーContactIDと外部キーフィールドを持つ別のテーブルに格納されています。combobox.columnプロパティは、vbaでnullの無効な使用を返します

フォームの1つに関連する連絡先情報が既に入力されている場合、既存の連絡先情報レコードを選択して、データベースに他の外部キーIDフィールドを既存のメインフォームのレコードに基づいてレコードを作成します。たとえば、コンサルタントフォームを使用してコンサルタントAの連絡先情報を入力した場合、コンサルタントAのベンダーを追加するためにベンダーフォームを開くと、コンサルタントから「コンサルタントA」を選択し、その情報を入力するオプションが必要ですVendorFのContact InfoフォームにVendorIDを追加しました。

私はほとんどそれを取り組んだと思いますが、最後のことに固執しています。今、私は既存のContactInfoレコードを選択するためのポップアップフォーム(ChooseConsultantInfoF)を持っています。そのフォームでは、既存のレコードを選択するための検索コンボボックス(SelectConsultantCombo)と、ContactInfoTを更新してVendorsFの現在のレコードからVendorIDを既存のレコードに追加するようにコーディングしたコマンドボタン(SaveConsultantbtn)がありますContactInfoで

Option Compare Database 
Option Explicit 

Private Sub SaveConsultantbtn_Click() 
Dim stupid As Long 
stupid = SelectConsultantCombo.Column(0) 
DoCmd.RunSQL "UPDATE ContactInfoT SET VendorID = (Forms!VendorsF!VendorID) Where ContactInfoID = " & stupid & ";" 
End Sub 

Private Sub SelectConsultantCombo_AfterUpdate() 
Dim rst As DAO.Recordset 
Set rst = Me.RecordsetClone 
rst.FindFirst "ContactInfoID = " & Me!SelectConsultantCombo 
Me.Bookmark = rst.Bookmark 
leave: 
Me!SelectConsultantCombo = Null 
If Not rst Is Nothing Then Set rst = Nothing 
Exit Sub 

End Sub 

私は行動にそれを置くしよう

が、私はエラー94を得る:ここでは、ポップアップフォームのコードのすべてがあるのNullの無効な使用とそれが

stupid = SelectConsultantCombo.Column(0) 

私が知っているプルアップコードブロックは、それとは別に動作します - 私の代わりに、変数の数値で一度クリックしてイベントを試してみました:

Private Sub SaveConsultantbtn_Click() 
    DoCmd.RunSQL "UPDATE ContactInfoT SET VendorID = (Forms!VendorsF!VendorID) Where ContactInfoID = 1 ;" 
    End Sub 

問題なく、その問題は、コンボボックスの列を呼び出すことでなければなりません。

私はまた、ヌルを許可するのNzで変数を定義しようとした:

stupid = Nz(Me.SelectConsultantCombo.Column(0), 0) 

、それはまた、作業コードを取得しますが、まだContactInfoT内のレコードに私のベンダーIDを保存しません。コンボボックスのどの列にもNull値は含まれていません(とにかく見つけることはできません)。これは便利ですが、コンボボックスの行ソースがある場合は知らん:

SELECT ContactInfoT.ContactInfoID, ConsultantT.ConsultantID, ConsultantT.FirstName, ConsultantT.LastName FROM ConsultantT INNER JOIN ContactInfoT ON ConsultantT.ConsultantID = ContactInfoT.ConsultantID ORDER BY ConsultantT.[LastName], ConsultantT.[FirstName]; 

アクセスが私のcombobox.columnプロパティを認識しない理由を誰もが知っていますか?または、このエラーを回避するためにVBAでこれを記述する別の方法がありますか?

答えて

0

最初に試してくださいstupid = Me.SelectConsultantCombo.Column(0)(あなたはMe.部分がありません)。

しかし、あなたが本当にやるべきことは、コンボボックスで、あなたのバインドされた列が正しく設定され、ちょうど私がコンボのafterupdateのうち、Me!SelectConsultantCombo = Nullを取り、それが今で完璧に動作stupid = Me.SelectConsultantCombo

+0

バインドされた列はContactInfoIDに設定されていますが、これは正しいです。私は「Me」で既存のコードを試しました。また、 'Stupid = Me.SelectConsultantCombo'と' stupid = Me.SelectConsultantCombo.Value'( 'Me.'の有無にかかわらず試してみました)を試したが、まだエラー94:デバッガでその行をプルアップするNullの無効な使用:\ – AliG

+0

"Me!SelectConsultantCombo = Null'ここでNullに設定しています。あなたがnullにリセットする前にクエリの値を実際に使用するまで待つ必要があります。その行をSaveConsultantbtn_Clickサブに移動するか、あなたのコードは、選択が行われるたびにコンボボックスがnullにリセットされます。 – SunKnight0

0

を使用されていることを確認しています!もちろん、コードのどこかでnullに設定されているコンボセットがあれば、それは他のどこかでnullを引き上げるでしょう!

関連する問題