2014-02-27 52 views
2

我正在爲Visual Basic中的虛擬運輸公司製作數據庫管理系統。如何更改多個表中的字段信息

我在mysql中有3個表:operations, employees, vehicles

他們每個人都有一個像狀態爲(Active/Inactive)的字段。當我將一名員工和一輛車分配到新的運輸操作時,狀態字段更改爲activebusy

當驅動程序返回並點擊Conclude完成操作時,我想要更改所有3個表中的狀態字段,如Non-busy or concluded

我不知道該怎麼做,我不知道如何改變3個不同的表中的3個字段的信息只需點擊一下。

+0

3表有任何相同的外鍵或主鍵 – Sathish

+0

所有的3表都有主鍵和外鍵,它們是員工代碼,操作代碼和車輛代碼,這些都是唯一的。但是我真的不知道應該在VB中寫什麼代碼才能完成這項工作。如果一張桌子很好,應用程序已經將操作狀態更改爲「結束」。困難的部分是讓它自動同時發生,改變用該代碼標識的字段的狀態。 –

+0

你知道觸發器嗎?當一張桌子更新了另外兩張桌子的更新時,使用觸發器 – Sathish

回答

0

我建議(如果您可以更改表格的結構)只在操作表中留下狀態字段,並通過檢查他們的激活操作來檢查員工和車輛的狀態。這樣可以保持系統中數據的一致性。

+1

我喜歡這種方式:想知道如何處理非活動員工(例如假期/疾病)或車輛(例如維護)的其他原因? @ A.Barbosa,你是否在意這種複雜性? – richaux

0

首先建立了一個偵聽器按鈕

AddHandler button.Click, addressof update_tables 

然後設置子程序:

Private Sub update_tables() 

    ' connect to the MySQL database 
    Dim MyConn As New MySqlConnection("Server=ServerName; Database=db_name; user=username; password=password;") 

    ' the following code will update the tables for you 
    Dim MyCommand As New MySqlCommand() 
    Dim myReader As MySqlDataReader 
    MyCommand.Connection = MyConn 
    Dim query As String 
    query = "update operations set flag = 'active' where driver = 'tom'; update employees set flag = 'active' where driver = 'tom'; update vehicles set flag = 'active' where driver = 'tom'" 
    MyCommand.CommandText = query 
    MyConn.Open() 
    myReader = MyCommand.ExecuteReader() 
    myReader.Close() 
    MyConn.Close() 
    MyConn.Dispose() 

End Sub 

所有三個表將更新一次。

+0

只是一些想法:爲什麼使用ExecuteReader而不是ExecuteNonQuery?我認爲你應該將這些包裝在[事務]中(http://dev.mysql.com/doc/refman/5.0/es/connector-net-examples-mysqlcommand.html#connector-net-examples-mysqlcommand-transaction )以確保一致性(這將需要在事務中調用3個語句而不是您的一體化查詢)。 – richaux

+0

非常感謝你!去嘗試一下。 –

相關問題