![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Cashey |
|
|||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: 2 Всего: 60 |
Подскажите как отобрать записи из таблице по уникальным двум символам.
Особо обращаю внимание не записи в которых первый символ заданный (напр. А%), а все записи в которых первые символы уникальны. Нужно для TDecisionQuery. -------------------- библия учит любить ближнего, а камасутра обучает как именно |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Боюсь, что для большинства баз данных никак. Вообще-то такие вещи не являются стандартом в SQL, следовательно надо читать доку по твоей базе данных конкретно...
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Cashey |
|
|||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: 2 Всего: 60 |
База старая создана на Clippere, переведена в win-кодировку через FOX. Объясню всю задачу целиком (может все же кто и сможет помочь, а оно ведь и другим полезным может оказаться) итак в базе ведутся сведения о покупателях в ней нет поля "регион" и никто код региона, где обитает покупатель, в нее отдельно не заносил. Теперь руководству потребовалось получить график продаж по регионам. Единственный способ опредилить из когого региона покупатель это 2 первые цифры его ИНН (такое поле в таблице есть), но как построить такой график неясно. Функции RightStr в SQL нет, а построить график обычными командами Паскаля вроде бы нельзя(или все же можно?). [B]А теперь внимание вопрос:
-------------------- библия учит любить ближнего, а камасутра обучает как именно |
|||
|
||||
| МММ |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 18.6.2002 Репутация: нет Всего: 1 |
Если я правильно понял , то пойдет обычная сортировка
допустим Приморский край 2500000000 select * from table where inn>=250000000 and inn<=259999999 длина инн в зависимости от физ или юр лица второй способ считывай данные с поля инн, веделяй первые два знака , уже средствами дельфи, и все!!! |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
1) Сортировка как сказал МММ
2) Добавь поле и занеси данные - 1 раз пройдёшь по записям, а далее уже всё нормально Второй способ лучше - будет работать быстрее и корректнее. -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Cashey |
|
|||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: 2 Всего: 60 |
Первый способ неприемлем, так как нужно количество всех одинаковых первых двух цифр ИНН (ну представте себе как вы по этой методике построите график). Второй способ, гораздо интереснее, но мне неясно как его реализовать.
-------------------- библия учит любить ближнего, а камасутра обучает как именно |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Как реализовать?
1) Делаем кверю "Alter Table" или в дизайне изменяем таблицу, добавляем новое поле 2) C помощью другой программы проходим по всей таблице record-by-record и заполняешь это новое поле 3) Меняешь свою программу - там где дописываются записи в таблицу и/или изменяются добавляешь обработку нового поля ... Иногда (для некоторых баз данных) попытка засунуть более длинное поле в короткое приводит к обрезанию без сигнала об ошибках - тогда вообще достаточно сделать узкое поле шириной 2 символа (или сколько там надо), одной обычной кверёй "Update" заполнить это поле и если база позволяет триггер - то поставить триггер - тогда код программы вообще не надо менять. -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Cashey |
|
|||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: 2 Всего: 60 |
Спосибо вит за теорию, но, пожалйста объясни мне, дураку, как "изъять" символы из записи в ячейке базы, а уж перенести их куда надо я и сам смогу.
-------------------- библия учит любить ближнего, а камасутра обучает как именно |
|||
|
||||
| Cashey |
|
|||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: 2 Всего: 60 |
Знаете я решил проблему с помощью FOX PRO, там это делается просто:
select left(inn,2); from TableName; group by left(inn,2) into table а для графиков еще проще : сразу select left(inn,2), count(*); from TableName; group by left(inn,2) Но это в фоксе, а как же мы дельфисты? Неужели ударим в грязь лицом -------------------- библия учит любить ближнего, а камасутра обучает как именно |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Так, давай по порядку. Что ты используешь для доступа - BDE+FOX pro driver? Так тогда попробуй эти квери и послать чуть-чуть видоизменив:
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Если ты не менял пути установки програм по адресу:
С:\Program Files\Common Files\Borland Shared\BDE\LOCALSQL.HLP Лежит файл справки по командам локального BDE. Там можно много интересного найти... -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
При чём здесь Дельфи? Ты же работаешь фактически только с BDE и всё что ты спрашиваешь вообще к Дельфи не имеет ни малейшего отношения - это только использование возможностей BDE драйвера, который ты используешь для доступа к базе данных. -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Cashey |
|
|||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: 2 Всего: 60 |
Для доступа использую только BDE, а FOX использовал только для занесения в новое поле необходимого фрагмента записи из другого. SUBSTRING не пробовал - моя вина. Пути при установке я менял, но где хелп знаю, но не знаю чего там интересного, кроме формата команд там ничего нет (да и форматы часто неполные что например стоит подсказка по функции format). Теперь о главном: используется действительно BDE, НО для работы с базами, в частности для построения DecisionCube используется SQL и вот тут уже начинает играть роль Delphi or FOX Pro т.к. диалекты языка запросов у них разные. Я до сих пор не знаю как в среде Delphi реализовать некоторые моменты при работе с БД, которые в фоксе делаются одной-двумя командами. Нет это я не для дискуссии о преимуществах одной из сред разработки, просто очень хотелось бы самое хорошее из фокса использовать и в дельфи. Кстати, может будут какие-нибудь рекомендации по совмещению если не исходных кодов, то хотя бы фрагментов программ написанных на этих двух языках?
-------------------- библия учит любить ближнего, а камасутра обучает как именно |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 14 Всего: 154 |
Стандарными средствами локального SQL ты это не сделаешь, придется извращаться (как один из вариантов - через временные таблицы).
Если же ты используешь MS SQL (Transac-SQL) или Oracle (PL/SQL) то там это можно реализовать (как один из вариантов - в виде скрипта). -------------------- |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Так SUBSTRING помогло или нет?
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Cashey |
|
|||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: 2 Всего: 60 |
Нет, DecisionQuery ее не поддерживает. -------------------- библия учит любить ближнего, а камасутра обучает как именно |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
А обязательно использовать Descision Cube компоненты? Почему не обойтись обычным TChart/TDBChart + TQuery
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Cashey |
|
|||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: 2 Всего: 60 |
Decisison Cube более удобен при проектировании. Однако Вы правы, для анализа со сложными запросами наверное лучше использовать ту конструкцию. Хотя не понятно вроде бы они должны использовать один диалект SQL.
-------------------- библия учит любить ближнего, а камасутра обучает как именно |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Вроде бы да, но возможно стоят какие-то интерпретаторы или оптимизаторы перед посылкой SQL которые и не понимают расширенных возможностей... В общем странно всё это. PS. Ко мне можно обращаться на "ты" -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |