2013-07-25 7 views
1

기록 주가가있는 데이터베이스를 만들었습니다. 내 양식에는 두 개의 콤보 상자, ComboBox_TickerComboBox_Date이 있습니다. 이러한 콤보 박스가 채워지면 데이터베이스를 확인하고 해당 데이터가 데이터베이스에 있는지 확인하려고합니다. 그렇다면 Label_If_Present 레이블의 텍스트를 "데이터베이스"로 변경하고 싶습니다.ComboBox 변경 이벤트로 코드 트리거하는 방법

변경 이벤트에 문제가 발생합니다. 내가 텍스트 상자에서 데이터를 변경하면이 모든 일이 발생하기를 바랍니다. .TextChanged.LostFocus 이벤트를 모두 시도했습니다. '.TextChanged'는 코드를 일찍 트리거하고 SQL 명령문에 throw 및 오류를 발생시킵니다. `.LostFocus '이벤트는 내 코드를 전혀 트리거하지 않습니다. 나는 성공적으로 내 프로젝트 내에서 다른 형태에이 개념을 구현 한

Public databaseName As String = "G:\Programming\Nordeen Investing 3\NI3 Database.mdb" 
Public con As New OleDb.OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source =" & databaseName) 
Public tblName As String = "Historical_Stock_Prices" 

Private Sub Change_Labels(ByVal sender As Object, ByVal e As EventArgs) Handles ComboBox_Ticker.TextChanged, ComboBox_Date.TextChanged 
    con.Close() 
    Dim dr As OleDbDataReader 
    con.Open() 
    If (File.Exists(databaseName)) Then 
     Dim restrictions(3) As String 
     restrictions(2) = tblName 
     Dim dbTbl As DataTable = con.GetSchema("Tables", restrictions) 
     If dbTbl.Rows.Count = 0 Then 
     Else 
      Dim cmd2 As New OleDb.OleDbCommand("SELECT * FROM " & tblName & " WHERE Ticker = '" & ComboBox_Ticker.Text & "' " & " AND Date1 = '" & ComboBox_Date.Text & "'", con) 
      dr = cmd2.ExecuteReader 
      If dr.Read() = 0 Then 
       'If record does not exist 
       Label_If_Present.Text = "" 
      Else 
       Label_If_Present.Text = "In Database" 
      End If 
      con.Close() 
     End If 
    Else 
    End If 
End Sub 

:

여기에 내 현재 코드입니다. 이 하나는 약간 다르므로 나는 왜 이것이 작동하지 못하는지 알 수 없다.

+0

SelectedItemChanged 또는 SelectedIndexChanged (또는 이와 비슷한 항목)는 이와 같이 일반적으로 사용됩니다. –

답변

2

TextChanged 이벤트를 처리해야하지만 DropDownStyleDropDownList으로 설정해야 Text 속성을 주어진 값으로 만 사용할 수 있습니다.
그런 다음 두 콤보 상자 모두 값을 선택했는지 확인하십시오. 이 같은 것이 작동해야합니다.

If ComboBox_Ticker.Text <> "" AndAlso DateTime.TryParse(ComboBox_Date.Text, Nothing) Then 
+1

아마 그냥 텍스트보다는 "DateTime.TryParse (ComboBox_Date.Text, Nothing)"을 사용하여 실제 날짜의 날짜 표시기를 확인하는 것이 좋습니다. 또한 주입 공격을 피하기 위해 [명령 매개 변수] (http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters.aspx)를 조사해야합니다. – kwwallpe

+0

부분적으로 작동합니다. 원래는 하나의 콤보 박스조차 완료 할 수 없었습니다. 이제 나는 하나의 공동 상자를 채울 수 있지만, 한 가지를 다른 것에 입력하자마자 오류가 다시 발생합니다. 두 콤보 상자 모두 입력을 마칠 때까지 기다리지 않습니다. – gromit1

+0

@kwwallpe이 오류는 '처리되지 않은'System.Data.OleDb.OleDbException '형식의 예외가 System.Data.dll에서 발생했습니다. 추가 정보 : 조건 식의 데이터 형식이 일치하지 않습니다.' – gromit1