2017-06-03 4 views
-1

Ich versuche, ein Hotelbuchungssystem zu machen. Die Verfügbarkeit hat mich jedoch etwas verwirrt. Ich habe ungefähr 15 Knöpfe, die ich in der Lage bin, die Zahl in der Datenbank zu speichern, aber wenn das Formular geladen/Datum geändert hat. Ich brauche den Knopf, um rot zu bleiben und nicht zu klicken. Zum Beispiel, wenn ich ein Zimmer 11 von 3/06/17 bis 5/06/17 gebucht hätte, dann müsste ich die Taste rot von 3/06/17 bis 4/06/17 bleiben, da das Zimmer nach der Reinigung noch auf der 5/06/17 gebucht werden kann. Ich hoffe das macht Sinn. Unten ist der Code, den ich verwende, um dies zu tun. Der Code läuft, aber der Button wird nicht rot.Verfügbarkeit mit Access-Datenbank

Ich dachte, muss meine SQL-Anweisung geändert werden, aber ich bin mir nicht sicher. Ich bin ziemlich neu im Codieren, also wäre eine Erklärung hilfreich. Vielen Dank.

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

Haben Sie auch ein Zimmernummer nicht brauchen in Ihrer Anfragen zu benutzen? Ich glaube nicht, dass Sie nur einen Raum verwalten müssen – Steve

+0

Machen Sie die Schaltfläche aktivieren = false, um zu deaktivieren. – jdweng

+0

Dies ist eine großartige Gelegenheit, um zu lernen, wie man den großen in Visual Studio eingebauten Debugger benutzt. Legen Sie einen Haltepunkt fest und beobachten Sie, was mit Variablen passiert, wenn der Code ausgeführt wird. Das erste, was zu tun ist, zu lernen, wie man SQL-Parameter verwendet - das war nicht der richtige Weg, um SQL für mehrere Jahre zu erstellen. – Plutonix

Antwort

0

Sie sollten Ihre Zugangsdatenbank verstehen Sie Ihre Eingabe als Datum, Access-Datenbank ist sehr empfindlich auf Datentypen, zum Beispiel, wenn Sie

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

wird Ihr Code gut funktionieren, wenn Ihre Art User_id Daten Auto Nummer. versuchen so

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

Statt

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

die mit # ersetzen 'ist