Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > поиск в DBGrid


Автор: Ildarinho 18.6.2009, 17:52
Нужно сделать поиск в таблице DBGrid("Товары"), по значению "Код товара"(CODE_GOODS), т.е. по числовому значению, вводя в Edit
 
Сам накидал код, но при вводе в Edit выдает ошибку:


void __fastcall TMain::Edit3Change(TObject *Sender)
{
   TLocateOptions Options;
   Options.Clear();
   Options << loCaseInsensitive << loPartialKey;
   OraQuery1->Locate("CODE_GOODS", Edit3->Text, Options);
}


и кстати там Edit3->Text или StrToInt(Edit3->Text)? Ведь значение числовое.

Вот какую ошибку выдает:
'Access violation at address 004AD457 in module 'Project1.exe'.Read of address 00000094'.


Автор: Данкинг 18.6.2009, 18:02
Цитата(Ildarinho @  18.6.2009,  18:52 Найти цитируемый пост)
Нужно сделать поиск в таблице DBGrid

DBGrid не ищет, он отображает. smile  

Цитата(Ildarinho @  18.6.2009,  18:52 Найти цитируемый пост)
StrToInt(Edit3->Text)

Если числовое - то число и ищешь.

Цитата(Ildarinho @  18.6.2009,  18:52 Найти цитируемый пост)
'Access violation at address 004AD457 in module 'Project1.exe'.Read of address 00000094'.

Что-то мне кажется, это не с поиском связано...

Автор: Dmi3ev 19.6.2009, 00:58
Код

        TLocateOptions o;
        if(ADOQuery2->Locate("fio", Edit2->Text, o<<loCaseInsensitive))
                Edit2->Clear();
        else
                MessageBox(NULL,
                "Клиент с такими данными не найден!",
                "Сообщение", MB_OK);

этот код работает, тип поля в данном примере текстовый
Цитата

'Access violation at address 004AD457 in module 'Project1.exe'.Read of address 00000094'.

1) какой тип поля?
2) а в бд значения есть?
3) кроме этого кода ты больше ничего не делаешь?

Автор: mrbrooks 19.6.2009, 08:15
Цитата(Данкинг @  18.6.2009,  18:02 Найти цитируемый пост)
DBGrid не ищет, он отображает. 

Это в стандартном контроле, а в VCL Data Access Components присутствует TCRDBGrid - он и ищет, и фильтрует, только что не пляшет.

Автор: Ildarinho 19.6.2009, 10:27
А если поле Integer то:

if(ADOQuery2->Locate("id", StrToInt(Edit2->Text), o<<loCaseInsensitive))
???

Автор: Данкинг 19.6.2009, 11:16
Ildarinho, попробуй - расскажешь... smile 

Автор: Ildarinho 19.6.2009, 11:40
Тоже самое.... Гыыыы(

Автор: Данкинг 19.6.2009, 12:16
Цитата(Ildarinho @ 19.6.2009,  12:40)
Тоже самое.... Гыыыы(

Значит, ошибка не в этом, как я и говорил.

Автор: Ildarinho 19.6.2009, 14:50
Показывает ошибку на строку:
-> OraQuery1->Locate("CODE_GOODS", KeyValues, Options);

Автор: Alca 19.6.2009, 15:44
TCRDBGrid платный?

Автор: Ildarinho 19.6.2009, 16:28
хз smile 

Автор: Ildarinho 19.6.2009, 20:15
в OraQuery запрос забыл написать smile :select * from GOODS))Текущая ошибка устранена, но выдает новую)))

'Field CODE_GOODS not found'

а вот сам код:

void __fastcall TMain::Edit3Change(TObject *Sender)
{
    TLocateOptions Options;
    Options.Clear();
    Options << loCaseInsensitive << loPartialKey;
    OraQuery2->Locate("CODE_GOODS", Edit3->Text, Options);
}

Автор: Alca 19.6.2009, 20:49
Цитата

'Field CODE_GOODS not found'

'Поле CODE_GOODS не найдено' 

Автор: Данкинг 19.6.2009, 21:46
Цитата(Ildarinho @  19.6.2009,  21:15 Найти цитируемый пост)
'Field CODE_GOODS not found'

По-твоему, как сиё переводится с иностранного языка?

Автор: Ildarinho 19.6.2009, 22:30
при попытке сделать запрос активным и выдает такую ошибку
Тьфу, тьфу, но энто я переводить умею smile 

Автор: Данкинг 19.6.2009, 22:38
Цитата(Ildarinho @  19.6.2009,  23:30 Найти цитируемый пост)
при попытке сделать запрос активным 

Код покажи.

Автор: Ildarinho 20.6.2009, 13:14
  OraQuery2->SQL->Add("select from GOODS");
   TLocateOptions Options;
   Options.Clear();
   Variant KeyValues (Edit3->Text);
   Options << loCaseInsensitive << loPartialKey;
   OraQuery2->Locate("CODE_GOODS", KeyValues, Options);
   OraQuery2->ExecSQL();

Автор: Данкинг 20.6.2009, 13:33
1. Для select... используется не OraQuery2->ExecSQL(); , а OraQuery2->Open; 
2. Кверя должна быть сначала открыта. А потом с ней уже можно что-то делать, т.е. искать, как ты.
3. Перед изменением параметров SQL хорошо бы кверю закрыть и очистить. Т.е.:

Код

OraQuery2->Close();
OraQuery2->SQL.Clear;
OraQuery2->SQL->Add("select from GOODS");
 OraQuery2->Open();
  TLocateOptions Options;
  Options.Clear();
  Variant KeyValues (Edit3->Text);
  Options << loCaseInsensitive << loPartialKey;
  OraQuery2->Locate("CODE_GOODS", KeyValues, Options);


Автор: Ildarinho 20.6.2009, 14:36
ошибка 'ORA-00936:missing expression'(((

Автор: Данкинг 20.6.2009, 14:43
Цитата(Ildarinho @ 20.6.2009,  15:36)
ошибка 'ORA-00936:missing expression'(((

На какой строке?! smile 

Автор: Ildarinho 20.6.2009, 14:47
smile 
Показывает что ошибка, на строку не указывает

Добавлено через 3 минуты и 11 секунд
OraQuery2->SQL->Add("select from GOODS");
 вот в этой строке отредоктировал и написал
OraQuery2->SQL->Add("select * from GOODS");
Ошибку не выдает да и не ищет(

Автор: Ildarinho 21.6.2009, 14:46
Получилось) Была ошибка в том что у меня OraDataSourse была соединена с OraTable а не с OraQuery
Всем спасибо!

Добавлено через 3 минуты и 41 секунду
теперь делаю так:
    OraDataSource1->DataSet = OraQuery2;
    OraQuery2->Close();
    OraQuery2->SQL->Clear();
    OraQuery2->SQL->Add("select * from GOODS");
    OraQuery2->Open();
    TLocateOptions Options;
    Options.Clear();
    Variant KeyValues (Edit3->Text);
    Options << loCaseInsensitive << loPartialKey;
    OraQuery2->Locate("CODE_GOODS", KeyValues, Options);
    OraQuery2->Active = true;

Автор: Данкинг 21.6.2009, 17:37
Цитата(Ildarinho @  21.6.2009,  15:46 Найти цитируемый пост)
Была ошибка в том что у меня OraDataSourse была соединена с OraTable а не с OraQuery

Я так и думал, что здесь что-то не то. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)