Smeezy Ответов: 4

Работа с базой данных


Я использую C# и базу данных Access (в конечном итоге это будет sql). То, что я пытаюсь сделать, - это прочитать данные из двух столбцов. Один столбец-это идентификатор, а другой-данные, которые мне нужны.

Однако мне нужны только данные из определенных строк. Данные (измерения) поступают с машины автоматически. Я хотел бы иметь возможность считывать эти данные в режиме реального времени, каждый раз, когда они поступают, а затем иметь прямоугольник, меняющий цвет, градиентный стиль, основанный на измерении. Идея заключается в том, что кто-то может посмотреть на экран и легко увидеть, является ли их число приемлемым, основываясь на его цвете. Зеленый, желтый и красный цвета, интенсивность меняется в зависимости от того, насколько близко измерение находится к своим минимальным/максимальным пределам.

На самом деле мне не нужно видеть данные, управление цветами в объекте было бы более важным.

Вот вам пример:

1. Получает данные в базе
2. Моя программа предупреждена (или просто настроена на проверку каждые 60 секунд)
3. программа повторяет цикл, сверяя данные со стандартом.

(т. е. должно быть 1.0 +/-.5. На самом деле это .51, поэтому прямоугольник показывает желтый цвет)
или
(то есть, должно быть 1.0 +/-.5. На самом деле 1.48, так что прямоугольник показывает красный цвет)

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

Это основная идея.

Что я уже пробовал:

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

4 Ответов

Рейтинг:
14

Smeezy

Спасибо за это. Я подумал, видя, как я уже был подключен к базе данных, что ничего из этого:

"

string AccessConnection = "ACE12 connection string";
      string AccessQuery = "SELECT Reading FROM Table WHERE Identifier = ?";
      OleDbConnection conn = new OleDbConnection(_con)) {
      OleDbCommand cmd = new OleDbCommand(AccessQuery, conn);


это было бы необходимо. Или я должен смотреть на игнорирование моего текущего соединения и просто извлекать нужные мне данные с помощью предоставленного вами кода? Это только на стадии тестирования. Фактическая программа будет использовать базу данных SQL.

Что касается всего остального, мне нужно только использовать стандартные SQL - запросы для достижения своей цели?


Richard Deeming

В каком смысле это должно быть "решением" вашего вопроса?

Рейтинг:
1

RickZeeland

Может быть, вы можете использовать И oledbdatareader, смотрите пример здесь: Использование баз данных Access в C#? - переполнение стека[^]


Рейтинг:
1

Smeezy

Могу ли я добавить изображения с этими вопросами?

В этой базе данных содержится 80 таблиц. Все мои данные поступают примерно из 4 таблиц. Это одно обеспечивает фактические измерения.

datapage.mbd (база данных)
dbo_FullView_Transaction_Data (таблица)
Variable_SID (столбец с уникальным номером для каждой строки в столбце Data_Value)
Data_Value (столбец с результатами обработки данных)


Рейтинг:
0

MadMyche

Несколько частей к этому.

Во-первых, это получение значения из базы данных. На самом деле не так уж много, чтобы работать над спецификой вашего вопроса, но из того, что я могу сказать, вы работаете с MS Access. Это довольно общий пример, так как я ничего не знаю о таблицах или именах столбцов. Что это сделает, так это просто вернет значение из любого идентификатора инструмента, который вы передадите. Очевидно, вам нужно будет изменить некоторые значения и возможные типы.

public Decimal GetInstrumentValue(int InstrumentID) {
     string AccessConnection = "ACE12 connection string";
     string AccessQuery = "SELECT Reading FROM Table WHERE Identifier = ?";
     OleDbConnection conn = new OleDbConnection(_con)) {
          OleDbCommand cmd = new OleDbCommand(AccessQuery, conn);
          cmd.Parameters.AddWithValue("@Identifier", YourIdentifierValue);
          conn.Open();
          Decimal RetrievedValue = (Decimal)cmd.ExecuterScalar();
          conn.Close();
     }
}

Теперь перейдем к части раскраски. Простая желто-зелено-красная с абсолютными порогами-это простая логика если-то
// NO specific language here, proto-code
if (value < 0.5) set color to yellow
else if (value >  1.5) set color to red
else set color to green

Выполнение постепенного изменения цвета будет немного сложнее без миллиона линий "если-то".