Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2017, 16:29   #1
Фируз1990
Пользователь
 
Регистрация: 02.11.2016
Сообщений: 10
По умолчанию Поиск по базе данных с запросом SQL

Ассаламу ъалайкум в.р.в.б всем
...
if edit1.Text='' then
ADOQuery1.Active:=false else
begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT فارسی FROM Таблица1 WHERE فارسی LIKE '''+Edit1.text+ '%''');
ADOQuery1.SQL.Add('order by فارسی');
ADOQuery1.Active:=True;
...
Как вы заметили ошибок тут нету. Когда набираю какую нибудь букву например "А" то база тут же открывается и показывает записи начинающие с "А" но не сразу а через 3 секунды (2300000 записи). А когда ввожу вторую букву то поиск по базе в пределе миллисекундах, и чем больше букв, тем меньше становится запись и поиск по базе быстрее.
Как сделать так, что бы когда я вводил букву А то база не открывалась а когда вводил вторую букву Н то база сработала и показала записи начинающие с "А". пример не так уж сложный, но иногда голова у меня как "томатная банка"
Буду Благодарен вам за помощь
Фируз1990 вне форума Ответить с цитированием
Старый 27.07.2017, 16:45   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Это в OnChange эдита? Так не ищи, если введен один сивол, если больше одного - ищи без последнего символа. Смешной правда поиск получится )) Лучше не в OnChange, а по кнопочке поиск сделать, если там миллионы строк в таблице, имхо
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.07.2017, 16:57   #3
Фируз1990
Пользователь
 
Регистрация: 02.11.2016
Сообщений: 10
По умолчанию

да это в чейндже едита ) мне нужен нормальный малый sql запрос.
Фируз1990 вне форума Ответить с цитированием
Старый 27.07.2017, 16:58   #4
Фируз1990
Пользователь
 
Регистрация: 02.11.2016
Сообщений: 10
По умолчанию

если это возможно
Фируз1990 вне форума Ответить с цитированием
Старый 27.07.2017, 17:02   #5
Rockot
Форумчанин
 
Аватар для Rockot
 
Регистрация: 01.06.2012
Сообщений: 139
По умолчанию

Цитата:
Сообщение от Фируз1990 Посмотреть сообщение
если это возможно
Цитата:
Сообщение от Фируз1990 Посмотреть сообщение
да это в чейндже едита ) мне нужен нормальный малый sql запрос.
Так у тебя и так маленький запрос, либо как предложил Аватар, по Count строки запускать поиск, либо просто разбей данные на несколько таблиц, убедись точно ли эти все данные тебе нужны, добавь фильтры и будет тебя счастье.
Следствие: 99% проблем, сваливаемых на Microsoft, является следствием тупости самих программистов.
Rockot вне форума Ответить с цитированием
Старый 27.07.2017, 17:09   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Код:
select count(*)  ... where zzz -чтобы знать сколько всего

select TOP 100 ... --и не получать ВСЕ 23000000 а только сколько "реально" может просмотреть человек
....
where zzz --
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 27.07.2017, 18:33   #7
Фируз1990
Пользователь
 
Регистрация: 02.11.2016
Сообщений: 10
По умолчанию

спасибо но это уже другое ! Но если посчитать что моя таблица имеет 2300000 записи то из них 221520 начинается с буквы "А" то можно можно просто использовать оператор like и поставит а% вот так:
'SELECT فارسی FROM Таблица1 WHERE فارسی LIKE '''+Edit1.text+ 'а%'''
для 200 тыс. записи не уж то плохо )! да и оператор ЛАйК будет благодарит меня тем что я заставляю искать только записи начинающие с А. Иногда мне кажется что когда я ввожу так "%" то оператор Лайк программно матерится мне

Да также можно использовать оператор Not Like

но как никак благодарен Вам !
и если есть какие нибудь хитрые или разумно умные варианты то пишите

Последний раз редактировалось Фируз1990; 28.07.2017 в 07:15.
Фируз1990 вне форума Ответить с цитированием
Старый 27.07.2017, 18:39   #8
Фируз1990
Пользователь
 
Регистрация: 02.11.2016
Сообщений: 10
По умолчанию

спасибо тебе !
Фируз1990 вне форума Ответить с цитированием
Старый 15.08.2017, 20:56   #9
Правильный Вася
Пользователь
 
Регистрация: 15.08.2017
Сообщений: 10
По умолчанию

это НЕ поиск, это отбор данных
поиск - это позиционирование

а вообще действительно лучше сначала дождаться от пользователя ввода всей маски, а уж потом по кнопке "Бегом!" доставать данные

основное время у тебя занимает, скорее всего, перекачка данных (fetch) с сервера на клиент, причем 99.999% этих данных никогда не понадобятся
так зачем мучить комп и людей?
Правильный Вася вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста с SQL запросом базы данных Tormozz Помощь студентам 4 08.06.2016 14:06
Помощь в базе данных sql Saka SQL, базы данных 8 28.12.2015 21:30
SQL-запрос, поиск по базе Konstantin_ua БД в Delphi 26 21.07.2015 16:40
программа на delphi к базе данных MS SQL ShuShuX Помощь студентам 0 20.05.2013 23:17
получение текстовых данных SQL запросом R Dmitry Microsoft Office Excel 3 01.05.2011 01:29