2012-04-08 45 views
0

我在VS2010中使用Visual Basic應用程序。它接收串行端口數據,將其寫入訪問數據庫,然後繪製數據圖。數據只能每分鐘進入一次,所以不像我在建示波器。現在,圖表正在使用表格適配器從數據庫中讀取數據,並且圖表很好,只要我將數據庫中的記錄數量保持爲低。如何使用基於數據子集的系列創建.net圖表對象?

問題: 如果我向數據庫添加太多記錄,圖表會顯示一個紅色的「X」。我玩過改變軸,但它仍然是一個問題。我並不需要繪製整個數據庫。最近的二十個記錄就足夠了。

如何製作只包含數據庫中一小部分數據的圖表系列。也許冷卻填充查詢?一般來說,我對數據庫非常陌生,所以也許這很簡單。

感謝, Casbar

回答

1

您只需要返回最新的20條記錄每分鐘,因此,例如使用定時器控制,並在其Tick事件中讀取最後20條記錄插入到數據庫中。

在Microsoft Access中,創建一個查詢以確認您應該返回到.Net應用程序的結果。下面是在MS Access運行SQL查詢:

SELECT TOP 20 * FROM tblData ORDER BY DateCreated 

SELECT TOP 20 * FROM tblData ORDER BY tblID DESC 

現在在你的.NET應用程序,你需要使用以下命名空間:

Imports System.Data.OleDb 

然後讀取的最後一個來自Access數據庫的20個值:

Private Xvalues as New List(Of Integer) 
Private Yvalues as New List(Of Integer) 

Private Sub GetData() 

Dim con As OleDbConnection 
Dim sql As String 
str = "Provider=Microsoft.Jet.oledb.4.0;Data Source=C:\yourAccessDB.mdb;" 
con = New OleDbConnection(str)  
sql = "SELECT TOP 20 * FROM tblData ORDER BY DateCreated" 
Dim cmd As OleDbCommand 
Dim r As OleDbDataReader 
Try 
    con.Open() 
    cmd = New OleDbCommand(sql, con) 
    r = cmd.ExecuteReader() 
    While dr.Read() 
    XValues.Add(Convert.ToInt32(r("chartX"))) 
    YValues.Add(Convert.ToInt32(r("chartY"))) 
    End While 
    r.Close()  
    con.Close()  
Catch ex As OleDbException 
    MsgBox(ex.Message, MsgBoxStyle.Critical, 「Oledb Error」) 
Catch ex As Exception 
    MsgBox(ex.Message, MsgBoxStyle.Critical, 「General Error」) 
End Try 
End Sub 

然後鉤住上面的GetData()方法,並在Timers Tick Event中調用您的圖表函數。我想象你將需要刪除/存檔舊記錄並清除X值也是Y值變量。 請注意未經測試。