Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.29;
Скачать: CL | DM;

Вниз

тип поля 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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.027 c
3-1116233305
Yurisimus
2005-05-16 12:48
2005.06.29
DataSource не видит pFIBQuery


14-1117709898
GolNec
2005-06-02 14:58
2005.06.29
компонент для просмотра Анимированных Gif ok


1-1117806225
Eraser
2005-06-03 17:43
2005.06.29
Принцип распознавания графических смайликов


14-1117803383
Cerberus
2005-06-03 16:56
2005.06.29
Есть предложение.


1-1117966357
Lexa
2005-06-05 14:12
2005.06.29
Точка внутри полигона.