Форум: "Базы";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Внизтип поля DATE Найти похожие ветки
← →
Peter_cc (2005-05-20 09:04) [0]Здравствуйте мастера
Использую таблицу dbf(dBASE Files). Есть поле MDATE соответственно я ставлю тип поля DATE.
Пишу запросик простенький select * from tabl1 where MDATE=’21.01.2005’ во время выполнения запроса вылетает ошибка «несоответствия типов данных в выражениях условиях отбора»
Если сделать полю другой тип ну допустим CHARACTER то ошибка не возникает…
Подскажите почему так происходит
Заранее благодарен.
← →
Anatoly Podgoretsky © (2005-05-20 09:26) [1]Привести запрос в соответствие с региональными настройками. После этого задуматься и перейти на использование параметров.
← →
Peter_cc (2005-05-20 09:37) [2]
> Anatoly Podgoretsky © (20.05.05 09:26) [1]
> Привести запрос в соответствие с региональными настройками.
> После этого задуматься и перейти на использование параметров.
хм...я тебя не понял...можно попроще и поподробнее...:)
← →
Max Zyuzin © (2005-05-20 09:42) [3]>Peter_cc (20.05.05 09:37) [2]
Проще по пунктам
1. Сходи в региональные натсройки и увидишь там что есть дата у тебя на машине.
2. Запросы типа того что ты написал неправильны и "опасны" по причине п.1
Правильнее при составлении запросов использовать параметры. почитай в любой книжке про параметрические запросы.
← →
Johnmen © (2005-05-20 09:43) [4]Я всегда говорил, что малыш в возрасте ~1 год знает только 2 слова: "мама" и "дай". Зачем ему знать больше ?
:)))
← →
ANB © (2005-05-20 09:43) [5]
> MDATE=’21.01.2005’
- сравнение даты и строки. Правильно ругается.
А про Params и ParamByName слышал ?
← →
Peter_cc (2005-05-20 09:46) [6]
> 1. Сходи в региональные натсройки и увидишь там что есть
> дата у тебя на машине.
я может совсем зеленый но что значит региональные настройки где это и что там надо настроить????????
> 2. Запросы типа того что ты написал неправильны и "опасны"
> по причине п.1
> Правильнее при составлении запросов использовать параметры.
> почитай в любой книжке про параметрические запросы.
а про использовать параметры обязательно почитаю прямо сейчас начну...:)
← →
Peter_cc (2005-05-20 09:47) [7]
> ANB © (20.05.05 09:43) [5]
>
> > MDATE=’21.01.2005’
> - сравнение даты и строки. Правильно ругается.
> А про Params и ParamByName слышал ?
нет...:( ну а как надо написать запрос????
← →
ANB © (2005-05-20 09:48) [8]
> но что значит региональные настройки где это и что там надо
> настроить????????
. Хм. Начинаю надеятся, что с работы меня таки не уволят из-за возраста.
← →
evvcom © (2005-05-20 09:55) [9]
> но что значит региональные настройки где это
Нажми на кнопку "Start" (Пуск) > Settings > Control Panel (Панель управления), там Regional Options (Региональные настройки) > Закладка Date (Дата). И экспериментируй. А еще лучше купи книжку типа "Windows для чайников" или чего-нибудь немного попродвинутей и поизучай, прежде чем задавать подобные вопросы.
← →
Peter_cc (2005-05-20 10:23) [10]
> evvcom © (20.05.05 09:55) [9]
>
> > но что значит региональные настройки где это
>
> Нажми на кнопку "Start" (Пуск) > Settings > Control Panel
> (Панель управления), там Regional Options (Региональные
> настройки) > Закладка Date (Дата). И экспериментируй. А
> еще лучше купи книжку типа "Windows для чайников" или чего-нибудь
> немного попродвинутей и поизучай, прежде чем задавать подобные
> вопросы.
блин я думал регеональные настройки это в делфи что то...и называется они не региональные настройки а язык и региональные стандарты.... и что мне там экспериментировать???? в дате . на \ менять??? тольку?!
← →
Max Zyuzin © (2005-05-20 10:26) [11]>Peter_cc (20.05.05 10:23) [10]
Там на самом деле менять ничего не следует, там следует посмотреть в каком формате у тебя дата и пр... А программу надо делать так что бы она от этого не зависела, для это используют параметры. см. выше
← →
Peter_cc (2005-05-20 10:38) [12]у
> Max Zyuzin © (20.05.05 10:26) [11]
> >Peter_cc (20.05.05 10:23) [10]
> Там на самом деле менять ничего не следует, там следует
> посмотреть в каком формате у тебя дата и пр... А программу
> надо делать так что бы она от этого не зависела, для это
> используют параметры. см. выше
посмотрел дата у меня как и у всех dd.mm.yyyy и чего??? а использовать параментры не могли бы вы написать пример я хоть знал бы от чего отталкиваться
← →
msguns © (2005-05-20 10:40) [13]Пример параметрического запроса
with Query1 do
try
if Active then Close;
SQL.Clear;
SQL.Add("SELECT * FROM TABLE ");
SQL.Add(" WHERE (STOCKDATA BETWEEN :ds AND :de) AND ");
SQL.Add(" (CLIENTNAME=:cname )";
SQL.Add(" ORDER BY STOCKDATE, STOCKNUM");
ParamByName(ds).AsDateTame := dtPicker1.Date;
ParamByName(de).AsDateTame := dtPicker2.Date;
ParamByName(cname).AsString := "Тексейра и Пачеко";
Open;
except
ShowMessage("Негаразды, емть !");
end;
← →
msguns © (2005-05-20 10:41) [14]Очепятки, емть..
AsDateTime, конюшно !
;(
← →
lexer © (2005-05-20 10:42) [15]>Peter_cc
а в базе в каком формате дата хранится?
← →
Max Zyuzin © (2005-05-20 10:46) [16]>lexer © (20.05.05 10:42) [15]
Есть поле MDATE соответственно я ставлю тип поля DATE
← →
msguns © (2005-05-20 10:48) [17]А вообще советую кинуть на пару-тройку дней кодинг, взять тетрадочку, ручечку. Открыть закладочку BDE и на каждой иконочке (кроме двух последних), нажав сначала мышку, а потом F1, читать все внимательно и вдумчиво, записывая наиболее важное.
Начиная от Hierarchy до See also, на каждом пункте перебирая все св-ва, методы и события с тщательным анализом.
1. Получишь отает на свой вопрос
2. Получишь ответы на все вопросы в будущем
3. Поймешь "сучность" BDE, как она работает и для чего нужна
4. Просекешь принцип работы с базами данных не только BDE, но и всех DB-ориентированных технологий дельфей.
← →
Johnmen © (2005-05-20 10:51) [18]>msguns © (20.05.05 10:40) [13]
>if Active then Close;
А зачем этот иф ?
:)
← →
msguns © (2005-05-20 10:51) [19]Вдогонку.
Не могу не спеть очередную осанну ребятам из Борланда. Сделать такой хэлп - это подвиг ! Особенно ощущаешь грандиозность и качество их труда после того, как приходится сталкиваться с хелпами мелкософта. Это не небо и земля - это рай и ад, ей-богу !
← →
msguns © (2005-05-20 10:55) [20]>Johnmen © (20.05.05 10:51) [18]
>А зачем этот иф ?
Подсмотрено у Тексейры. Один и тот же экземрляр TXXXQuery может быть использован для разных запросов (например, для загрузки в списки малых вспомогательных справочников в начале однопользов.проги). После сканирования очередного НД квери можно просто забыть закрыть.
Хотя, конечно, после изменения текста запроса, он закроется автоматически.
Но это больше как стиль. Ясный и читабельный. Является лишь элементом дизайна, стиля и дисциплины
Во всяком случае я так понял :)
← →
evvcom © (2005-05-20 11:19) [21]
> msguns ©
В Close делается проверка if Active, поэтому лишний if здесь не требуется, если ты не оптимизируешь свой код по супер скорости, предполагая тем не менее, что чаще здесь Active=False, поэтому выгодно сэкономить на лишнем CALL/RET
← →
Peter_cc (2005-05-20 11:26) [22]
> msguns © (20.05.05 10:40) [13]
> Пример параметрического запроса
>
> with Query1 do
> try
> if Active then Close;
> SQL.Clear;
> SQL.Add("SELECT * FROM TABLE ");
> SQL.Add(" WHERE (STOCKDATA BETWEEN :ds AND :de) AND ");
> SQL.Add(" (CLIENTNAME=:cname )";
> SQL.Add(" ORDER BY STOCKDATE, STOCKNUM");
> ParamByName(ds).AsDateTame := dtPicker1.Date;
> ParamByName(de).AsDateTame := dtPicker2.Date;
> ParamByName(cname).AsString := "Тексейра и Пачеко";
> Open;
> except
> ShowMessage("Негаразды, емть !");
> end;
сделал по твоему примеру теперь пишет другую ошибку parameter not found что это???
← →
msguns © (2005-05-20 11:27) [23]>evvcom © (20.05.05 11:19) [21]
Спасибо за пояснения. Тексейра написал так, видимо потому, что не для всех НД Close срабатывает на закрытом НД.
В данном же случае (TQuery используется универсально для одноразовых быборок-сканирований) практически на 100% Close не сработает, т.к. Active := false;
Но в общем случае согласен с Женей и тобой. Эта строчка явно не является обязательной
← →
msguns © (2005-05-20 11:29) [24]Имена параметров в ParamByName д.б. в кавычках :
ParamByName("ds").As...
А почитать хэлп ?
← →
evvcom © (2005-05-20 11:32) [25]
> сделал по твоему примеру теперь пишет другую ошибку parameter
> not found что это???
Здесь надо выполнить еще Prepare (или PrepareSQL - точно не помню), потом еще определить типы параметров, а уж только потом можно к параметрам обращаться. Проще все это сделать в DesignTime
← →
msguns © (2005-05-20 11:33) [26]>evvcom © (20.05.05 11:32) [25]
>Здесь надо выполнить еще Prepare
Для локалок особого смысла не имеет. Разве что синтаксис проверить..
← →
yk © (2005-05-20 11:37) [27]А если будет:
"select * from tabl1 where MDATE="+""""+DateToStr(dpDate.Date)+""""
??
← →
yk © (2005-05-20 11:39) [28]dpDate.Date -дата из DateTimePicker
← →
msguns © (2005-05-20 11:47) [29]>yk © (20.05.05 11:37) [27]
Для фокса сойдет. А для IB (к примеру) - нет.
← →
Max Zyuzin © (2005-05-20 11:49) [30]>yk © (20.05.05 11:37) [27]
то будет "select * from tabl1 where MDATE= :param1"
ParamByName("param1").AsDateTame := dpDate.Date;
Вопросы лучше в своей ветке создавай, а то модераторы ща порежут все.
>evvcom © (20.05.05 11:32) [25]
Не уверен что чдесь нужно это делать (Prepare) было бы чего оптимизировать.
потом еще определить типы параметров не нужно.
← →
Peter_cc (2005-05-20 11:59) [31]
> msguns © (20.05.05 11:47) [29]
все большое спасибо разобрался!!!!
ВСЕМ СПАСИБО ЗА УЧАСТИЕ.....
← →
Anatoly Podgoretsky © (2005-05-20 14:37) [32]msguns © (20.05.05 10:51) [19]
Это рай относится к справке по БДЕ, которая резко выделяется качеством по сравнению с другими справками того же Борланд. Эти ребята которые создавали БДЕ и справку для него уже явно в Борланд не работают.
← →
msguns © (2005-05-20 14:39) [33]>Anatoly Podgoretsky © (20.05.05 14:37) [32]
В дельфях очень много справок такого качества. Не обязательно по БД..
← →
Anatoly Podgoretsky © (2005-05-20 14:46) [34]msguns © (20.05.05 14:39) [33]
Это справка не по БД, а по БДЕ, отдельный продукт не являющий часть Дельфи, включен в поставку наряду с другими посторонними вещами.
← →
msguns © (2005-05-20 14:49) [35]Я там вместо "Е" ляпнул точку ;))
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.066 c