|
#1
|
|||
|
|||
есть файлик csv
Привет Народ!!! подскажите пожалуйста
есть необходимость если по простому данный файлик приложенный обработать , для примера вот есть поля. чтобы было понятно столбик A - время столбик B - номер пользователя столбик C - не помню что за .... столбик D - Название приложения столбик E - путь к данному приложению столбик F - Заголовок у приложения 1)мне необходимо отсортировать все строки у которых номер пользователя одинаков. затем 2) подсчитать кол-во всех одинаковых строк по параметру в ячейке столбца D у этого пользователя (на выходе примерно должно получится , пользователь № 16 , что у него 1cv8 - 6 строк, Microsoft Office Outlook - 3 строки, Проводник - 4 строки) можно ли это реализовать? сможете ли вы мне помочь? |
#2
|
||||
|
||||
Делается это так:
1. Создайте в каталоге, где лежит ваш csv-файл текстовый файл с именем schema.ini, а в него поместите такие строки: Код HTML:
Код HTML:
3. Положите на форму компонент AdoQuery, настройте для него связь с AdoConnection и в текст запроса поместите такой текст: Код:
select F2,F4,Count(F4) from worktime_site.csv group by F2,F4 Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 03.07.2014 в 13:10. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
djmix (03.07.2014)
|
#3
|
|||
|
|||
Цитата:
А можно посмотреть продолжение? я вроде всё выполнил, как мне получить это визуально то результат(((( |
#4
|
|||
|
|||
Ну можно ещё положить на форму компонент TDataSource, настроить его свойство DataSet равным ADOQuery1 , потом положить на форму компонент TDBGrid и настроить его свойство DataSource равным имени вашего TDataSource (скорее всего DataSource1).
Потом у всех используемых элементов установить свойство Active в true , исправляя возникающие при этом вопросы. Если всё правильно сделали, уже в дизайнере формы увидите данные в гриде. |
Этот пользователь сказал Спасибо phomm за это полезное сообщение: | ||
djmix (04.07.2014)
|
#5
|
|||
|
|||
Цитата:
помогите плиз, есть тот самый столбец F2 (ID пользователя), хочу сделать отбор по ID пользователя. как в моём случае сделать запрос SQL? |
#6
|
|||
|
|||
Задачу фильтрации можно выполнить либо через свойство Filter (и Filtered для включения-выключения фильтрации) самого набора данных (DataSet'a), либо указав предложение WHERE в SQL-запросе и переоткрыв набор данных.
В обоих случаях это можно сделать в виде поля ввода (TEdit) и кнопки, код кнопки будет формировать либо строку Filter либо строку запроса на основании данных из поля ввода. Код запроса мог бы быть таким (условно, т.к. наименований таблиц и полей у Вас я не знаю) Код:
'SELECT * FROM Users WHERE ID_User = ' + Edit1.Text; |
#7
|
|||
|
|||
то есть формируется всё тот же запрос,
Adoquery1.sql.add('select F2,F4,Count(F4) from worktime.csv '); Adoquery1.sql.add('group by F2,F4'); и появляется табличка в DBgid как в файле прикреплённом пытался сделать что то подобное, как вы писали через запрос но безуспешно 'SELECT * FROM Users WHERE ID_User = ' + Edit1.Text; Как на моём примере реализовать отбор данных и последующего применения на графике, например через фильтр только "7" нужен пользователь? окончательный мой замысел это взять данные из этой таблицы и формировать график по кокретному выбранному пользователю через компонента dbchart по каждой строчке Последний раз редактировалось djmix, 07.07.2014 в 15:18. |
#8
|
||||
|
||||
Код:
Adoquery1.sql.add('select F2,F4,Count(F4) from worktime.csv '); Adoquery1.sql.add('group by F2,F4 where F2=7'); Код:
Adoquery1.sql.add('select F2,F4,Count(F4) from worktime.csv '); Adoquery1.sql.add('group by F2,F4 where F2=' + Edit1.Text); Код:
Adoquery1.sql.add('select F2,F4,Count(F4) from worktime.csv '); Adoquery1.sql.add('group by F2,F4 where F2=:UserID'); ADOQuery1.Parameters.ParamByName('UserID').Value := Edit1.Text Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
djmix (08.07.2014)
|
#9
|
|||
|
|||
Цитата:
пробовал по разному во всех трёх случаях , в своём случае делаю запрос: Adoquery1.sql.add('select F2,F4,Count(F4) from worktime.csv '); Adoquery1.sql.add('group by F2,F4 where F2=' + label9.Caption); выводится ошибка одна и та же. кавычки? апострофы? что забыто?) |
Этот пользователь сказал Спасибо Freeman за это полезное сообщение: | ||
djmix (09.07.2014)
|
#11
|
|||
|
|||
Спасиб всем большое!
единственное заставить из dbgrid сейчас в dbchart передать данные. нашёл описалово, и так там всё просто написано) как бы это сделать? пример на скрине, данные внизу по пользователю "9" Последний раз редактировалось djmix, 09.07.2014 в 07:49. |
#12
|
||||
|
||||
Цитата:
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#13
|
|||
|
|||
эх печалька если никто не подскажет((
|
#14
|
||||
|
||||
Тут все несколько сложнее.
1. Положить на форму TDbChart 2. Правой кнопкой мышиы на нем вызвать редактор и добавить в Series новый график из предоставленной галерии. 3. Добавить на форму TDBCrossTabSource. Настроить его свойства: DataSet - это ваши данные, Series - это график для которых собственно данные, LabelField - поле отвечающее за метки данных ValueField - поле отвечающее за количество этих данных Собственно и все. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
djmix (10.07.2014)
|
#15
|
|||
|
|||
TDBCrossTabSource это компонент где должен быть?)
|