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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2013, 15:14   #1
alfikss
Пользователь
 
Регистрация: 07.05.2013
Сообщений: 24
По умолчанию Сброс RecordCount

Всех приветствую. Вопрос такой. Есть код:
Код Delphi
Код:
...
Query1.ExecSQL;
Query1.First;
RecCnt:=Query1.RecordCount;
i:=1;
sg.RowCount:=1;
sg.RowCount:=2;
sg.FixedRows:=1;
while not Query1.Eof do
begin
....
Вроде все правильно и код работал. Но в один прекрасный момент почему то перестал. Никаких страшных действий не совершал.
После выполнения "sg.RowCount:=1;" сбрасывается на ноль значение Query1.RecordCount. Вставлял в середину ничего не значащие строки - все равно сброс идет именно на этой строке.
alfikss вне форума Ответить с цитированием
Старый 28.07.2013, 15:51   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Не удивительно. RecordCount далеко не всегда хранит кол-во записей.
Я правда не помню от чего это зависит, но сам уже да-а-а-вно его не использую.
И кстати:
Код:
Query1.ExecSQL;
Query1.First;
First после ExecSQL по твоему что-то должно дать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.07.2013, 16:39   #3
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Stilet, потому что если кверя возвращает не полный, а частичный набор данных - RecordCount покажет именно эту часть. у некоторых кверей есть для этого что-то типа RecordCountFromSrv (FIB+) который возвращает именно полное кол-во записей.
ТС, покажи что в Query1.SQL.Text до выполнения Query1.ExecSQL;
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 28.07.2013, 18:04   #4
alfikss
Пользователь
 
Регистрация: 07.05.2013
Сообщений: 24
По умолчанию

Код:
Query1.ExecSQL ; Выполняем запрос
Query1.First ; Устанавливаем курсор на первую строку
Я думал что так. Разве нет?
RecordCount возвращает правильное число записей. Вопрос встает почему скидывается на ноль при выполнении того кода?
Код:
Query1.Active:=false;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT cena.Complect, cena.Cena, compl.skidka, compl.skidka_rub, compl.fix, compl.po_cene, compl.version, compl.summ');
Query1.SQL.Add('FROM org INNER JOIN (cena INNER JOIN compl ON cena.id_cena = compl.id_cena) ON org.id_org = compl.id_org');
Query1.SQL.Add('WHERE org.nazv=:q');
Query1.Parameters.ParamByName('q').Value:=org.Items[org.ItemIndex];
Query1.Active:=true;
Query1.ExecSQL;
Query1.First;
RecCnt:=Query1.RecordCount;
alfikss вне форума Ответить с цитированием
Старый 28.07.2013, 19:02   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
RecordCount покажет именно эту часть.
Ну может и так, мне как-то всегда нули приходили, если я не использовал... уже даже не вспомню что я прописывал чтоб работать с этим свойством корректно. Что-то с кэшем связанное кажись.
Цитата:
Я думал что так. Разве нет?
ExecSQL набор не возвращает, значит First после него бессмысленен.
Цитата:
почему скидывается на ноль при выполнении того кода?
Убери Query1.ExecSQL; совсем - что вернет RecordCount?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.07.2013, 19:06   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

у Вас строчки ЛИШНИЕ!
Цитата:
Код:
Query1.Active:=true;
Query1.ExecSQL;
Query1.First;

RecCnt:=Query1.RecordCount;
уберите отмеченные строчки совсем!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.07.2013, 20:23   #7
alfikss
Пользователь
 
Регистрация: 07.05.2013
Сообщений: 24
По умолчанию

Убирал. Все равно так же все. Повторюсь - изначально код был рабочий и некоторое время все было в порядке и показывало то, что мне нужно было =( РекордКаунт возвращает правильные значения, но после строки "sg.RowCount:=1;" начал сбрасывать свое значение на ноль и, соответственно, в цикл не заходит, т.к. выходит что в Квери нет значений =(
alfikss вне форума Ответить с цитированием
Старый 28.07.2013, 20:54   #8
alfikss
Пользователь
 
Регистрация: 07.05.2013
Сообщений: 24
По умолчанию

Получается что вообще данные из Квери исчезают
alfikss вне форума Ответить с цитированием
Старый 28.07.2013, 20:56   #9
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

что такое sg?
какое отношение друг к другу в коде
Код:
RecCnt:=Query1.RecordCount;
i:=1;
sg.RowCount:=1;
sg.RowCount:=2;
имеют подчеркнутые строки?
и какой логический смысл со строк выделенных синим?
ну и попробовать примерно такой код:
Код:
Query1.Close;
Query1.SQL.Text := 'SELECT cena.Complect, cena.Cena, compl.skidka, compl.skidka_rub, compl.fix, compl.po_cene, compl.version, compl.summ '
  + 'FROM org INNER JOIN (cena INNER JOIN compl ON cena.id_cena = compl.id_cena) ON org.id_org = compl.id_org '
  + 'WHERE org.nazv=:q';
Query1.Parameters.ParamByName('q').Value:=org.Items[org.ItemIndex];
Query1.Open;
RecCnt := Query1.RecordCount;
if RecCnt = 0 then 
begin
  ShowMessage('Даных по запросу не найдено');
  Exit;
end;

i:=1;
sg.RowCount:=2;
sg.FixedRows:=1;
while not Query1.Eof do
begin
...
  Query1.Next;
end;
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 28.07.2013, 21:09   #10
alfikss
Пользователь
 
Регистрация: 07.05.2013
Сообщений: 24
По умолчанию

Код:
Query1.Close;
Query1.SQL.Text := 'SELECT cena.Complect, cena.Cena, compl.skidka, compl.skidka_rub, compl.fix, compl.po_cene, compl.version, compl.summ '
  + 'FROM org INNER JOIN (cena INNER JOIN compl ON cena.id_cena = compl.id_cena) ON org.id_org = compl.id_org '
  + 'WHERE org.nazv=:q';
Query1.Parameters.ParamByName('q').Value:=org.Items[org.ItemIndex];
Query1.Open;
Чем это отличается от моего построения?

Цитата:
что такое sg?
какое отношение друг к другу в коде имеют подчеркнутые строки?
и какой логический смысл со строк выделенных синим?
sg - StringGrid
Смысл: Есть ЛистБокс с названиями организаций, которые подставляются в запрос при их выборе. Количество строк, которое вернет запрос, может быть разное. Таким образом я обнуляю СтрингГрид, затем устанавливаю кол-во строк(не считая заголовка) равным 1 и устанавливаю фиксацию заголовков( т.к. при sg.RowCount=1 фиксация спадает)
Код:
if RecCnt = 0 then 
begin
  ShowMessage('Даных по запросу не найдено');
  Exit;
end;
Именно для этого данная переменная и используется.
alfikss вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
RecordCount в dbExpress при запросе SELECT с параметром Leximus БД в Delphi 0 31.05.2012 09:50
Сброс ОС PashaSoscov Операционные системы общие вопросы 5 07.01.2012 23:00
QTimer, сброс Vanta11a Qt и кроссплатформенное программирование С/С++ 2 13.09.2011 13:32
Listview vs сброс bulldog5293 Общие вопросы Delphi 0 13.01.2011 21:46
Проблема с RecordCount в SQLQuery Stalevar БД в Delphi 2 23.04.2009 18:57