Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.54 MB
Время: 0.054 c
14-1117904770
Qwertyk
2005-06-04 21:06
2005.06.29
Модем - Телефон


6-1111569342
TankMan
2005-03-23 12:15
2005.06.29
Не понимаю - почему ошибка при копировании через ClientSocket?:(


14-1117206004
lookin
2005-05-27 19:00
2005.06.29
27 мая - день вежливости на форуме


14-1117456983
Iova
2005-05-30 16:43
2005.06.29
Работа с типом TStrings


1-1117621675
Леха
2005-06-01 14:27
2005.06.29
Не работает код заменящий переход с Таба на Ентер





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский