Админю немножко :)
126 / 115 / 25
Регистрация: 05.01.2009
Сообщений: 889

Фильтр по номеру телефона

12.11.2013, 23:46. Показов 3599. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую. Вопрос есть.
В базе есть поле, в которое по маске вводится номер телефона.
Необходимо сделать поиск по номеру телефона так, чтобы пользователь не вводит номер по маске. Например,
в базу вносятся номера по маске (###)-###-##-##
а в строке поиска пользователь должен набирать просто набор цифр: 1234567890 и ему в результат должны выдаваться все строки с номером (123)-456-78-90
подскажите как такое реализовать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.11.2013, 23:46
Ответы с готовыми решениями:

Местоположение по номеру телефона
Всем привет. Можно ли написать программу на с++, где вводишь номер телефона и выводится местоположение этого телефона (координаты)? ...

Поиск но номеру телефона
Всем доброго дня! Подскажите как можно решить следующую задачу. Есть несколько БД содержащих поле номер телефона и есть форма с...

Регистрация по номеру телефона
Доброго времени суток. Задался таким вопросм. Есть форма с инпутами (номер телефона, код подтверждения) ну и кнопка. Код подтверждения...

15
8 / 8 / 1
Регистрация: 11.11.2013
Сообщений: 43
13.11.2013, 00:00
Drongo, используй MaskEdit. Пользователь будет писать что хочет, а ты получаешь информацию в необходимом виде. Вариант?
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
13.11.2013, 11:30
Drongo, Вы можете хранить данные в таблице в виде 380959876543 (12 символов), а отображать например в виде 38(095)987-65-43. А поиск осуществлять как обычно. Пример:
Вложения
Тип файла: zip T67.zip (20.3 Кб, 24 просмотров)
1
Админю немножко :)
126 / 115 / 25
Регистрация: 05.01.2009
Сообщений: 889
13.11.2013, 12:26  [ТС]
Waddonator, дело в том, что эти номера редактируются. и контроль правильности у меня идет в том числе и по маске. поэтому в таблице у меня номера хранятся в соответствии с маской ввода

