Форум: "Базы";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];
ВнизСравнение дат Найти похожие ветки
← →
xroot (2005-06-05 17:22) [0]Я пытаюсь вытаскивать данные таблицы с датой меньшей сегодняшней с помощью TQuery, но вылетает ошибка. База Microsoft Access, исх. поле имеет формат Дата/Время.
Напишите простейший пример.
← →
Anatoly Podgoretsky © (2005-06-05 17:30) [1]А может быть ты сначала скажешь что за обика и приведешь свой код?
← →
xroot (2005-06-05 17:37) [2]Это 4асть кода, в которой к уже имеющемуся запросу с условием (это 4асть запроса работает нормально) добавляется условие отбора по дате.
Я впервые делаю такое, поэтому, видимо, это полный бред.
for i := 7 to 11 do if (FindComponent("TeThemeRadioButton"+ IntToStr(i)) as TTeThemeRadioButton).Checked then Cap := i;
case Cap of
8: Eq := "<";
9: Eq := ">";
10: Eq := "=";
11: Eq := "<=";
end;
if Cap > 7 then
begin
SortDate := DateTostr(Date);
QReestr.SQL.Add("AND (Д_отгрузки " + Eq + " :PD)");
QReestr.ParamByName("PD").AsString := SortDate;
end;
Вот так работает, но не верно.
← →
Zacho © (2005-06-05 19:06) [3]xroot (05.06.05 17:37) [2]
Лень, разбираться в твоём коде, но просмотрев "по-диагонали" скажу:
1. Если формируешь запрос динамически, то зачем используешь параметры ? Смысла в этом нет никакого.
2. "Вот так работает, но не верно." - Как именно "не верно" ? Опиши подробнее.
3. Приведи сообщение об ошибке и компоненты доступа.
4. Приведи запрос целиком, а не только его окончание.
P.S. У тебя проблемы с клавиатурой, или просто думаешь что "4" вместо "ч" это круто ???
← →
sniknik © (2005-06-05 19:58) [4]смысл в параметре есть, и если задавать его правильно то ошибок не будет. и вообще чтобы не задумываться и на нарываться на трудноуловимые глюки, даты, числа с плавающими запятыми и строки, всегда лучше задавать параметрами.
//SortDate := DateTostr(Date); лишнее
QReestr.SQL.Add("AND (Д_отгрузки " + Eq + " :PD)");
QReestr.ParamByName("PD").AsDateTime:= Date();
вот так должно работать верно...
и еще одно из показанного кода > 10: Eq := "="; равно в запросе может не работать смотря как в базе дата хранится "чистая" или со временем.
и еще (не глюк) посмотри хелп по TRadioGroup, не нужно будет циклов странных писать...
← →
Zacho © (2005-06-05 20:31) [5]sniknik © (05.06.05 19:58) [4]
смысл в параметре есть, и если задавать его правильно то ошибок не будет. и вообще чтобы не задумываться и на нарываться на трудноуловимые глюки, даты, числа с плавающими запятыми и строки, всегда лучше задавать параметрами.
Частично согласен :) , но при чём сдесь строки ?
← →
Anatoly Podgoretsky © (2005-06-05 20:38) [6]Zacho © (05.06.05 20:31) [5]
Ну например апострофы и юникод
← →
Zacho © (2005-06-05 20:47) [7]Anatoly Podgoretsky © (05.06.05 20:38) [6]
Да, возможно
← →
Anatoly Podgoretsky © (2005-06-05 21:00) [8]Zacho © (05.06.05 20:47) [7]
Недавно с этим вопросом сталкивался на одном из форумов, какие только невероятные решения не предлагали.
← →
Zacho © (2005-06-05 21:17) [9]Anatoly Podgoretsky © (05.06.05 21:00) [8]
Забавно :) Любопытно, какие ?
Странно, я даже не предпологал, что возможны проблемы со строками. Хотя в моей практике были и апострофы, и юникод :) С юникодом были проблемы, но никак не связанные с параметрами :)
← →
Anatoly Podgoretsky © (2005-06-05 21:36) [10]SQL.Text := Text + WS_VAR
Решение - :WS_PAR
← →
sniknik © (2005-06-05 21:56) [11]> Хотя в моей практике были и апострофы, и юникод :)
и что ты делал если строки вбивает юзер(не в DBEdit а в простой контрол)/передаеш из другой таблици (в обшем не знаеш содержание на момент составления запроса)?
парсил на предмет апострофов и вставлял задвоенные? или просто игнорировал их по причине невозможности данных с ними?
если первое то = дополнительные тормоза на передаче между таблицами, если второе = потенциальные глюки (даже если сейчас уверен что апострофы в данном поле невозможны, это всего лиш отложенные на неопределенное время глюки).
и с юникодом сомневаюсь что правильно так работает (вернее всегда правильно), но врать не буду, никогда юникод в запрос так не вставлял... с параметром да, тестил, но не более (проверял компоненты Tnt).
← →
Anatoly Podgoretsky © (2005-06-05 22:01) [12]С апострофами нет проблем, для этого есть QuotedStr, а вот с Юникод без параметров не обойтись. Имеется ввиду передать данные именно как Юникод в Юникод поле.
← →
xroot (2005-06-05 22:07) [13]Извините, я реально тупил. Все работало с самого на4ала, я просто не в ту колонку смотрел. Извините еще раз.
Спасибо за столь бурное обсуждение.
PS: Если не тяжело посмотрите мой 2ой вопрос
← →
Zacho © (2005-06-05 22:09) [14]sniknik © (05.06.05 21:56) [11]
и что ты делал если строки вбивает юзер(не в DBEdit а в простой контрол)/передаеш из другой таблици (в обшем не знаеш содержание на момент составления запроса)?
парсил на предмет апострофов и вставлял задвоенные? или просто игнорировал их по причине невозможности данных с ними?
AP уже ответил :)
А с юникодом... Действительно, проблемы есть. Просто я на них не наткнулся.
Вообще, написав "Смысла в этом нет никакого." я, конечно, лажанулся. Не подумал. Просто код, в котором формируют строку запроса с параметром, и сразу же присваивают параметрам значение, у меня вызывает подозрения.
← →
Anatoly Podgoretsky © (2005-06-05 22:21) [15]Это не должно вызывать подозрений, кроме указаной необходимости для ряда типов, надо учесть еще возможность оптимизации.
Подготовленый запрос с параметрами будет потом выполняться весьма быстро.
Вот что должно вызывать подозрение и возражение, так это запросы типа SELECT *
← →
Anatoly Podgoretsky © (2005-06-05 22:22) [16]xroot (05.06.05 22:07) [13]
Так второго вопроса здесь не видать.
← →
xroot (2005-06-05 22:23) [17]Так пост на один ниже этого!
← →
Zacho © (2005-06-05 22:31) [18]Anatoly Podgoretsky © (05.06.05 22:21) [15]
Это не должно вызывать подозрений
У меня вызывает :)
Потому что насмотрелся я похожего кода и задолбался уже объяснять, что параметрам можно (и нужно) присваивать новые значения без перформирования всего запроса.
Вот и ответил "на автомате" :)
← →
Anatoly Podgoretsky © (2005-06-05 22:32) [19]Zacho © (05.06.05 22:31) [18]
Aaaaaa
← →
sniknik © (2005-06-06 00:14) [20]xroot (05.06.05 22:23) [17]
> Так пост на один ниже этого!
на один ниже это [18]-й, там тоже вопросов не видать... ни второго ни даже первого...
если имеется ввиду > xroot (05.06.05 17:37) [2] то там тоже вопросов нет, имеется утверждение "Вот так работает, но не верно." весьма спорное кстати, без определения критериев "верности"...
p.s. формулируйте свои мысли яснее, вопросы понятнее. ну... так как будто это вам надо... а то пока, что такое впечатление что это нужно нам.
p.p.s. впрочем, четкости мыслей видать трудно добиться если мыслить цифрами вместо букв. ;о))
← →
Тучудище (2005-06-06 09:38) [21]
QReestr.ParamByName("PD").AsString
??????
← →
msguns © (2005-06-06 09:51) [22]>Тучудище (06.06.05 09:38) [21]
>>QReestr.ParamByName("PD").AsString
>??????
К чему это ?
← →
sniknik © (2005-06-06 10:49) [23]это наверное праведное возмущение что дату передают строковым параметром... ;о)
но в общемто это вполне легально... к сожалению. в аксесе есть автоприведения типов т.что такая запись вполне легитимна. правда автоприведение работает не во всех случаях, и часто дает неверные результаты... (с датами, путает месяц и день), но синтаксически запись здесь верная.
← →
msguns © (2005-06-06 10:55) [24]>sniknik © (06.06.05 10:49) [23]
Вот и я не понял, зачем там так много квестов - можно подумать, что написана чушь.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.055 c