2013-10-07 42 views
0

我有2種形式選擇更新SQL不工作

第一種形式

Public Class frmMain 

Friend strBillIDNumber As String 
Friend strBillPassword As String 
Friend ds As New DataSet 
Friend cnn As OleDbConnection 
Friend sql As String 
Friend adptr As OleDbDataAdapter 
Dim attempt As Integer = 1 

Private Sub btnSign_Click(sender As Object, e As EventArgs) Handles btnSign.Click 

    Dim connectionString As String 
    connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Renz\Documents\Visual Studio 2012\FINAL\Database\UsersDB.accdb;" 
    sql = "Select ID, LASTNAME, FIRSTNAME, LOGINSTATUS from TblUser" 
    cnn = New OleDbConnection(connectionString) 
    Try 
     cnn.Open() 
     adptr = New OleDbDataAdapter(sql, cnn) 
     adptr.Fill(ds) 



     For i = 0 To ds.Tables(0).Rows.Count - 1 

      If ds.Tables(0).Rows(i).Item(0) = txtID.Text Then 
       MessageBox.Show("UserName Matched") 
       If ds.Tables(0).Rows(i).Item(1) = txtPassword.Text Then 
        MessageBox.Show("Password Matched") 

        If txtPassword.Text = "admin" Then 
         MessageBox.Show("You are now Logged In as Admin.") 
         frmFaculty.Show() 
         Me.Hide() 
        Else 
         frmStudent.lblSI.Text = ds.Tables(0).Rows(i).Item(0) 
         frmStudent.lblLN.Text = ds.Tables(0).Rows(i).Item(1) 
         frmStudent.lblFN.Text = ds.Tables(0).Rows(i).Item(2) 
         frmStudent.lblLS.Text = ds.Tables(0).Rows(i).Item(3) 
         MessageBox.Show("You are now Logged In.") 
         frmStudent.Show() 
         Me.Hide() 
        End If 
       Else 
        MessageBox.Show("Invalid Password.") 
        MessageBox.Show("Please Try Again." & vbNewLine & "ATTEMPT: " & attempt & " out of 3") 
        attempt = attempt + 1 
       End If 
      End If 

     Next 

     adptr.Dispose() 
     cnn.Close() 
    Catch ex As Exception 
     MessageBox.Show("Please Try Again!") 
    End Try 

    'log-in attempt 3x fail' 
    If attempt > 3 Then 
     MessageBox.Show("You have exceeded the number of login attempt." & vbNewLine & "Please Contact the Administrator.") 
    End If 
End Sub 

我的第二個形式具有

Imports System.Data.OleDb 

Public Class frmStudent 
Dim TimeInHold As String 
Private Sub loginBTN_Click(sender As Object, e As EventArgs) Handles loginBTN.Click 

    Dim cnn2 As New OleDbConnection 
    Dim Command As OleDbCommand 
    Dim i As Integer 
    Dim sql2 As String 
    Dim status As String 

    Try 
     cnn2 = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Renz\Documents\Visual Studio 2012\FINAL\Database\AuditDB.mdb;") 
     cnn2.Open() 

     sql2 = "INSERT INTO Audit ([ID],[TIMEIN]) VALUES('" & frmMain.txtID.Text & "','" & DateTime.Now & "')" 

     Command = New OleDbCommand(sql2, cnn2) 
     i = Command.ExecuteNonQuery 

    Catch ex As Exception 
     cnn2.Close() 

    End Try 

    MessageBox.Show("You have successfully Signed in." & vbNewLine & " Please Don't Forget to Logout.") 
    frmMain.cnn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Renz\Documents\Visual Studio 2012\FINAL\Database\UsersDB.accdb;") 
    frmMain.cnn.Open() 
    frmMain.adptr = New OleDbDataAdapter(frmMain.sql, frmMain.cnn) 
    frmMain.adptr.Fill(frmMain.ds) 
    If frmMain.ds.Tables(0).Rows(i).Item(0) = lblSI.Text Then 
     frmMain.sql = "UPDATE TblUser SET LOGINSTATUS = 'SignedIn'" 

     frmMain.cnn.Close() 
    End If 
    Me.Close() 
    frmMain.Show() 
    frmMain.txtID.Text = String.Empty 
    frmMain.txtPassword.Text = String.Empty 
End Sub 

我不能讓我的SELECT和UPDATE SQL語句將從表單1中獲取數據集的工作。單擊按鈕時,它會將「LoginStatus」字段更新爲「已簽入」值。

P.S.我正在創建一個闖入,超時監控系統,以確定用戶是管理員還是學生,並將其重定向到相應的表單。學生表格將登錄並註銷按鈕,並將記錄他們的時間和時間。點擊登錄時,它將變灰。

請幫助..

+2

這是爲什麼在大寫。請重新格式化,這樣可讀 – Hogan

+0

我做了一個編輯,等待審查。 – ps2goat

+0

您需要了解['WHERE'子句](http://technet.microsoft.com/en-us/library/ms188047.aspx) - 當您嘗試在表中查找匹配的行時,正確的方法是要求SQL查找該行。這樣做的錯誤方法是編寫'For i = 0到ds.Tables(0).Rows.Count - 1'。您還需要(很快)瞭解參數,但是一旦您掌握了'WHERE'子句,至少您的'UPDATE'不會更改表中的每個*行。 –

回答

0

我認爲你是在第二種形式失蹤的ExecuteNonQuery,是有隻有一個用戶,然後查詢是好的,如果超過一個考慮使用「Where子句「例如。

sql= "UPDATE TblUser SET LOGINSTATUS = 'SignedIn' where ID =" <provide id> 

如果這樣不能解決您的問題,請隨時提問。

問候。

0
If frmMain.ds.Tables(0).Rows(i).Item(0) = lblSI.Text Then 
    frmMain.sql = "UPDATE TblUser SET LOGINSTATUS = 'SignedIn'" 

    frmMain.cnn.Close() 
End If 

看來,UPDATE語句沒有得到執行。 我沒有看到它的ExecuteNonQuery。

ps: UPDATE語句是更新表中的所有記錄。小心!
PS2:我不熟悉VB(.NET):)

+0

感謝所有的答覆和遺憾的大寫 SO我將使用這個聲明? SELECT LOGINTYPE FROM TblUser WHERE = ID =「'&frmMain.txtID.text&'」 –

+0

以及如果我在登錄按鈕上使用WHERE CLAUSE,IF語句會是什麼樣子 –