2016-05-01 6 views
0

私は3つのフィールドを持つシンプルなフォームを持っています - テーブルVenueからの会場のリストを表示するリストボックス、日付ピッカーを持つテキストボックス、イベント名。会場のテーブルを見て会場IDを選択するには、リストボックスの値が必要です。私は、この会場IDと日付とイベント名のテキストボックスの値でイベントテーブルを更新したいと思います。示すように、私が作成したコードは次のとおりです。insertとselectを使用してSQL文字列を作成する

Private Sub cmdCreateEvent_Click() 

    Dim dteDateHeld As Date 
    Dim strEventName As String 
    Dim strVenue As String 
    Dim strSQL As String 

    'check at least the event name is complete - venue and date may be selected after creating the event - check with Lynette 
    If Me.txtEventName.Text = "" Then 
     MsgBox "Please enter the name of the event in order to create this record", vbOKOnly 
     Exit Sub 
    End If 

'pass textbox fields to variables 
dteDateHeld = Me.txtDateHeld.Text 
strEventName = Me.txtEventName.Text 


If Me.lstVenue.ListIndex = -1 Then 'no venue selected 
    'create sql string to insert details into table if no venue selected 
    strSQL = "Insert Into Event (EventName, DateHeld) Values (" & strEventName & "," & dteDateHeld & ")" 
Else 
    'Create sql string to insert details into table if venue has been selected 
    strVenue = Me.lstVenue.Selected 
    'strSQL = "Insert Into Event (Venue, EventName, DateHeld)Select from Venue (VenueID) Where VenueName = " & strVenue & " " 
End If 


'execute the sql code to update the table 
CurrentDb.Execute strSQL 

'clear fields 
Me.txtDateHeld.Text = "" 
Me.txtEventName.Text = "" 
Me.lstVenue = Null 

End Sub 

私は本当に私のSQL文字列を終え助けが必要 - あなたは私のコードで間違って何かを見つけることが起こるなら、私が知っていること自由に感じなさい。私はできるだけシンプルにしています。

+0

不完全なのでエラーはありません。私はSQLステートメントを完了するために助けが必要です。指が交差して残りの部分が機能します。 – Pixie007

+0

あなたが提案したようにクエリを設計する前に、私が持っているコードをテストして、他にも多くの問題が発生したと思いました。まず、上記のコードを実行したときに、「コントロールにフォーカスがない限り、コントロールのプロパティまたはメソッドを参照できません」というエラーが発生しました。このエラーは、次の行で生成されました。 If Me.txtEventName.Text = "" Then – Pixie007

+0

申し訳ありません - 最後の投稿は完了していませんでした。それは、テキストボックスのテキストに関するすべてのコードに対して上記のエラーを出しました。グーグルでは、テキストプロパティを値に変更する必要があるようでした。これで、次の行にデータの不一致があることがわかります。dteDateHeld = Me.txtDateHeld.Text。また、リストボックスの選択された値を変数に渡そうとするとエラーになります。strVenue = Me.lstVenue.Selected。エラーはオプション引数ではありません。 – Pixie007

答えて

0

dteDateHeld変数は文字列である必要があります。あなたがやっているようなSQL文字列を作成して日付を渡すときは、変数の周りに#が必要です。文字列の周囲には引用符'が必要です。リストボックスの選択については

strSQL = "Insert Into Event (EventName, DateHeld) Values ('" & strEventName & "',#" & dteDateHeld & "#)"

あなたのIDは、最初の列にある場合は、IDを持っている場合は、のようなSQL文の構築ができない場合でも、あなたはしかしMe.lstVenue.Value

を使用することができます。

挿入する値の数は、選択する値の数と一致する必要があります。値を渡すと、テーブルのフィールドではない値を選択できます。

strSQL = "Insert Into Event (Venue, EventName, DateHeld) Select VenueName, '" & strEventName & "',#" & dteDateHeld & "# FROM Venue Where VenueID = " & Me.lstVenue.Value & " "

+0

感謝ザイダー - 本当に便利でした。私はlstVenueがリストにあるVenueIDではなくVenueIDを返すことを発見しました。イベントテーブルに挿入するVenueIDのように、実際には私の人生は楽になります。今は簡単な挿入物になります。整数を挿入する構文を助けてくれますか?(VenueIDはintフィールドです)またVenueNameではなくVenueIDが返されている理由も知っていますか?私はlstVenueに1列しか持っておらず、それはVenueNameです。選択した値を取得するためにMe.lstVenueを使用しています。 – Pixie007

+0

@ Pixie007リストボックスのレコードセットに名前があるだけの場合、IDが返される理由がわかりません。あなたは2列ありますが、1列は隠されていますか? IDを数値として挿入するのは、 '' INSERT INTO Event(EventID)Values( "&EventID&") "'です。あなたがテキストフィールドのように値の周りに ''はありません。 – Zaider

関連する問題