|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
06.10.2009, 23:12 | #1 |
Пользователь
Регистрация: 06.10.2009
Сообщений: 16
|
Вопрос по сортировке и отчет из таблиц
Всем привет! Объединил два интересующих вопроса в 1 тему, итак:
1.Имеется одна из 3-х таблиц адреса клиента, Houses, структура: | HouseID | CityID | StreetID | House | где House - строковый тип, это номер дома(строковый был выбран потому что дом может быть как в виде "12", так и "12А" или "12корп1") HouseID - уникальный ID дома; CityID - город, в котором нах-ся этот дом StreetID - улица, в котором нах-ся этот дом Две таблицы(с городами и улицами) сортируются посредством вторичного индекса без проблем и потом подставляются в DBLookupComboBox для выбора. С сортировкой домов проблемы, сортировать как числа не получается, а строковая сортировка здесь неправильно сортирует: 1 11 12 ... 19 1А 2 что-то в этом духе(точно не помню, но сортирует неверно) Имеется идея создать доп стобец(невидимый для ДБГрид) где будет числовая часть дома и будет сортировка сначала по нему, потом по основному. Но я не знаю как SQL-запросом перенести из String-поля числовое значение с преобразованием в число в Integer-поле(к примеру HouseNum). Если у кого есть другие предложения как отсортировать дома буду очень рад услышать! 2. Имеется сетка DBGrid. Требуется каким-нибудь удобным способом отметить нужные строки(несколько!) и передать на печать(либо в отчет, либо еще как-нибудь). Вопросы: 1) Для этого можно использовать QReport и ему подобные или возможно как-то передавать в .doc или .xls формат? Как это сделать?)) 2) Как установить выбор многих значений в сетке я знаю(multiselect), а как передать весь фокус в отчет? 3) Слышал про продвинутую DBGrid не то от ehLib или как-то так и там есть функции отметки строк галочками и.т.д. Скажите, трудоёмко будет переписать под этот компонент программу? Заранее очень благодарен!! |
07.10.2009, 08:27 | #2 |
Форумчанин
Регистрация: 04.04.2009
Сообщений: 438
|
1.
Вариант. Поделить House на два поля (колонки), где в первой числовое значение номера дома (соответственно это поле должно быть числового типа). Во второй колонке другая часть номера (корпус), если есть. Даже если номер дома будет вида 24/5 и тогда можно разделять такой номер на две части (25 и /5). Это переносит "разделение" номера на уровень пользователя и разработчику не надо париться над тем, чтобы разделять его при записи данных или при составлении запроса. Другой вариант. Используя только одно строковое поле для номера дома подставлять перед номером пробелы, так чтобы вместе с ними строка с номером содержала не менее определенного количества символов. Примерно так: " 1", " 54" или "102". Такой прием обеспечивает "правильную" сортировку номеров в строковом представлении. 2. В DBGridEh (библиотека EhLib) есть возможность сохранять таблицу в файлы разных форматов. Их не так много, но вполне достаточно для многих применений. Форматы такие: Text, HTML, RTF (Word), XLS, Csv (Excel). Переделка DBGrid на DBGridEh не такая уж и сложная. Заново придется создавать колонки в гриде, если они, конечно, были в DBGrid (это те, которые если не создавать, они в гриде автоматом формируются по DataSet'у). И, если есть событийные процедуры, связанные с гридой или ее колонками, то их тоже надо будет немного подправить. |
07.10.2009, 12:35 | #3 |
Пользователь
Регистрация: 06.10.2009
Сообщений: 16
|
по поводу первого предложения: я так и думал, но как оно будет сортироваться уже между 12А, 12Б,...,12/3...,12корп1, т.е. где доп части разные, а числовые одинаковые. Составной индекс отсортирует правильно?
И вопрос к обоим предложениям: sql-запросом это можно реализовать? Просто база уже заполнена по большей части, в ручную это очень долго исправлять.... а вот перевод из строкового формата в числовой, разделение строки на части и подобные функции я в хелпе и фаронове по sql не нашел(( |
07.10.2009, 14:23 | #4 |
Форумчанин
Регистрация: 04.04.2009
Сообщений: 438
|
Если база заполнена, то есть два пути.
Один, сделать программу, которая разделит, модифицирует уже существующие данные как требуется, а в основном проекте учесть эти изменения в базе. Второй, использовать хранимые процедуры, где можно использовать любые функции SQL. Во всяком случае, в диалекте 3 SQL функции преобразования точно есть. В ХП можно реализовать и разделение строки на части. Тогда и базу модифицировать не придется. А в запросе то что вы хотите сделать, вряд ли получится. |
17.10.2009, 16:42 | #5 | |
Пользователь
Регистрация: 06.10.2009
Сообщений: 16
|
Цитата:
Но сортировку в общем то я сделал Последний раз редактировалось Ruschel; 17.10.2009 в 18:05. |
|
22.10.2009, 09:07 | #6 |
Заблокирован
Регистрация: 19.10.2009
Сообщений: 3
|
Вопрос по сортировке и отчет из таблиц
Так значит, и с этим вопросом я разобрался. Все дело в верхнем регистре. Тогда возникает вопрос следущего плана: буква A находится в таблице аски выше, чем _, НО буква а находится ниже Тогда ведь правильно сортировать по алфавиту опираясь на таблицу. Т.е., если есть ники Alex, alex и _alex, то по идее они должны быть расположены так: Alex, _alex, alex. Но, используя мою сортировку получим Alex, alex и _alex, используя метод sort - _alex, Alex, alex. Т.к. сортирует по нижнему регистру. Так вот и возникает вопрос: правильно ли это? Кто же тогда принял такой стандарт? Ведь Эксцель и прочие программы сортирует так же, как и метод sort.
|
24.10.2009, 20:15 | #7 |
Пользователь
Регистрация: 06.10.2009
Сообщений: 16
|
да и не говори, все через *опу( Ну собсно свои проблемы я уже решил, решаются новые)
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопрос по пересчету таблиц. | Klim Bassenger | Microsoft Office Excel | 2 | 18.06.2009 11:53 |
Нужна помощь в сортировке | 777Артём777 | Общие вопросы Delphi | 4 | 14.03.2009 09:39 |
Вопрос с формой и связью таблиц | Broodstar | Microsoft Office Access | 2 | 13.11.2008 17:01 |
Вопрос по сортировке | Ermiss | БД в Delphi | 5 | 17.02.2008 17:32 |
Ошибка в сортировке | Veiron | Общие вопросы Delphi | 14 | 21.01.2008 21:35 |