Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

FoxPro и SQL

2.1K
20 сентября 2007 года
FreeWay
142 / / 03.05.2007
Кто имеет опыт в FoxPro и SQL? Подскажите правильный синтаксис, необходимо выполнить такой запрос:

Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("Delete From prov where odat<20.09.2004");
Query1->ExecSQL();

запрос должен удалять в таблице все записи поля odat которых меньше даты 20.09.2004.
формат поля odat - дата
Работаю через BDE.
при выполнении вышеуказанного запроса, выдает ошибку - general sql error operator/operand type mismatch.
6.0K
20 сентября 2007 года
Tramp
71 / / 25.07.2006
Попробуйте использовать ADO
2.1K
20 сентября 2007 года
FreeWay
142 / / 03.05.2007
Цитата: Tramp
Попробуйте использовать ADO



это не решит проблемму.
дело в том что каждая среда использует свой синтаксис.
и вот как объявить в билдере (в запросе дату) для фоксовской базы я не знаю, пробовал разные варианты, но не работает.
проблемма не в средстве, а в синтаксисе (((, я пробывал запрос на обычное число или символ, он работает, а вот дату никак не могу ((

2.1K
20 сентября 2007 года
mainigor
151 / / 21.10.2005
Цитата: FreeWay
Кто имеет опыт в FoxPro и SQL? Подскажите правильный синтаксис, необходимо выполнить такой запрос:

Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("Delete From prov where odat<20.09.2004");
Query1->ExecSQL();

запрос должен удалять в таблице все записи поля odat которых меньше даты 20.09.2004.
формат поля odat - дата
Работаю через BDE.
при выполнении вышеуказанного запроса, выдает ошибку - general sql error operator/operand type mismatch.




на мой взгляд, как минимум должны быть кавычки вокруг даты.
вариаины :

 
Код:
Delete From prov where odat<'20.09.2004'

как в Access :
 
Код:
Delete From prov where odat<#20.09.2004#

правда в Access формат даты : mm/dd/yyyy
вот я только не в курсе dml поддерживается в Foxpro ? вроде под досом этого не было.
2.1K
21 сентября 2007 года
FreeWay
142 / / 03.05.2007
Цитата: mainigor
на мой взгляд, как минимум должны быть кавычки вокруг даты.
вариаины :
 
Код:
Delete From prov where odat<'20.09.2004'

как в Access :
 
Код:
Delete From prov where odat<#20.09.2004#

правда в Access формат даты : mm/dd/yyyy
вот я только не в курсе dml поддерживается в Foxpro ? вроде под досом этого не было.



реально правильный синтаксис это - '20/09/2004'
в билдере есть утилитка sql builder его можно вызвать с контекстного меню компонента Query
и вот он в качестве сравнения принимает только '20/09/2004' и ничего другого,
а если делать динамический запрос Query1->SQL->Add("Delete From prov where odat<'20/09/2004'"); то выдает ошибку:
error operator/operand type mismatch.

пробоапл еще так:
Query1->SQL->Add("Delete From prov where odat<:odat");
Query1->SQL->ParamByName("odat")->AsString = "20.09.2004";
выдает:
пишет ошибку 'ParamByName' is not a member of 'TStrings'
если написать AsDate, то же самое ((

2.1K
21 сентября 2007 года
FreeWay
142 / / 03.05.2007
разобрался))) вот правильный код:
Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("Delete From PROV where ODAT<'12/12/2004'");
Query1->ExecSQL();

не работал так как в компоненте Query я указывал DataBaseName - FoxPro и вроде все правильно (ODBC настроено), так как при запросе он конектился к базе.
В Query DataBaseName оставил пустым, а в DataSourse прописал таблицу которая предварительно законекчена на мою PROV

порозительно - если мне надо это:
Query2->SQL->Add("Delete From klients where not open");
тоесть удалить в булиевом поле open все значения которые ложь, то делать надо обратное - в квери указывать базу, а дата сорс пустым оставлять.

Темма закрыта)))
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог