2017-06-03 4 views
-1

私はホテルの予約システムを作ろうとしています。しかし、入手可能性が私を少し混乱させている。私はデータベースに番号を保存することができますが、フォームの読み込み/日付が変更されたときに約15のボタンがあります。私はボタンを赤くして止められないようにする必要があります。たとえば、3/06/17から5/06/17まで部屋11を予約した場合、3/06/17から4/06/17まではボタンを赤色のままにしておく必要があります。この部屋は、清掃後に5/06/17で予約することができます。私はこれが理にかなってほしい。以下は私がこれをしようとしているコードです。コードは実行されますが、ボタンは赤くなりません。アクセスデータベースを使用している可用性

私はSQL文を変更する必要があると思っていましたが、あまりよく分かりません。私は非常に説明が役立つようにコーディングに新しいです。ありがとう。

Private Sub ReadRecords() 
      Dim btn As Button = Nothing 
      Dim BookingFound As Boolean = False 
      Using MyConn As New OleDbConnection 
       MyConn.ConnectionString = connString 
       MyConn.Open() 
       Dim check As String = "SELECT COUNT(*) FROM [BookingInformation] WHERE [Date In] = '" & dtpDateIn.Value.Date & "' AND [Date Out] = '" & dtpDateOut.Value.Date & "'" 
       Dim BookingExists As Boolean = False 
       Dim command As OleDbCommand = New OleDbCommand(check, MyConn) 
       Using reader As OleDbDataReader = command.ExecuteReader() 
        While reader.Read() 
         If reader(0) = 0 Then 
          BookingExists = False 
         Else 
          BookingExists = True 
         End If 
        End While 
       End Using 
       If BookingExists = True Then 
        Dim getData As String = "SELECT * FROM [BookingInformation] WHERE [Date Out] = '" & dtpDateOut.Text & "'" 
        Dim command2 As OleDbCommand = New OleDbCommand(getData, MyConn) 
        Using reader As OleDbDataReader = command2.ExecuteReader() 
         While reader.Read() 
          BookingFound = True 
          strDateIn = reader("Date In").ToString() 
          strDateOut = reader("DateOut").ToString 
          strRoomNumber = reader("Room Number").ToString 
         End While 
         If BookingFound = True Then 
          btn.BackColor = Color.Red 
         End If 
        End Using 
       End If 
       MyConn.Close() 
      End Using 
     End Sub 

     Private Sub Room_Booking_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
      ReadRecords() 
     End Sub 
+1

で 'を置換され

Dim getData As String = "SELECT * FROM [BookingInformation] WHERE [Date Out] = #" & dtpDateOut.Text & "#" 

代わりの

Dim getData As String = "SELECT * FROM [BookingInformation] WHERE [Date Out] = '" & dtpDateOut.Text & "'" 

を試してみてください?ただ1つの部屋を管理する必要はないと思う。 – Steve

+0

無効にするには、enable = falseボタンをオンにする。 – jdweng

+0

これはVisual Studioに組み込まれた偉大なデバッガの使い方を学ぶ絶好の機会です。ブレークポイントを設定し、コードが実行されるときに何が起こるかを観察します。最初に行うことは、SQLパラメータの使用方法を学ぶことです。これは、SQLを数年にわたって作成する正しい方法ではありません。 – Plutonix

答えて

0

あなたは、あなたのアクセスのデータベースは日付としてあなたの入力を理解させる必要があり、アクセスデータベースは、データ型に非常に敏感であり、あなたが

"SELECT * FROM [user_tb] WHERE user_id=1" 

を書いた場合、あなたのuser_idのデータ型がある場合、たとえばあなたのコードは正常に動作します自動番号。 ので、あなたのクエリでもルームナンバーを使用する必要はありません#

関連する問題