2015-05-28 34 views
-1

我正在寫一個函數,該函數應該根據某些業務規則計算股票的評級。該規則的第一部分指出,如果存在以前的股票評級,那麼它將對新評級產生影響。如何測試查詢中的第一條記錄

UPDATE:

因爲我以前的問題的說明沒有工作,我刪除了長篇大論的解釋,並更新了下面的代碼,以顯示我想要做的事。

Sub Test() 
'Open table and get value of record above current 

'Set Database Name and Import Tables 
Dim curDatabase As DAO.Database 
Dim tblSource As DAO.TableDef 
Dim rs As DAO.Recordset 
Dim myCurrentValue As Double 
Dim myLookingForValue As Double 
Dim i 

Set curDatabase = CurrentDb 
Set tblSource = curDatabase.TableDefs("tblTest") 
Set rs = curDatabase.OpenRecordset(tblSource.Name, dbOpenDynaset) 

With rs 
    i = .RecordCount 
    .Move 0 

    myCurrentValue = rs.Fields(1).Value 

    If .CurrentRecord = 0 Then 
     rs.MoveNext 
    Else 
     rs.MovePrevious 
     myLookingForValue = rs.Fields(1).Value 
    End If 
End With 

rs.Close 
Set rs = Nothing 
Set tblSource = Nothing 
Set curDatabase = Nothing 

End Sub 

如何檢查當前記錄是否是第一條記錄?

+0

我真的不明白你在問什麼!你想實現什麼?你想要納入什麼「以前的記錄」,以及以何種方式以及以何種方式在哪裏? – luk2302

+0

該表按時間順序排序。如果股票先前已被評級,那麼我需要考慮這一點。 – rohrl77

+0

那麼,你顯然需要ISIN來查詢表格以獲得先前的評分,而目前這在你的功能中是不可用的。 - 但我不明白你到底在問什麼! – PhilS

回答

1

事實上,你沒有顯示,你的函數是如何調用的,使得提出一個適當的解決方案有點棘手。

無論如何,你可以做一個SELECT COUNT(YourTitle)。 如果計數大於1,則知道必須有一個或多個條目。

[編輯]

如果運行此功能在查詢時,你可以不喜歡我suggesteted 只需執行一個查詢,選擇你想與WHERE子句這樣的各個領域:

選擇YourField1,YourField2 From YourTable WHERE entry_date <> YourCurrentDate。

如果此查詢有記錄,請做任何你必須與他們。如果沒有,沒有現有的評級

+0

好的。沒有意識到這是一個重要的信息...我使用Access的「公式生成器」功能從querry內部調用函數。 – rohrl77

1

我仍然不確定你從技術角度要問什麼。

也許答案就像這樣簡單: 要從您以前的評分表中獲取數據,您需要一個查詢來檢索表格中最後(最近)評分的值。這可以通過下面的VBA代碼完成。但是,正如我以前所評論的,ISIN需要這個工作。

' the ISIN needs to be passed as parameter 
Dim strISIN As String 

Dim rs  As DAO.Recordset 
Dim sql  As String 

Dim previousPrice As Double 
Dim previousFairvalue As Double 
Dim previousSignal As Double 

sql = "SELECT t1.entry_date, t1.entry_fairvalue, t1.Price, t1.Signal " & _ 
     " FROM yourTable t1" & _ 
     " WHERE t1.entity_ISIN = '" & strISIN & "' " & _ 
     " AND t1.entry_date = (SELECT MAX(entry_date) FROM yourTable t2 WHERE t2.entity_ISIN = '" & strISIN & "')" 

Set rs = CurrentDb.OpenRecordset(sql) 

If Not rs.EOF Then 
    ' Previous rating exists 
    previousPrice = Nz(rs.Fields("Price").Value, 0) 
    previousFairvalue = Nz(rs.Fields("entry_fairvalue").Value, 0) 
    previousSignal = Nz(rs.Fields("Signal").Value, 0) 
End If 

rs.Close 
Set rs = Nothing 
+0

Upvote提供了一個新的想法...我仍然在尋找答案,但我學到了新的東西 – rohrl77

相關問題