C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Подскажите в чем проблема
new-zu
Отправлено: 16.11.2005, 10:59


Не зарегистрирован







Народ объясните пожалуйста почему после исполнения кода:
void __fastcall TForm1::Button1Click(TObject *Sender)
{

OraQuery1->Close();
OraQuery1->ParamByName("INDEKS_KPA")->AsString = Edit1->Text;
OraQuery1->ParamByName("ZAVADSKOY_NOMER")->AsString = Edit2->Text;
OraQuery1->ParamByName("GORANT_SROK")->AsString = Edit3->Text;
OraQuery1->ParamByName("PAPKA")->AsString = Edit4->Text;
OraQuery1->ParamByName("OTMETKA_O_PROVED")->AsString = Edit5->Text;
OraQuery1->ParamByName("in_dat1")->AsString = MaskEdit1->Text;
OraQuery1->ParamByName("in_dat2")->AsString = MaskEdit2->Text;
OraQuery1->ParamByName("in_dat5")->AsString = MaskEdit3->Text;
OraQuery1->ParamByName("in_dat6")->AsString = MaskEdit4->Text;
OraQuery1->Open();
StatusBar2->Panels->Items[0]->Text=OraQuery1->RecordCount;
OraQuery1->First();
}

SQL запрос: select * from SPYSOK_PRIBOROV
where
(INDEKS_KPA LIKE :INDEKS_KPA or :INDEKS_KPA is null)
and (ZAVADSKOY_NOMER LIKE :ZAVADSKOY_NOMER or :ZAVADSKOY_NOMER is
null)
and (GORANT_SROK like :GORANT_SROK or :GORANT_SROK is null)
and (PAPKA like:PAPKA or :PAPKA is null)
and (OTMETKA_O_PROVED LIKE:OTMETKA_O_PROVED or :OTMETKA_O_PROVED
is null)
and DATA_IZGOTOVLENIY BETWEEN to_date(:in_dat1,'dd.mm.yyyy') AND
to_date(:in_dat2,'dd.mm.yyyy')
and DATA_PROVERKI BETWEEN to_date(:in_dat5,'dd.mm.yyyy') AND
to_date(:in_dat6,'dd.mm.yyyy')

В StatusBar2 высвесивается только 25 записей хотя я точно заня что их там 225
AVC
Отправлено: 16.11.2005, 15:07


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE

В StatusBar2 высвесивается только 25 записей хотя я точно заня что их там 225

Записи в StatusBar cool.gif Да вы, батенька, ба-а-льшой орининал smile.gif .

25 — это, скорее всего, первая порция от 225, станьте на последнюю запись и посмотрите результат.
BadMan
Отправлено: 15.12.2005, 19:09


Дежурный стрелочник

Группа: Участник
Сообщений: 37



На сколько я знаю RecordCount не работает с запросами — он показывает не количество строк всего по запросу, а только реально считанное в текущем курсоре... Если база будет состоять из пары миллионов записей — то никакой памяти не хватит на запрос SELECT *
Тут надо в самом запросе функцию размещать подсчета записей по условию...
dust
Отправлено: 15.12.2005, 22:08


Не зарегистрирован







QUOTE

new-zu:
В StatusBar2 высвесивается только 25 записей

Наверное, в DBGrid видно 25 строк, вот и фетчит Query по 25 записей...
QUOTE

BadMan:
На сколько я знаю RecordCount не работает с запросами

Извините, но — чушь. Property есть, но не работает ?
QUOTE

BadMan:
он показывает не количество строк всего по запросу, а только реально считанное в текущем курсоре

А ?... ohmy.gif
QUOTE

BadMan:
Если база будет состоять из пары миллионов записей — то никакой памяти не хватит на запрос SELECT *

Хватит. Никто (находясь в здравом рассудке) не тягает на клиента миллионы записей.
QUOTE

BadMan:
Тут надо в самом запросе функцию размещать подсчета записей по условию

Хоть бы имхи ставил что-ли...
QUOTE

new-zu:
хотя я точно заня что их там 225

Ну так и скажи:
CODE
OraQuery1->FetchAll();
 — ведь не 2000000 записей у тебя.
Gedeon
Отправлено: 16.12.2005, 08:51


Ветеран

Группа: Модератор
Сообщений: 1742



Ну, FetchAll(); — это не гуманно, это пока 225 записей, а потом будет 1000000 и что?

Проще все-таки у сервера спросить сколько записей отвечает данному условию, хоть отдельным запросом(что наверное лучше), хоть в этом же.

Вернуться в Работа с базами данных в C++Builder