Как создать объект диаграммы .net с серией на основе подмножества данных?

Я работаю в VS2010 над визуальным базовым приложением. Он принимает данные последовательного порта, записывает их в базу данных доступа, а затем отображает данные в виде графика. Данные приходят только раз в минуту, так что я не собираю осциллограф. Прямо сейчас диаграмма считывается из базы данных с помощью адаптера таблицы и прекрасно отображается в виде графика, пока я держу количество записей в базе данных на низком уровне.

Проблема: если я добавлю слишком много записей в базу данных, на диаграмме будет отмечен красный крестик. Я играл с изменением осей, но это все еще проблема. Мне действительно не нужно отображать всю базу данных. Двадцати самых последних записей будет достаточно.

Как я могу создать серию диаграмм, в которой есть только небольшое подмножество базы данных. Возможно, он будет заполнен запросом? Я очень новичок в базах данных в целом, так что, может быть, это легко.

Спасибо, Касбар


person Casbar77    schedule 08.04.2012    source источник


Ответы (1)


Вам нужно возвращать только последние 20 записей каждую минуту, поэтому, например, используйте элемент управления таймером и в его событии тика извлеките последние 20 записей, вставленных в базу данных.

В Microsoft Access создайте запрос, чтобы подтвердить результаты, которые вы должны получить в приложении .Net. Вот SQL-запрос, выполняемый в MS Access:

SELECT TOP 20 * FROM tblData ORDER BY DateCreated

or

SELECT TOP 20 * FROM tblData ORDER BY tblID DESC

Теперь в вашем приложении .net вам нужно использовать следующее пространство имен:

Imports System.Data.OleDb

Затем прочитайте последние 20 значений из базы данных Access:

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. Обратите внимание, что не тестировалось.

person Jeremy Thompson    schedule 15.04.2012