Добавлено через 5 минут
Freestyler2013, не подходит. т.к. для маск эдит. в базе есть номера другие, другого формата. есть 7-ми значные, есть 5-ти значные и хранятся они в разных столбцах страницы. Например, дом. тел имеет маску ##-##-##
мобильный (###)-###-##-##. Нужно сделать поле универсальное, чтобы пользователь начинал вводить цифры и ему сразу же фильтровались записи с такими номерами, неважно какими - домашними, рабочими или мобильными
0
8 / 8 / 1
Регистрация: 11.11.2013
Сообщений: 43
13.11.2013, 12:41
Drongo, тогда скорее всего правильнее (да и проще) будет придерживаться совета Waddonator.
PS Но интересная задачка, надо еще покумекать. Если вдруг найдешь решение - тогда сразу в студию!!!
0
Админю немножко :)
126 / 115 / 25
Регистрация: 05.01.2009
Сообщений: 889
13.11.2013, 14:52  [ТС]
да вся база номеров по маске хранится ((( надо что-то кардинальное придумать...
0
8 / 8 / 1
Регистрация: 11.11.2013
Сообщений: 43
13.11.2013, 15:06
Тогда, уважаемы Drongo, придется писать Вам анализатор строки. Благо у Вас только числа, "-", "(" и ")".
Считываешь все в какую-нибудь переменную, удаляешь из нее все символы кроме чисел, а дальше сравнение. Других вариантов я не вижу.
1
Админю немножко :)
126 / 115 / 25
Регистрация: 05.01.2009
Сообщений: 889
14.11.2013, 09:16  [ТС]
Freestyler2013, да.это я уже и сам понял.
буду удалять символы и записывать все номера в отдельный столбец с пробелом.
осталось алгоритм придумать. кто-бы помог...
0
8 / 8 / 1
Регистрация: 11.11.2013
Сообщений: 43
14.11.2013, 10:23
Drongo, вот код на T-SQL
T-SQL
1
2
3
4
DECLARE @S VARCHAR(100);
SET @S='mjvfge45564368uivf6808976208 976 017896tx 08716t';
WHILE @S LIKE '%[^0-9]%' SET @S=STUFF(@S,PATINDEX('%[^0-9]%',@S),1,'');
SELECT @S;
Эта штука удаляет из строки все символы кроме цифр.

Добавлено через 7 минут
А вот на Delphi вариант:
Delphi
1
2
3
4
5
6
7
8
9
10
function only_numbers(str : string) : string;
                                                       
var strBuf : string;
         i : integer;
begin
 strBuf := '';
 for i := 1 to length(str) do //перебираем все символы строки
  if str[i] in ['0'..'9'] then strBuf := strBuf + str[i]; //если очередной символ - цифра, то приписываем  его к итоговой строке
 Result := strBuf;
end;
0
Админю немножко :)
126 / 115 / 25
Регистрация: 05.01.2009
Сообщений: 889
14.11.2013, 14:36  [ТС]
В общем сделал вот так. создал вычисляемое поле и туда запихал все свои телефоны через пробел Поле создавал по-ламерски: В свойствах ADOQuery New Field - Calculated.
Дальше в обработчике написал
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TDataModule2.QMainCalcFields(DataSet: TDataSet);
var
strin:string;
begin
strin:=copy(DSMain.DataSet.FieldByName('telmob').AsString,2,3)+
       copy(DSMain.DataSet.FieldByName('telmob').AsString,7,3)+
       copy(DSMain.DataSet.FieldByName('telmob').AsString,11,2)+
       copy(DSMain.DataSet.FieldByName('telmob').AsString,14,2)+' '+
       copy(DSMain.DataSet.FieldByName('telrab').AsString,1,2)+
       copy(DSMain.DataSet.FieldByName('telrab').AsString,4,2)+
       copy(DSMain.DataSet.FieldByName('telrab').AsString,7,2)+ ' '+
       copy(DSMain.DataSet.FieldByName('telmob2').AsString,2,3)+
       copy(DSMain.DataSet.FieldByName('telmob2').AsString,7,3)+
       copy(DSMain.DataSet.FieldByName('telmob2').AsString,11,2)+
       copy(DSMain.DataSet.FieldByName('telmob2').AsString,14,2);
 
QMainrrr.AsString:=strin;
end;
теперь вопрос. как поиск организовать по вычисляемому полю?
вешаю на форму эдит и в обработчике пишу
Delphi
1
2
3
4
5
6
7
8
procedure TFMain.EdtTelChange(Sender: TObject);
begin
DataModule2.QMain.Close;
DataModule2.QMain.SQL.Clear;
DataModule2.QMain.SQL.Add('SELECT * from telbase where rrr like :tttt order by fio');
DataModule2.QMain.Parameters.ParamValues['tttt']:='%' +EdtTel.Text+'%';
DataModule2.QMain.Open;
end;
но в результате вылазит ошибка "Отсутствует значение для одного или нескольких параметров".
Понимаю, что собака зарыта где-то в свойствах вычисляемого поля, но никак не могу понять где именно
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
14.11.2013, 14:54
Цитата Сообщение от Drongo Посмотреть сообщение
как поиск организовать по вычисляемому полю?
Не знаю, что Вы подразумеваете под словом "поиск". Могу предложить фильтрацию полю типа string.
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.Edit1Change(Sender: TObject);
begin
  ADOQuery1.Filtered:=false;
  if Length(Edit1.Text)>0 then ADOQuery1.Filtered:=true;
end;
 
procedure TForm1.ADOQuery1FilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
begin
  Accept := Pos(Edit1.Text,DataSet['FieldName'])>0;
end;
1
8 / 8 / 1
Регистрация: 11.11.2013
Сообщений: 43
14.11.2013, 16:31
Drongo, это что за поле такое
Delphi
1
DataModule2.QMain.Parameters.ParamValues['tttt']:='%' +EdtTel.Text+'%';
- EdtTel.Text. Очипятка, али реально так обозвал?

Добавлено через 1 минуту
Waddonator, прикольное решение. Главное очень просто описано!!!
0
Админю немножко :)
126 / 115 / 25
Регистрация: 05.01.2009
Сообщений: 889
14.11.2013, 19:39  [ТС]
Waddonator, спасибо. это то, что нужно.
Freestyler2013, это не поле. это название параметра.
да. так назвал. а как надо? Edit1,2,3,4.... потом запутаешься какой для чего))) надо чтобы понятно было.
Edt - значит edit. Tel - значит поиск по телефону.
также и все остальные элементы. Это вроде как по умолчанию учат программистов с самого начала))))
Всем спасибо!
0
8 / 8 / 1
Регистрация: 11.11.2013
Сообщений: 43
14.11.2013, 20:31
Drongo, ну, стаж у меня ОЧЕНЬ давно пошел, года так с 1996. Так что как что называть меня тоже учили. Правда лет 7-8 уже не занимаюсь этим, а тут что-то потянуло. А смутило меня то, что в слове Edit у тебя был пропущен символ "i". Вот и все.
0
14.11.2013, 22:54  [ТС]

Не по теме:

Freestyler2013, не спорю по поводу стажа. я сам по образованию не программист. так, самоучка. но для меня так удобнее)))
а Button ты тоже полностью оставляешь?
я сокращаю так Btn

0
14.11.2013, 23:03

Не по теме:

Drongo, ты не правильно меня понял. Я тоже даю "говорящие" имена всем элементам, процедурам, БД, таблицам и т.д. и т.п. А что касается наименований элементов, то я даю им наименования по следующему принципу, например: DBGridContacts - отсюда вижу что за тип элемента и какую именно информацию он передает. Мы с тобой говорим об одном и томже, но с маленькими нюансами! :friends::drink:

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.11.2013, 23:03
Помогаю со студенческими работами здесь

Сортировка структуры по номеру телефона
Всем доброго времени суток! Моя структура: typedef struct Tel { int telephone; int time; int telephoneA; ...

PHP: Регистрация по номеру телефона
Уже давно на популярных мобильных сайтах стоит функция регистрации по номеру телефона, типа как вконтакте и в однокласснике. Юзер вводит...

Поиск по имени и номеру телефона
Нужно написать программу, которая будет запоминать имена и номера телефонов, а затем выводить их. Также нужно добавить поиск по имени и...

Авторизация только по номеру телефона
Здравствуйте. Ищу информацию как реализовать авторизацию через номер телефона. ( После ввода номера приходит СМС с кодом подтверждения....

XMLHttpRequest и проверка по номеру телефона в ВК
Пытаюсь залогиниться через моб. версию и отправить номер телефона на проверке безопасности, но никак не получается и всегда вываливается...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru