Форум: "Базы";
Текущий архив: 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