2 / 2 / 0
Регистрация: 15.04.2010
Сообщений: 20
1

ADOQuery не ищет по символам

11.03.2012, 22:44. Показов 953. Ответов 7
Метки нет (Все метки)

Здравствуйте!

Наболевший вопрос для меня, уже в отчаяние пришел.
В связанный DBGrid должно отфильтровываться адреса улиц. Не фильтруется когда ввожу текстом.
Первоначально таблица была в Access - формат Текстовый, размер поля - 50
Сейчас таблицы мигрировали в MS SQL 2008 - nvarchar (50) (Что тоже самое!).
То есть поля везде текстовые, но по тексту не ищет, а только по цифрам. Пытаюсь через переменную.
Делаю запрос:
C++
1
2
3
4
5
6
AnsiString str;
    str=Edit1->Text;
    ADOQuery1->Close();
    ADOQuery1->SQL->Clear();
    ADOQuery1->SQL->Add("Select * from Uchastok WHERE Address LIKE '"+str+"%'ORDER BY Address");
    ADOQuery1->Open();

Прошу помочь!
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.03.2012, 22:44
Ответы с готовыми решениями:

AdoQuery ищет не там где нужно
Добрый вечер, уважаемые форумчане. Столкнулся со следующей проблемой. В рамках дипломного проекта...

Запрос ADOQuery внутри другого ADOQuery реален?
Помогите сформировать запрос для двух ADOQuery. Есть 2 таблицы БД mssql: sotrudniki ,...

Обращение в ADOquery к ADOquery
Доброго времени суток. Вопрос заключается в следующем: Имеется подключенная бд *.mdb к delphi...

Цикл по символам строки
Есть непустая строковая переменная x, хочу перебрать ее посимвольно в цикле. Умеет ли VBA как в...

7
4955 / 2419 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
12.03.2012, 04:36 2
В какое событие пишешь?

C++
1
2
3
4
        ADOQuery1->Close();
        ADOQuery1->SQL->Clear();
        ADOQuery1->SQL->Add("Select * from Uchastok WHERE Address LIKE '"+Edit1->Text+"%'ORDER BY Address");
        ADOQuery1->Open();
Добавлено через 3 минуты
А без сортировки работает?
1
2 / 2 / 0
Регистрация: 15.04.2010
Сообщений: 20
12.03.2012, 11:27  [ТС] 3
по изменению в Edit
C++
1
2
3
4
5
6
7
8
9
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
    AnsiString str;
    str=Edit1->Text;
    ADOQuery1->Close();
    ADOQuery1->SQL->Clear();
    ADOQuery1->SQL->
    Add("Select * from Uchastok WHERE Address LIKE '%"+str+"%'ORDER BY Address");
    ADOQuery1->Open();}
Без сортировки это без ORDER BY Address?
без ORDER BY Address - тот же результат

Добавлено через 21 минуту
Дело может быть в том что DBGrid связан с ADOQuery (в нем строка SQL пустая) и до события Edit1Change DBGrid находится в DBGrid1->Visible=false ?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
    AnsiString str;
    str=Edit1->Text;
    ADOQuery1->Close();
    ADOQuery1->SQL->Clear();
    ADOQuery1->SQL->
    Add("Select * from Uchastok WHERE Address LIKE '%"+str+"%'ORDER BY Address");
    ADOQuery1->Open();
 
 
        //ширина таблиц в DBGride1
    DBGrid1->Visible=true;
    ShowScrollBar(DBGrid1->Handle,SB_BOTH,false);
    DBGrid1->Columns->Items[0]->Width=60;
    DBGrid1->Columns->Items[0]->Visible=false;
    DBGrid1->Columns->Items[1]->Width=100;
    DBGrid1->Columns->Items[1]->FieldName ="Код участка";
    DBGrid1->Columns->Items[2]->Width=100;
    DBGrid1->Columns->Items[2]->FieldName ="Участок";
    DBGrid1->Columns->Items[3]->Width=250;
    DBGrid1->Columns->Items[3]->FieldName ="Адрес";
    DBGrid1->Columns->Items[4]->Width=64;
    DBGrid1->Columns->Items[4]->FieldName ="Удаленность";
    DBGrid1->Columns->Items[5]->Width=200;
    DBGrid1->Columns->Items[5]->FieldName ="Примечание";
}
0
4955 / 2419 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
12.03.2012, 11:59 4
Странно я у себя проверял на аксессе всё нормально.

Это наверно повлияло то, что у тебя MS SQL 2008 там наверно по другому запросы как то делаются

Добавлено через 24 минуты
Цитата Сообщение от solaris Посмотреть сообщение
по изменению в Edit
...
Ну так по цифрам у тебя ищет!!!!!!!!!!!

Хотя попробуй связать Grid через DataSource
1
2 / 2 / 0
Регистрация: 15.04.2010
Сообщений: 20
12.03.2012, 16:20  [ТС] 5
Извиняюсь за глупый вопрос - А как сделать чтоб по числам и символам искал? Я этого добиваюсь, т.к. адреса могут искать по номеру дома и названии улицы

Дело может быть в том что DBGrid связан с ADOQuery

DBGrid через DataSource связан с ADOQuery

Добавлено через 30 минут
если подключиться к локальной Access, то все работает как надо. Значит все дело при обращении к SQL 2008. Может с форматом поля помудрить?
0
4955 / 2419 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
12.03.2012, 17:14 6
Цитата Сообщение от solaris Посмотреть сообщение
А как сделать чтоб по числам и символам искал?
если у тебя в одном поле будет название улицы и номер дома тогда, надо сделать текстовое поле...

Цитата Сообщение от solaris Посмотреть сообщение
nvarchar
это что в 2008 так тип текстового поля называется?
1
2 / 2 / 0
Регистрация: 15.04.2010
Сообщений: 20
12.03.2012, 18:15  [ТС] 7
Цитата Сообщение от Sasha Посмотреть сообщение
это что в 2008 так тип текстового поля называется?
при миграции автоматически создалось поле nvarchar (50)
nvarchar [ ( n | max ) ]
Символьные данные в Юникоде переменной длины. Аргумент n может принимать значение от 1 до 4 000. Аргумент max указывает, что максимальный размер хранилища равен 2^31-1 байт. Размер хранилища в байтах вдвое больше числа введенных символов + 2 байта. Введенные данные могут иметь длину в 0 символов. Синонимами по стандарту ISO для типа nvarchar являются типы national char varying и national character varying.

что тут можно изменить?
0
2 / 2 / 0
Регистрация: 15.04.2010
Сообщений: 20
13.03.2012, 22:52  [ТС] 8
проблема решается установкой русской версии MS SQL 2008 R2
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.03.2012, 22:52
Помогаю со студенческими работами здесь

Split по нескольким символам
Собсно: boost::algorithm::split(parts, str, boost::is_any_of("\r\n\r\n")); Бьёт только по одном...

Вывод строки по символам
Привет всем форумчанам! Пишу программу для шифрования текста кодом Цезаря. Столкнулся с такой...

Разбиение по неэкранированным символам
Пытаюсь разбить строку по символу ';' но только если это не экранированная слэшем: \; ( и в...

Split по двум символам
Помогите написать условие чтоб сплитовать строку по комбинации символов ". "(точка и пробел) вместе...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru