Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Firebird, Interbase > Разные результаты при использовании WHERE


Автор: Antony41 12.4.2013, 21:45
Сабж. Запарился уже. знаю FireBird много не много. 
Вобще наблюдалось ли в версии 2,5 при запросах к таблицам через WHERE разные результаты?
делаю так
Код

                    SQLQuery2('SELECT * from GROUPS WHERE ID = '+IntToStr(fDataStruct.GROUPID));
                    //ShowMessage(IntToStr(fDataStruct.GROUPID));
                    if DataModule11.SQLQuery2.RecordCount <> 0 then
                      Inc(TestInc);
 

по окончанию выполняю следующее
Код

ShowMessage(IntToStr(TestInc));


Каждый раз разное кол-во записей. В момент проверки база не используется ни какой программой.

Автор: Akina 12.4.2013, 23:45
А где у тебя тут количество записей? Ты просто проверяешь, нулевое оно или нет...

Автор: Antony41 13.4.2013, 07:26
Вот именно я делаю запрос в базу данных, затем проверяю если запись нашлась, то увеличить счетчик.
то есть выполняю этот запрос в цикле, и все время один и тот же, а вот по окончанию я смотрю результат, и счетчик то на единицу меньше то больше то равен и т.д.

Добавлено через 44 секунды
то есть в какой то момент он просто не получает запись, а иногда получает что за ...

Автор: password 13.4.2013, 10:18
Цитата

Вот именно я делаю запрос в базу данных, затем проверяю если запись нашлась, то увеличить счетчик.
то есть выполняю этот запрос в цикле


Откуда ты берешь значения: fDataStruct.GROUPID? из другой базы данных? И зачем цикл, если можно сделать все sql-ем
Код

select count(*) as kols from GROUPS WHERE ID in (select GROUPID from ...)

Автор: Akella 13.4.2013, 14:55
а ты там напиши конкретное значение
Код
SELECT * from GROUPS WHERE ID = 10


И что у тебя с feth? Может fetch происходит через раз?

Автор: Antony41 13.4.2013, 15:02
блин причина была в задержке тоесть я в цикле через каждую сек. выполнял Application.ProcessMessages, не понятно почему так получается, но проблему решил.
А вот за это 
Код

select count(*) as kols from GROUPS WHERE ID in (select GROUPID from ...)

отдельное спасибо

Добавлено через 5 минут и 35 секунд
смотрите я получаю все записи из таблицы, затем я пробегаюсь по полям LASTDATETIME(TDateTime), и проверяю если значение которое я в данный момент прохожу в цикле входит в заданный диапазон, то тогда я начинаю уже обращение ко второй базе
тоесть например я получил значение 12.04.2013 18:05:55
и проверяю входит ли оно в диапазон дат от 01.01.2013 по 12.05.2013
Можно ли как то получить все записи одним запросом которые входят в диапазон?

Добавлено через 7 минут и 6 секунд
проще говоря я выдераю из поля значение времени и проверяю его в функции DateTimeInRange(DateStart, DateEnd, Value):Boolean 

Автор: password 13.4.2013, 19:49
Цитата

Можно ли как то получить все записи одним запросом которые входят в диапазон?

както так:
Код

select * from ....
where  cast(LASTDATETIME as date) between cast('01.01.2013' as date) and cast('12.05.2013' as date)

Автор: Antony41 13.4.2013, 21:53
спасибо чуть позже поэкспериментирую и отпишусь

Автор: Antony41 13.2.2014, 03:17
всё отлично раотает спасибо Вам всем за помощь.
Не совсем конечно вовремя ответил

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