![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 31.10.2007
Сообщений: 108
|
![]()
Доброго времени суток.
Суть моей проблемы такова: имеется база Access и ADO. Имеется поле в котором хранится номер дома. Данные получаю туда из другой базы (на которую я не могу повлиять и что то там изменить). Добрые разработчики той базы сделали его текстовым. В общем пользователь вбивает туда, что его душе угодно (слова, буквы). Мне нужно отделить цифры если они идут в начале в отдельное поле. Написал следующую процедуру: Код:
Но эта процедура не устраивает по скорости работы, т.к. записей в базе около 14 000. Возможно ли написать какой-либо подобный SQL запрос?
delphi is my world
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,543
|
![]()
а если номер дома 3А 4-Б или еще что
можно попробовать переписать вот так k:=0; For i:=1 to length(str) do if str[i] in ['1','2','3','4','5','6','7','8','9' ,'0'] then k:=k+1 //Inc(k); вместо многократного копирования строк считаем число цифр else break; //закончить цикл как только не цифра s:=copy(s,1,k); //копирование строки только один раз
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 08.09.2008 в 23:20. |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 31.10.2007
Сообщений: 108
|
![]()
Нужно все откинуть кроме числа, остаток я потом переписываю в коментарий.
evg_m за идею спасибо ![]()
delphi is my world
|
![]() |
![]() |
![]() |
#4 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
Все верно, только если вспомнить определение множества, то строка
if str[i] in ['1','2','3','4','5','6','7','8','9' ,'0'] then запишется как if str[i] in ['0'..'9'] then Правда, так короче? |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 31.10.2007
Сообщений: 108
|
![]()
Спасибо вы действительно правы
![]()
delphi is my world
|
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
я бы ещё проверил, может чуть-чуть быстрее (ВНИМАНИЕ! НЕ ФАКТ! ТРЕБУЕТ ПРОВЕРКИ!) будет, если использовать не операции с множеством, а банальное сравнение:
if (str[i]>='0') and (str[i]<'9') then ... и ещё. посмотрел я вчера в поиске на SQL.ru бедненький SQL у Вашего Access'а... на Oracle действительно можно было состряпать запрос по получению начальных цифр из поля. Кстати, не знаю, насколько это будет эффективно, но в Access можно написать свою функцию, которую можно использовать в SQL запросах... и последнее, если возможно с точки зрения задачи, я бы добавил в таблицу ещё два поля, куда и записал разделённые данные... а потом в запросе брал эти поля... |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Алгоритм перебора (Delphi) | Air | Помощь студентам | 11 | 20.07.2008 20:28 |
Метод перебора для нахождения решения "Судоку" | ДЖО | Помощь студентам | 23 | 04.06.2008 22:29 |
Вместо фильмов слайд-шоу )= | Лайка | Свободное общение | 10 | 17.05.2008 15:19 |
вместо шрифтов рисуются иероглифы | Sharley | Общие вопросы Delphi | 4 | 27.04.2008 18:41 |
ссылка вместо текста!!! | Abbatik | Помощь студентам | 7 | 09.02.2008 13:29 |