0

私は VS2010 でビジュアル ベーシック アプリケーションを使用しています。シリアル ポート データを取り込み、アクセス データベースに書き込み、データをグラフ化します。データは 1 分に 1 回しか入らないので、オシロスコープを作っているわけではありません。現在、データベース内のレコード数を低く抑えている限り、グラフはテーブル アダプターを使用してデータベースから読み取り、グラフを作成しています。

問題: データベースに追加するレコードが多すぎると、チャートに赤い「X」が表示されます。軸を変更して遊んでみましたが、まだ問題があります。データベース全体をグラフ化する必要はありません。最新の 20 件のレコードで十分です。

データベースの小さなサブセットのみを含むチャート シリーズを作成するにはどうすればよいですか。おそらく、クエリを入力することはできませんか?私は一般的にデータベースに非常に慣れていないので、これは簡単なことかもしれません。

ありがとう、キャスバー

4

1 に答える 1

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 イベントで呼び出します。古いレコードを削除/アーカイブし、X および Yvalue 変数もクリアする必要があると思います。 未テストですのでご了承ください。

于 2012-04-15T03:18:21.950 に答える