2013-04-06 102 views
-1

當只有一條記錄時,這個表達式給出了正確的計算,但是當有多條記錄時,計算的最後一條記錄的值反映在所有的Total_Time(未綁定的文本框)中。我已經給出了加載和打開代碼那個報告。請幫幫我。用於MS Access報表的VBA代碼中的表達式。

Private Sub Report_Load() 

    strSQL = "SELECT * FROM [q_1ltduty]" 
    Set db = CurrentDb 
    Set rs = db.OpenRecordset(strSQL) 
    rs.MoveFirst 
    Do While Not rs.EOF 
    'Assigning values of fields to varia 
    strtime1 = Op_Time 
    strtime2 = Cl_Time 
    'This is a simple expression my code has some more detailed calculations 
    strhrs = strtime2 - strtime1 
    strtotalhrs = strhrs 
    'Printing the variable in Total_Time textbox(unbound) 
    Me.Total_Time.Value = strtotalhrs 
    rs.MoveNext 
    Loop 
    rs.Close 
    db.Close 
    Set db = Nothing 
    Set rs = Nothing 
End Sub 

Private Sub Report_Open(Cancel As Integer) 

    strSQL = "SELECT * FROM [q_1ltduty]" 
    Me.RecordSource = strSQL 
    Debug.Print strSQL 

    Exit Sub 
    ErrHandler: 
    MsgBox Err.Description 

End Sub 
+1

所以你的問題是......?我不明白你在問什麼。請說明你需要什麼 – Barranka 2013-04-06 16:38:48

+0

每個記錄的值不會改變,文本框只顯示最後的記錄值。 – user2252564 2013-04-07 12:27:28

+0

好吧,你的代碼被定義的方式,正是它應該是。如果你想要所有記錄的* total *(sum),那麼你必須在循環中創建一個「運行總和」:'strtotalhrs = strtotalhrs + strhrs' – Barranka 2013-04-07 20:15:33

回答

0

你的變量strtotalhrs只包含一個記錄的strhrs值,所以每次你經歷一次循環,當前記錄的值會擦除先前記錄的值。你應該做的,而不是刪除的價值正在增加。

循環之前(如果尚未完成):

strtotalhrs = 0 

然後在循環,而不是strtotalhrs = strhrs

strtotalhrs = strtotalhrs + strhrs 

而且應該給你的總和,而不是最後一個值。

+0

你明白了,我不想要總和,而是分開每個記錄。 – user2252564 2013-04-07 12:25:30

+0

但是一個文本框只能保存一個值(計算的結果,就像你想在這裏做的那樣):我以爲你想要這個總和,但看起來不是這樣;你想在文本框中放什麼? – lmsteffan 2013-04-07 12:37:35

+0

我想在Total_Time文本框中打印兩次cl_time-op_time的差異。正如每個記錄這​​兩個時間的值是不同的,文本框在報告的詳細部分。我很感謝您的迴應...謝謝,但它還沒有解決我的問題,請幫助 – user2252564 2013-04-07 14:22:33