none
如何於資料更新前,設定欄位的值呢? RRS feed

  • 問題

  • 如題,小弟的FROM上使用了Dataset、Bindingsource等元件,該如何(或是哪一個事件)在使用者存檔前於欄位上紀錄修改人、修改時間等資訊呢?
    2007年4月24日 上午 06:26

所有回覆

  • HI,

     

    您可以在建立DataSet指定要執行資料庫的Store Procedure, 然後在Store Procedure中利用GetDate函數查得目前時間, 利用SYSTEM_USER查得目前登入的使用者, 再寫入資料庫即可, 不需要在Client寫Code

     

    tihs

    2007年4月25日 上午 04:49
  • 您好,感謝您的回覆,小弟只是很簡單的SQL的更新動作而已,並沒有用到Store Procedure。

    我目前的作法是在按下存檔按鈕的事件上下指令去更改TABLE上的資料後再下UPDATE的指令!

    小弟的問題是小弟是利用TableAdapter 更新前,有無任何事件可以修改資料?謝謝!

    2007年4月25日 上午 09:26
  • hi,

     

    利用TableAdapter執行更新資料庫記錄的動作, 其SQL敘述是寫在TableAdapter的UpdateCommmand的CommandText裏, 如果要修改資料, 可以在Navigator的SaveItem鍵被Click的時候做:

     

     Private Sub CustomersBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CustomersBindingNavigatorSaveItem.Click
            Me.Validate()
            Me.CustomersBindingSource.EndEdit()
            Me.CustomersTableAdapter.Update(Me.NorthwindDataSet.Customers)

        End Sub

     

    不過如果要記入登入資料庫的使用者名稱, 在Stored Procedure中做會比在程式中做方便一點

     

    tihs

    2007年4月26日 上午 07:14
  • 小弟這部分的使用者是用登入這的程式的使用者代號,所以需要於程式的執行階段才能給他,小弟目前的作法是在存檔按鈕的事件上加上

     

    this.dsBAS1C.BAS_CORP.Rows[bsBAS_CORP.Position]["BUILD_NAME"] = frmMain.user.Name;
                    this.dsBAS1C.BAS_CORP.Rows[bsBAS_CORP.Position]["BUILD_TIME"] = DateTime.Now;

     

    來紀錄使用者名稱和修改時間,不過若是一次更改多筆就會出現問題,因為他只會更改最後一次更改的那一紀錄的資料....

     

    繼續努力中.....

    2007年4月27日 上午 06:14