Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.07.2014, 11:09
djmix djmix вне форума
Прохожий
 
Регистрация: 24.06.2014
Сообщения: 46
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию есть файлик csv

Привет Народ!!! подскажите пожалуйста

есть необходимость если по простому данный файлик приложенный
обработать , для примера вот есть поля. чтобы было понятно

столбик A - время
столбик B - номер пользователя
столбик C - не помню что за ....
столбик D - Название приложения
столбик E - путь к данному приложению
столбик F - Заголовок у приложения

1)мне необходимо отсортировать все строки у которых номер пользователя одинаков. затем

2) подсчитать кол-во всех одинаковых строк по параметру в ячейке столбца D у этого пользователя (на выходе примерно должно получится , пользователь № 16 , что у него 1cv8 - 6 строк, Microsoft Office Outlook - 3 строки, Проводник - 4 строки)


можно ли это реализовать? сможете ли вы мне помочь?
Вложения
Тип файла: zip worktime_site.zip (695 байт, 6 просмотров)
Ответить с цитированием
  #2  
Старый 03.07.2014, 12:20
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Делается это так:
1. Создайте в каталоге, где лежит ваш csv-файл текстовый файл с именем schema.ini, а в него поместите такие строки:
Код HTML:
[worktime_site.csv] ColNameHeader=False Format=Delimited(;)
2. Положите на форму компонент AdoConnection и в строку подключения поместите такой текст:
Код HTML:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\;Extended Properties="Text"
В строке подключения укажите для параметра Data Source=D:\ - свой путь к csv-файлу
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  
Старый 03.07.2014, 14:12
djmix djmix вне форума
Прохожий
 
Регистрация: 24.06.2014
Сообщения: 46
Версия Delphi: Delphi 7
Репутация: 10
Печаль

Цитата:
Сообщение от Страдалецъ
Делается это так:
...................
3. Положите на форму компонент AdoQuery, настройте для него связь с AdoConnection и в текст запроса поместите такой текст:
Код:
select F2,F4,Count(F4) from worktime_site.csv
group by F2,F4
Вот в принципе и все.

