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.
это не решит проблемму.
дело в том что каждая среда использует свой синтаксис.
и вот как объявить в билдере (в запросе дату) для фоксовской базы я не знаю, пробовал разные варианты, но не работает.
проблемма не в средстве, а в синтаксисе (((, я пробывал запрос на обычное число или символ, он работает, а вот дату никак не могу ((
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.
на мой взгляд, как минимум должны быть кавычки вокруг даты.
вариаины :
как в Access :
правда в Access формат даты : mm/dd/yyyy
вот я только не в курсе dml поддерживается в Foxpro ? вроде под досом этого не было.
вариаины :
как в Access :
правда в 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, то же самое ((
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 все значения которые ложь, то делать надо обратное - в квери указывать базу, а дата сорс пустым оставлять.
Темма закрыта)))