Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
Особый статус
 Аватар для FloppyDisc
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086

Сортировка по полю (разделение на три категории)

24.11.2016, 00:36. Показов 1513. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Есть вопрос и есть БД с полями: username, comp и error. Последнее заполняется ошибками (логами), они делятся на три типа: предупреждения, ошибки и исключения, там есть свои ключевые слова, но при этом некоторые из них могут присутствовать как в исключениях так и в ошибках.

Так вот, как их (точнее поле error) можно разделить на три части? Реально ли вывести разделенное поле на тот же самый DBGrid или же StringGrid или же сами посоветуйте, пожалуйста?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.11.2016, 00:36
Ответы с готовыми решениями:

Сортировка структуры по полю Tag и по полю Eng
Есть структура: struct _1C { string Tag; string Rus; string Eng; _1C(const string &Tag, const string &Rus, const string...

Считывание данных из файла и разделение на категории (JSON)
Ребят умоляю вас помочь, мне необходимо считать данные про книги с файла Book.xlsx перевести его в JSON и разделить эти книги на...

Разделение блока на три части
имеется код: <div class="content"> <div class="left">1</div> <div class="center">2</div> <div...

25
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,660
Записей в блоге: 21
24.11.2016, 08:42
есть язык запросов к БД, называется SQL
придуман именно для извлечения НУЖНЫХ данных из БД по задаваемым условиям
соответственно, какие данные вы запросите, те и отобразит ваш DBGrid
0
W
 Аватар для kavasaka
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
24.11.2016, 09:21
Цитата Сообщение от FloppyDisc Посмотреть сообщение
разделенное поле
так что ли?:
SQL
1
2
SELECT Таблица1.id, IIf([error]='предупреждения',[error],'') AS P1, IIf([error]='ошибки',[error],'') AS P2, IIf([error]='исключения',[error],'') AS P3
FROM Таблица1;
Миниатюры
Сортировка по полю (разделение на три категории)  
1
Особый статус
 Аватар для FloppyDisc
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
24.11.2016, 13:18  [ТС]
Цитата Сообщение от kavasaka Посмотреть сообщение
так что ли?:
Да, спасибо, что-то на подобие вы правильно поняли суть
Вот реализации могут быть различные... Но логи не состоят только из слов ошибка, исключение и предупреждения а из строки типа: Warning: текст ошибки, дата ошибки, и ключевое END - означает, что ошибка была при завершении работы.
Можно ли как-то пропарсить такую строку средствами Delphi или возможностями SQL - запросов?

И можно вопрос по вашему запросу. На сколько я понял вторым параметром передается значение, а что передается третьим параметром?
SQL
1
IF([error]='ошибки',[error],'')
Заметил еще такое:
SQL
1
2
3
4
5
SELECT Таблица1.id, 
error*(error='исключение') AS P1, 
error*(error='ошибка') AS P2,
error*(error='предупреждение') AS P3 
FROM Таблица
Это тоже самое?
Цитата Сообщение от krapotkin Посмотреть сообщение
есть язык запросов к БД, называется SQL
придуман именно для извлечения НУЖНЫХ данных из БД по задаваемым условиям
Вот в этом и проблема, как уже писал выше - это логи, состоящие из описания ошибки, даты и некоторых ключевых слов, предназначенных для отнесения ошибок к различным категориям типа: Warning, Error, Exception, а еще для отнесения во время чего это произошло: Во время запуска, работы, завершения...

На sql-tutorial прочитал про CHARINDEX, PATINDEX, SUBSTRING а еще LOCATE, REGEXP с ними возможно это реализовать?
0
5966 / 4542 / 1094
Регистрация: 29.08.2013
Сообщений: 28,152
Записей в блоге: 3
24.11.2016, 14:01
покажите что у вас есть и что вы хотите получить

Цитата Сообщение от FloppyDisc Посмотреть сообщение
с ними возможно это реализовать?
хоть по символьный анализ можно сделать, но зачем?
0
Особый статус
 Аватар для FloppyDisc
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
24.11.2016, 14:39  [ТС]
Цитата Сообщение от qwertehok Посмотреть сообщение
покажите что у вас есть и что вы хотите получить
У меня пока ничего нет, поскольку не до конца понял как это можно реализовать...
Цитата Сообщение от qwertehok Посмотреть сообщение
хоть по символьный анализ можно сделать, но зачем?
Чтобы максимально точно определить к какому типу ошибки и относится то или иной сообщение и в какой момент это произошло, во время работы, старт, завершение, но думаю посимвольный лишнее

Вот пример: Warning: текст предупреждения, дата, END - Сообщение-предупреждение записалось во время завершении работы, но это только примерно. Вот как его отнести к типу Warning и группе при завершении END, ну хотя бы к типу Warning, покажите, пожалуйста, хотя бы примерчик, чтобы суть словить
0
5966 / 4542 / 1094
Регистрация: 29.08.2013
Сообщений: 28,152
Записей в блоге: 3
24.11.2016, 14:48
Цитата Сообщение от FloppyDisc Посмотреть сообщение
У меня пока ничего нет, поскольку не до конца понял как это можно реализовать...
тогда покажите что вы хотите получить

Цитата Сообщение от FloppyDisc Посмотреть сообщение
покажите, пожалуйста, хотя бы примерчик, чтобы суть словить
как вам можно пример показать не зная что за информация у вас есть?
0
Особый статус
 Аватар для FloppyDisc
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
24.11.2016, 15:57  [ТС]
Цитата Сообщение от qwertehok Посмотреть сообщение
тогда покажите что вы хотите получить
Вот на скрине видно ошибки в поле LAST ERROR, как мне удалить даты и время и оставить только ключевые слова ENDWORK, BEGINWORK и потом уже думаю сравнивать по запросу, который посоветовал kavasaka с условиями
Т.е нужно убрать все, что идет после даты и времени до двоеточия

З.Ы. Можно отформатированное оставить в DGrid?
Миниатюры
Сортировка по полю (разделение на три категории)  
0
5966 / 4542 / 1094
Регистрация: 29.08.2013
Сообщений: 28,152
Записей в блоге: 3
24.11.2016, 16:01
ничего не видно на картинке - вы можете сделать Printscreen?
0
60 / 60 / 26
Регистрация: 30.05.2016
Сообщений: 293
24.11.2016, 16:24
FloppyDisc, можно менять то что выводится в грид, через DBGrid1DrawColumnCell
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm2.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
  var s:string;
  begin
if column.Index=1 then  //номер поля
s:='+ '+copy(MyQuery1.FieldByName('id').AsString,1,1);
if column.Index=2 then
s:='+ '+copy(MyQuery1.FieldByName('id').AsString,2,1);
if column.Index=3 then
s:='+ '+copy(MyQuery1.FieldByName('id').AsString,3,1);
DBGrid1.Canvas.TextOut(Rect.Left, Rect.Top, s);
end;
1
60 / 60 / 26
Регистрация: 30.05.2016
Сообщений: 293
24.11.2016, 16:27

если еще актуально
0
Особый статус
 Аватар для FloppyDisc
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
24.11.2016, 16:31  [ТС]
Цитата Сообщение от qwertehok Посмотреть сообщение
вы можете сделать Printscreen?
Извиняюсь, просто не я фотографировал и вообще это не мой комп
Распишу так, есть поле LAST_ERR. В нем записи следующего характера:

1. Warning: while(isControllerDetected = false) sgThread Execute: 126
2. Error: param=переходы
3. 21.11.2016 16:05:30: BEGINWORKD
4. 21.11.2016 16:22:22: BEGINWORKD
....
5. 21.11.2016 16:37:38: ENDWORKD
....
6. 18.11.2016 16:15:30: SHOWMODAL END
....

Вот такие вот записи, получается нужно оставить все, что идет после третьего (3) двоеточия после времени, т.е слова BEGINWORK, ENDWORK, SHOWMODAL END. Как вывести результаты в DBGrid отформатированным таким способом.
Или лучше ориентироваться не на двоеточия, а уже на ключевые слова BEGINWORK, ENDWORK, SHOWMODAL END
0
5966 / 4542 / 1094
Регистрация: 29.08.2013
Сообщений: 28,152
Записей в блоге: 3
24.11.2016, 16:35
посмотрите функцию
https://msdn.microsoft.com/ru-... 86323.aspx
1
Особый статус
 Аватар для FloppyDisc
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
24.11.2016, 16:35  [ТС]
rusqwe, проблема в том, что логи разные и я не могу ориентироваться на длину...
0
60 / 60 / 26
Регистрация: 30.05.2016
Сообщений: 293
24.11.2016, 16:37
FloppyDisc, можно попробовать ориентироваться на вхождение каких то символов
0
Особый статус
 Аватар для FloppyDisc
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
24.11.2016, 16:42  [ТС]
rusqwe, а можно на слова типа BEGINWORK или словосочетания SHOWMODAL END или же ориентироваться на определенное двоеточие, например третье?
0
60 / 60 / 26
Регистрация: 30.05.2016
Сообщений: 293
24.11.2016, 16:52
для BEGINWORK и SHOWMODAL END можно попробовать функцию pos()

Добавлено через 2 минуты
а для двоеточие, пока в голову приходит цикл с перебором всей строки
Delphi
1
2
3
for i := 1 to Length(s) do
    if s[i] = ':' then
      k:=k+1 ;
0
Особый статус
 Аватар для FloppyDisc
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
24.11.2016, 18:11  [ТС]
rusqwe,
Ну сделал так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var
arr: Array[1..4] of String = ('BEGINWORK', 'ENDWORK', 'SHOWMODAL END', 'END');
 
procedure TForm1.Button1Click(Sender: TObject);
var
  i, k: Integer;
  s: String;
  sLeft: String;
begin
  s:= Edit1.Text;
  for k:= 1 to Length(arr) do
  begin
    i := pos(arr[k], s);
    if i > 0 then
      begin
        sLeft := copy(s, 1, i - 1);
      end;
   end;
    ShowMessage(sLeft);
end;
Вроде бы удаляет, кроме словосочетаний как SHOWMODAL END. Как теперь вывести отформатированные данные в DBGrid? Делить на 3 части теперь не надо

Добавлено через 7 минут
Ну и ваш же пример
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Button2Click(Sender: TObject);
var
i, k: Integer;
s, sLeft, sRight: String;
begin
  s:= Edit1.Text;
  for i := 1 to Length(s) do
    if s[i] = ':' then begin
      sLeft  := copy(s, 1, i - 1);
      sRight := copy(s, i + 1, Length(s) - i);
    end;
  ShowMessage(sRight);
end;
0
5966 / 4542 / 1094
Регистрация: 29.08.2013
Сообщений: 28,152
Записей в блоге: 3
24.11.2016, 20:11
я ничего не понял, то вы запросом все хотите делать
тут же спрашиваете про функции SQL
тут же мучаете Edit, а теперь хотите что-то вывести в DBGrid

где логика?
0
60 / 60 / 26
Регистрация: 30.05.2016
Сообщений: 293
24.11.2016, 21:10
FloppyDisc, У Dbgrid есть событие DBGrid1DrawColumnCell, туда пишешь свой код, предварительно подправив. В примере выше вроде все понятно. С начало условие для column.Index='номер поля в гриде'. За место edita соответственно нужное поле из датасета. Сменить Showmessage , на DBGrid1.Canvas.TextOut(Rect.Left, Rect.Top, s); , где то что хотите видеть в гриде
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.11.2016, 21:10
Помогаю со студенческими работами здесь

Сортировка вектора по полю(Сортировка вставками)
Здравствуйте! Нужно написать сортировку вектора по полю weight класса tomato. Вот класс: #pragma once #include <iostream> ...

Фильтры сводной таблицы, категории товаров "Сумма по полю."
Вообщем есть список - по нему сводная (в примере). Обратите внимание на категорию товара. Вопрос: как сделать так, чтобы можно было...

Сделать разделение подвала на две, три части и заполнить их информацией
Всем доброго времени суток! Подскажите, как в шаблоне сайта(html) сделать разделение подвала на две, три части и заполнить их...

Разделение текстового файла на три примерно одинаковой длины по границе строк
Необходимо разделить текстовый файл на три примерно одинаковой длины по границе строк. Сделал разделение на 2 файла, вот код. Буду...

Сортировка категории
Добрый день. Подскажите как можно изменить сортировку категорий. Что бы новая категория автоматически добавлялась сверху. Спасибо!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru