Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.10.17;
Скачать: [xml.tar.bz2];

Вниз

Неверно выполняется запрос SQL для поля Time   Найти похожие ветки 

 
vis79   (2002-09-24 08:28) [0]

Такая ситуация нужно выбрать из таблиц информацию удовлетворящую некоторым условиям:
Select NDate, NTime, EVENT, FAM
From Mytest, MyFam
Where
(NDate >= "24.09.02") AND (NDate <= "26.09.02")
AND (NTime >= "00:00:00") AND (NTime <= "00:00:09")
AND (MyTest.ID_User = MyFam.Number)

Здесь для диапазона даты работает выборка, а для диапазона времени нет! В чем проблема??

У таблиц такая структура:
TableName:="mytest";
TableType:=ttDBase;
FieldDefs.Add("NTime", ftTime , 0, false);
ну и т.д.

А добавление записи в таблицу производиться так:
MyTable.InsertRecord([Date, TimeToStr(Time) , Edit1.Text, 1]);


 
Anatoly Podgoretsky   (2002-09-24 09:15) [1]

Ты не пишешь, какая версия dBase и FoxPro у тебя, может в последних версиях и есть такой тип данных, не уверен, а так тип Time отсутствует как класс, тебе надо использовать тип char 8


 
vis79   (2002-09-24 09:50) [2]

>> Anatoly Podgoretsky

Спасибо за ответ Анатолий, не могли бы вы меня просветить поподробнее. Буду очень благодарен.

Дело в том, что я не задумывался какая версия Dbase, я создаю таблицу из Делфей таким образом:
MyTable := TTable.Create(Nil);
with MyTable do
begin
DatabaseName:=GetCurrentDir;
TableName:="mytest";
TableType:=ttDBase;
{Создать поля}
with FieldDefs do
begin
Add("NDate", ftDate, 0, false);
Add("NTime", ftTime , 0, false);
Add("EVENT", ftString, 25, false);
Add("ID_User", ftInteger, 0, false);
end;
If not(Fileexists(GetCurrentDir+"\"+TableName+".dbf")) Then
CreateTable;
end;
DataSource1.DataSet := MyTable;
MyTable.Active := True;

И как я уже подчеркнул выше добавляю запись путем MyTable.InsertRecord([Date, TimeToStr(Time) , Edit1.Text, 1]);
Верно ли я добавляю в таблицу время??? ведь я не пишу просто Time, а сначало преобразовываю его в строку, для того чтобы в DB Grid оно отображалось нормально а не числом типа float

И далее если я буду использовать для поля Time строковое значение, то смогули я в запросе указать дипазон таким образом:
(NTime >= "00:00:00") AND (NTime <= "00:00:09")
или это необходимо сделать каким-то иным способом???


 
Anatoly Podgoretsky   (2002-09-24 10:11) [3]

Да но тип TIME для dBase VII это тип double, а для более низких версий вообще не поддержано, что касается FoxPro в нем тоже нет типа TIME, опять же не знаю как насчет Visual FoxPro как там с этим. Я бы тебе рекомендовал сделать поле с типом Char 8, в Дельфи это будет так Add("NTime", ftString, 8, false); вот в этом случае у тебя будет работать, а запись через преобразование TimeToStr(Time) как у тебя и сделано и наоборот StrToTime.
Запросы и фильтры тоже будут работать именно в той форме как у тебя записано.

По твоему коду проверку на существование таблицы надо делать самой первой строкой, а не в конце

If FileExists(GetCurrentDir+"\"+TableName+".dbf") then {Exit или что то другое};

и не стоит опираться на GetCurrentDir это величина не постоянная, лучше использовать фиксированное абсолютное или относительно местонахождения программы (видимо ты именно это хочешь). То же самое DatabaseName:=GetCurrentDir;

С уровнем также разберись, если нет особых оснований в использовании уровня 7, то смени его на 5 или даже 4, будет полезно. Это в BDE Admin


 
Anatoly Podgoretsky   (2002-09-24 10:12) [4]

Да если есть еще вопросы, то я в чате


 
vis79   (2002-09-24 10:48) [5]

Воспользовавшись вашим первым ответом я просто сменил тип таблицы dBase на Paradox (для меня это не принципиально)...
TableType:=ttParadox;
в Paradox есть тип ftTime, поэтому запрос стабильно работает
GetCurrentDir я использую для того чтобы программа создавала таблицы и работала с ними не зависимо от того в какую директорию она будет скопирована... почему эта величина не постоянная, как она может меня подвести???
Что касается проверки: Самой первой строкой ее сделать нельзя так как именно на следующем этапе:
with MyTable do
begin
DatabaseName:=GetCurrentDir;
TableName:="mytest";
TableType:=ttDBase;
end;
я определяю что она будет загружена с диска
а вот то что ее нужно поставить перед определением полей я с вами согласень.

Спасибо большое за содействие!


 
KDS   (2002-09-24 12:20) [6]

>(NTime >= "00:00:00") AND (NTime <= "00:00:09")
А что это за диапазон времени такой "узкий"??? Ааа?
Это получается девять секунд, начиная от полночи?
Синтаксис правильный, а в такой "узкий" диапазон
данные могут не попадать.
Проверь правильность заданияя диапазона времени сначала.


 
vis79   (2002-09-24 12:55) [7]

>> KDS
диапазон времни здесь не принципиален, он был указан для отображения синтаксиса, здесь моя проблема была в отсутствии типа TIME как такового, в dBase!
Правильный ответ дал Anatoly Podgoretsky! см выше..



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.10.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
14-56272
Leran2002
2002-09-23 08:56
2002.10.17
Новый сайт


1-56099
Lony
2002-10-06 14:24
2002.10.17
DWord и String


1-56210
AVeR
2002-10-07 20:21
2002.10.17
TSpeedButton


3-55969
EugeneP
2002-09-25 12:21
2002.10.17
Есть следующая задача. Хотелось бы послушать размышления.


1-56163
volph777
2002-10-07 10:36
2002.10.17
использование Excel





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский