Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка запроса к dbf. [D7, XP]


Страницы:   1 2

MonoLife ©   (2009-05-18 08:02:00) 

Ситуация крайне глупая, но я в недоумении...
Имеются базы dbf (не мои). Произвожу запросы к ней с использованием конструкции в SQL:
SELECT <fields> FROM <base1> WHERE date1 BETWEEN :dt1 and :dt2
UNIONSELECT <fields> FROM <base2> WHERE date1 BETWEEN :dt1 and :dt2 ORDER BY <field>

Параметры dt1 и dt2 TDate. Поля date1 - TDate.
Псевдоним в BDE-администраторе настроен на эти dbf файлы.
Компонент TQuery databasename=псевдониму...
Подобный запрос может работать месяц, год... Но в один моментUNION перестает работать:(
По отдельности из обеих баз выборка идет правильная, а с UNION, то 0 записей, то только записи из таблицы, к примеру base2...
Проверка файлов dbf различными другими средствами показывает, что база данных без ошибок...
Я не понимаю, что случается и почему вдруг UNION перестает "работать".
Самое интересное, что через несколько дней может опять восстановиться запрос с UNION, а может и нет..
Ребят, посоветуйте что можно сделать?


MonoLife   (2009-05-23 07:24:00) [1]


> Нат   (23.05.09 00:31) [35]

Советы исключительно полезные, спасибо.

> Очень странно, что запрос вообще работал с двумя параметрами.
> ..

Действительно странно.. Вот полгода с 2-мя параметрами работало..затем один, другой раз - сбой, затем опять все в порядке..
В любом случае, параметров теперь 4..

> Стоит исключить присваевание даты через текстовую переменную,
>  параметры удобны тем, что можно делать через любой тип
> данных.
> Присваивайте сразу тип TDate (TDateTime).

строковая переменная была лишь для примера, в программе, разумеется, используется ТDate...

> Производится ли Parameters.ParseSQL?

нет, а обязательно?

> Стоит проверить Parameters.Count, а также Parameters.Items
>

Да, только сейчас всё работает и выборки делаются правильные.. До следующего всплеска аномальной активности))


> KilkennyCat ©   (23.05.09 00:43) [36]
>
> Осталось спросить, не стоит ли Касперский. Эта зараза влияет
> даже если не стоит.

Не, заразы нема, NOD32, однако..))


Нат   (2009-05-23 01:08:00) [2]

+
Достаточно, что он про нас думает
:-D


KilkennyCat   (2009-05-23 00:43:00) [3]

Осталось спросить, не стоит ли Касперский. Эта зараза влияет даже если не стоит.


Нат   (2009-05-23 00:31:00) [4]

Странно, что не работает с четырьмя параметрами.
Очень странно, что запрос вообще работал с двумя параметрами... Поскольку Дельфи однозначно воспринимает все параметры в строке запроса как разные, вне заисимости от от совпадения имени.
Стоит исключить присваевание даты через текстовую переменную, параметры удобны тем, что можно делать через любой тип данных.
Присваивайте сразу тип TDate (TDateTime).
Заодно узнаете, все ли даты у Вас даты, и избежите проблем с "американским" форматом даты "mm/dd/yy"
Стоит проверить Parameters.Count, а также Parameters.Items [i]
Производится ли Parameters.ParseSQL?
Сделать вывод в лог состояния параметров и посмотреть.


MonoLife   (2009-05-20 03:40:00) [5]


> AndreyV ©   (19.05.09 17:23) [33]


> или тебе пофиг, что данные меняются?

в каком смысле, пофиг?
Данные, конечно меняются, но в течение нескольких дней. А я делаю запрос к базе, на момент запроса, статичной. То есть, 2 таблицы утром - запрос не работает, те же самые таблицы без изменений вечером - работает.
Барабашка однако....

> Кстати, пользуйся лучше EncodeDate() - не зависит от текущей
> локали.

спасибо.


AndreyV   (2009-05-19 17:23:00) [6]

> [32] MonoLife ©   (19.05.09 16:08)
> > И сохрани базу в этом состоянии куда-нибудь, там и копай.
>
> Нет смысла...опишу чуть подробнее:
> копирую базу к себе на комп. Локально с ней работаю (делаю
> те самые запросы). Так вот, без каких-либо махинаций с одними
> и теми же файлами dbf запрос с Union то работает, то не
> нет..

Ты писал выше, что с разными, или тебе пофиг, что данные меняются? Или не так делаешь, как описываешь, или и впрямь барабашка.

> ParamByName('dt1').value:=StrToDate('01.05.2009')

Кстати, пользуйся лучше EncodeDate() - не зависит от текущей локали.


MonoLife   (2009-05-19 16:08:00) [7]


> AndreyV ©   (19.05.09 05:21) [31]
> Если они порушены, может быть что угодно

в таком случае, сторонняя программа, работающими с ними так же в ряд ли смогла работать, но этого не наблюдается.