А можно посмотреть продолжение? я вроде всё выполнил, как мне получить это визуально то результат((((
Ответить с цитированием
  #4  
Старый 03.07.2014, 21:07
phomm phomm вне форума
Новичок
 
Регистрация: 07.10.2013
Адрес: Тюмень
Сообщения: 50
Версия Delphi: 7/2007/XE+/FPC
Репутация: 22
По умолчанию

Ну можно ещё положить на форму компонент TDataSource, настроить его свойство DataSet равным ADOQuery1 , потом положить на форму компонент TDBGrid и настроить его свойство DataSource равным имени вашего TDataSource (скорее всего DataSource1).
Потом у всех используемых элементов установить свойство Active в true , исправляя возникающие при этом вопросы. Если всё правильно сделали, уже в дизайнере формы увидите данные в гриде.
Ответить с цитированием
Этот пользователь сказал Спасибо phomm за это полезное сообщение:
djmix (04.07.2014)
  #5  
Старый 07.07.2014, 10:14
djmix djmix вне форума
Прохожий
 
Регистрация: 24.06.2014
Сообщения: 46
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от phomm
Если всё правильно сделали, уже в дизайнере формы увидите данные в гриде.


помогите плиз,

есть тот самый столбец F2 (ID пользователя),
хочу сделать отбор по ID пользователя.

как в моём случае сделать запрос SQL?
Ответить с цитированием
  #6  
Старый 07.07.2014, 13:03
phomm phomm вне форума
Новичок
 
Регистрация: 07.10.2013
Адрес: Тюмень
Сообщения: 50
Версия Delphi: 7/2007/XE+/FPC
Репутация: 22
По умолчанию

Задачу фильтрации можно выполнить либо через свойство Filter (и Filtered для включения-выключения фильтрации) самого набора данных (DataSet'a), либо указав предложение WHERE в SQL-запросе и переоткрыв набор данных.
В обоих случаях это можно сделать в виде поля ввода (TEdit) и кнопки, код кнопки будет формировать либо строку Filter либо строку запроса на основании данных из поля ввода.
Код запроса мог бы быть таким (условно, т.к. наименований таблиц и полей у Вас я не знаю)
Код:
'SELECT * FROM Users WHERE ID_User = ' + Edit1.Text;
Ответить с цитированием
  #7  
Старый 07.07.2014, 15:14
djmix djmix вне форума
Прохожий
 
Регистрация: 24.06.2014
Сообщения: 46
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

то есть формируется всё тот же запрос,

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 по каждой строчке
Изображения
Тип файла: jpg 2014-07-07_162633.jpg (72.5 Кбайт, 8 просмотров)

Последний раз редактировалось djmix, 07.07.2014 в 15:18.
Ответить с цитированием
  #8  
Старый 08.07.2014, 01:05
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Код:
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  
Старый 08.07.2014, 09:40
djmix djmix вне форума
Прохожий
 
Регистрация: 24.06.2014
Сообщения: 46
Версия Delphi: Delphi 7
Репутация: 10
Печаль

Цитата:
Сообщение от Страдалецъ
Код:
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
Выбирайте какой вам вариант нужен.

пробовал по разному во всех трёх случаях , в своём случае делаю запрос:
Adoquery1.sql.add('select F2,F4,Count(F4) from worktime.csv ');
Adoquery1.sql.add('group by F2,F4 where F2=' + label9.Caption);

выводится ошибка одна и та же. кавычки? апострофы? что забыто?)
Изображения
Тип файла: jpg 2014-07-08_104309.jpg (14.8 Кбайт, 7 просмотров)
Тип файла: jpg 2014-07-08_104059.jpg (14.8 Кбайт, 5 просмотров)
Ответить с цитированием
  #10  
Старый 09.07.2014, 01:24
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 576
Версия Delphi: 6
Репутация: выкл
По умолчанию

Сначала where, потом group by.
__________________
Не стоит путать форумы с богадельнями. © Bargest
Ответить с цитированием
Этот пользователь сказал Спасибо Freeman за это полезное сообщение:
djmix (09.07.2014)
  #11  
Старый 09.07.2014, 07:20
djmix djmix вне форума
Прохожий
 
Регистрация: 24.06.2014
Сообщения: 46
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасиб всем большое!

единственное заставить из dbgrid сейчас в dbchart передать данные.

нашёл описалово, и так там всё просто написано)

как бы это сделать? пример на скрине, данные внизу по пользователю "9"
Изображения
Тип файла: jpg 2014-07-09_094815.jpg (76.3 Кбайт, 8 просмотров)

Последний раз редактировалось djmix, 09.07.2014 в 07:49.
Ответить с цитированием
  #12  
Старый 09.07.2014, 08:10
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Цитата:
Сообщение от Freeman
Сначала where, потом group by.
Упс, действительно это я что-то накосячил.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #13  
Старый 10.07.2014, 09:15
djmix djmix вне форума
Прохожий
 
Регистрация: 24.06.2014
Сообщения: 46
Версия Delphi: Delphi 7
Репутация: 10
Печаль

эх печалька если никто не подскажет((
Ответить с цитированием
  #14  
Старый 10.07.2014, 10:29
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Тут все несколько сложнее.
1. Положить на форму TDbChart
2. Правой кнопкой мышиы на нем вызвать редактор и добавить в Series новый график из предоставленной галерии.
3. Добавить на форму TDBCrossTabSource. Настроить его свойства:
DataSet - это ваши данные,
Series - это график для которых собственно данные,
LabelField - поле отвечающее за метки данных
ValueField - поле отвечающее за количество этих данных
Собственно и все.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
djmix (10.07.2014)
  #15  
Старый 10.07.2014, 13:14
djmix djmix вне форума
Прохожий
 
Регистрация: 24.06.2014
Сообщения: 46
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

TDBCrossTabSource это компонент где должен быть?)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:44.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter