2017-06-02 42 views
-2

我在我的程序中有各種搜索框(每個表單一個),它被編碼以便通過各種方法返回結果,並且只要返回的結果是整數格式,它就可以很好地工作。我目前的問題是我正在創建一個新表單,並且需要列表搜索框來顯示REPAIR_DATE列的搜索條件找到的所有結果,這顯然是DateTime字段而不是整數。VB通過搜索返回日期

我當前的代碼如下:

Private Sub btnSearch_Click(sender As System.Object, e As System.EventArgs) Handles btnSearch.Click 
    Cursor = Cursors.WaitCursor 
    Dirty() 

    If cbColName.Text = "SEARCH BY" Then 
     MeMsgBoxSearchCriteria.ShowDialog() 
    Else : lbSearchResults.Items.Clear() 
     Select Case MaintenanceDataSet.Maintenance_Table.Columns(cbColName.Text).DataType 
      Case GetType(Integer) 
       DV.RowFilter = cbColName.Text & " = " & tbSearchInput.Text.Trim 
      Case GetType(Date) 
       DV.RowFilter = cbColName.Text & " = #" & tbSearchInput.Text.Trim & "#" 
      Case Else 
       DV.RowFilter = cbColName.Text & " Like '*" & tbSearchInput.Text.Trim & "*'" 
     End Select 

     If DV.Count > 0 Then 
      For ix As Integer = 0 To DV.Count - 1 
       lbSearchResults.Items.Add(DV.Item(ix)("ID")) 
      Next 
      If DV.Count = 1 Then 
       lbSearchResults.SelectedIndex = 0 
       Dim ix As Integer = MaintenanceDataSetBindingSource.Find("ID", CInt(lbSearchResults.SelectedItem)) 
       MaintenanceDataSetBindingSource.Position = ix 
      Else 
       lbSearchResults.Visible = True 
       lbSearchResults.BringToFront() 
      End If 
     Else 
      ' Display a message box notifying users the search criteria is not found. 
      MeMsgBoxNoSearch.ShowDialog() 
     End If 
    End If 
    Cursor = Cursors.Default 
End Sub 

Private Sub lbSearchResults_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lbSearchResults.SelectedIndexChanged 
    Dim ix As Integer = MaintenanceDataSetBindingSource.Find("ID", CInt(lbSearchResults.SelectedItem.ToString)) 
    MaintenanceDataSetBindingSource.Position = ix 
    lbSearchResults.Visible = False 
End Sub 

目前我只得到一個記錄ID或ID的回報,而不是在REPAIR_DATE列。

我試圖重新定義:「的類型‘整數’不能轉換到‘日期’值」

CInt(lbSearchResults.SelectedItem.ToString) 

CDate(lbSearchResults.SelectedItem.ToString) 

,並將其與誤差

我真的很茫然如何讓這個REPAIR_Date回來。

我對VB還是比較新的,不確定如何正確地將REPAIR_DATE結果帶回來,而不是整數。我確實得到了結果,但當點擊其中一個返回的結果時,它應該加載該記錄。當選擇返回值時,它會導致程序中止上面列出的錯誤,主要是因爲它正在尋找返回一個不是日期的整數。我真的明白爲什麼錯誤信息和爲什麼失敗,我只是不知道如何解決它。

在我的其他表格中使用相同的代碼完美地工作,並帶回我的LOAD_NUMBER這是一個整數。很明顯,對代碼進行了細微的更改以適應當前表單的需要。

之前有人問或要求我爲什麼沒有嘗試過DeBugging ...我不是真正熟悉調試功能,雖然我已經嘗試了無數次使用調試它只顯示它是從ID獲得結果字段並返回ID整數。所以這不是真正有用的,因爲它正在帶回代碼目前正在告訴它做的事情。

lbSearchResults.SelectedItem.ToString是隱藏的列表框,它變得可見並顯示搜索時返回的項目。然後,我可以選擇我想從該列表框&中加載相關記錄的結果。可能不是最有效的方法來做到這一點,但我仍然在學習,並在其他網頁上工作。

Jaxedin:你的obs是正確的......這是問題所在。該代碼旨在將所有結果導入可點擊的列表框(在這種情況下按日期)。

到DV參考如下:Private DV As DataView 我很肯定的問題是內部的私人小組lbSearchResults_SelectedIndexChanged子,因爲如果我試圖改變九是它說不能更改日期的整數(顯然)一個日期,這是我迷失的地方。我希望這更清楚一點......?


接聽MIC:

是主鍵是ID字段。我不想將ID轉換爲日期。我期待在任何記錄中找到搜索條件。一旦找到,我希望它在列表框中顯示REPAIR_DATE列結果。當我點擊日期時,它會加載記錄... ID字段被設置爲知道要加載哪條記錄。

我有一個在數據庫中有一個數據列的CB我想要搜索。通過選擇特定數據列,搜索條件僅在該列中查找,而不是整個記錄。我有一個用戶輸入搜索條件的結核病。

例如,用戶搜索「交流發電機」並選擇APU_REPAIR_DESCRIP作爲要搜索的列。任何具有搜索到的單詞交流發電機的修理記錄都將返回並且工作,只有我獲得記錄ID號(s )而不是修理日期(s)。 我正在使用MS SQL 2015作爲我的數據庫。

我不知道你需要看到什麼代碼才能進一步理解我的請求。

+3

[如何調試小程序](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/) – Plutonix

+0

Plutonix,相信我這不是一個小程序。我請求協助的頁面是479行代碼,不包括加1200行,我的「默認」形式和其他6種其他形式的近似等長或更多。我僅在我的問題上發佈了相關代碼。 –

+1

你確定這不是一個錯字嗎?您正在「ID」列中搜索日期。 – Jaxedin

回答

0

爲什麼你認爲你需要這條線?

CDate(lbSearchResults.SelectedItem.ToString) 

該代碼沒有足夠的細節或解釋來說明,所以我們必須猜測。這些表是否都有一個名爲「ID」的主鍵,它是一個整數? 在這種情況下,所有的

CInt(lbSearchResults.SelectedItem) 

正在做的是取消裝箱,其被存儲爲列表框項目的對象的整數值。

所以目前還不清楚爲什麼要將該值轉換爲日期。如果你能解釋說有更多的機會可以幫助你。或者,如果你可以調試你的例程,看看它做了什麼,它做了什麼「錯誤」,並解釋這一點。

例如您的列表框是否正確填充?要按日期過濾,請使用

cbColName.Text & " = #" & tbSearchInput.Text.Trim & "#" 

根據數據庫提供者的不同,這可能會也可能不會。 https://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression(v=vs.110).aspx

也許這將有助於從Eric Lippert所發佈的plutonix的建議,在那裏它說(自己)解釋爲什麼你的程序的每一行顯然是正確的。