Файлы не фоксовские. В bde - default driver=dbase, Langdriver = 'ascii' ANSI

> И сохрани базу в этом состоянии куда-нибудь, там и копай.

Нет смысла...опишу чуть подробнее:
копирую базу к себе на комп. Локально с ней работаю (делаю те самые запросы). Так вот, без каких-либо махинаций с одними и теми же файлами dbf запрос с Union то работает, то не нет..
Второе, что я сделал после глюка с запросом, это средствами проги, идущей с этими файлами, провел переиндексацию, упаковку и т.п... полечил, короче...
Глюк с запросом не исчез.. Просто, в середине дня, вдруг снова заработал..
Сегодня, кстати, работает))


AndreyV   (2009-05-19 05:21:00) [8]

> [30] MonoLife ©   (18.05.09 17:21)
> Теперь до следующего раза.. может отловлю момент когда это
> происходит..

И сохрани базу в этом состоянии куда-нибудь, там и копай.

> [25] MonoLife ©   (18.05.09 14:38)
> > Anatoly Podgoretsky ©   (18.05.09 12:41) [21]
> >...а возможно с порушеной системой, например сбитые индексы...
>
> эм.. они что, то рушатся, то сами восстанавливаются?
>
> Я понимаю, если бы всегда выполнялся запрос или никогда
> не выполнялся...

Если они порушены, может быть что угодно.
И ты не уточнил, для полноты картины, файлы FoxPro или чьи другие.


MonoLife   (2009-05-18 17:21:00) [9]


> Тут не пояснять нужно, а причину искать.

Рад бы в рай...
Есть штатное средство для проверки этих таблиц (шло с ними). Лечил, проверял на всякий случай, там всё было в порядке.. Да и спец. ПО, использующее эти файлы работает, не глючит...
Ладно, спасибо, что уделили мне время..
Теперь до следующего раза.. может отловлю момент когда это происходит..


Anatoly Podgoretsky   (2009-05-18 16:07:00) [10]

> MonoLife  (18.05.2009 15:43:28)  [28]

Тут не пояснять нужно, а причину искать.
Для начала переиндексировать таблицы, не помню но возможно это можно сделать с помощью DBD


MonoLife   (2009-05-18 15:43:00) [11]


> Anatoly Podgoretsky ©   (18.05.09 14:53) [27]

ясно....Если есть вероятность проблемы с индексами, то тогда вполне может быть такая котовасия..
Я, всё же, грешу на какие-то, ранее запущенные и не выгруженные, процессы в системе.. Но кто их запустил и кто потом выгрузил?..

Кстати, Anatoly,  поясните, если не трудно, плз,

>С Union план разный


Anatoly Podgoretsky   (2009-05-18 14:53:00) [12]


> MonoLife ©   (18.05.09 14:38) [25]

У меня пока других предположений нет.


MonoLife   (2009-05-18 14:44:00) [13]


> Медвежонок Пятачок ©   (18.05.09 12:46) [24]

сорри. упустил твой пост..
спасибо, посмотрим, как долго это продержится...


MonoLife   (2009-05-18 14:38:00) [14]


> Anatoly Podgoretsky ©   (18.05.09 12:45) [23]
>
> Кстати ему особо верить нельзя, поскольку даже базы с таблицами
> путает.

особо - да:)

> Anatoly Podgoretsky ©   (18.05.09 12:41) [21]
>...а возможно с порушеной системой, например сбитые индексы...

эм.. они что, то рушатся, то сами восстанавливаются?

Я понимаю, если бы всегда выполнялся запрос или никогда не выполнялся...
В общем, благодарю за содействие и сочувствие..


Медвежонок Пятачок   (2009-05-18 12:46:00) [15]

By default, non-distinct rows are aggregated into single rows in a UNION join. Use ALL to retain non-distinct rows.


Anatoly Podgoretsky   (2009-05-18 12:45:00) [16]

Кстати ему особо верить нельзя, поскольку даже базы с таблицами путает.


Anatoly Podgoretsky   (2009-05-18 12:43:00) [17]


> Причем скорее всего с элементом времени не равным 00:00:
> 00

В данном случае без разницы, просто получит не все данные.


Anatoly Podgoretsky   (2009-05-18 12:41:00) [18]


> Не забываем, что по отдельности (без UNION) все записи выбираются

Это как бы два разных отчета, второй добавлен в конец первого и далее отсортирован. Не может не работать, у тебя проблема не с запросами, а возможно с порушеной системой, например сбитые индексы. С Union план разный.


Медвежонок Пятачок   (2009-05-18 12:05:00) [19]

Не забываем, что по отдельности (без UNION) все записи выбираются

Union All


Медвежонок Пятачок   (2009-05-18 12:05:00) [20]

Они тоже имеют значение TDATE - текущую дату..

А параметры тоже содержат значение TDateTime.
Причем скорее всего с элементом времени не равным 00:00:00


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо