Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.01;
Скачать: CL | DM;

Вниз

выполнение запроса типа Дата в базе MSAccess   Найти похожие ветки 

 
Bohdan   (2004-07-07 19:41) [0]

Здравствуйте. Подскажите пожайлуста как ликвидировать ошибку "Data type mismatch in criteria exgression!" Делаю так
...
    Active:= false;
    SQL.Clear;  
    SQL.Add("SELECT Pur_bayer_cod, Pur_price, Pur_percent, Pur_date From Purchases ");
    SQL.Add("WHERE Pur_date >= "+ #39+
    DateToStr(DateTimePickerStart.Date)+#39+" And Pur_date <= "+ #39+ DateToStr(DateTimePickerEnd.Date)+#39);
...
    Active:= true;
...

При работе в других базах ошибок никаких не возникает.
Но мне нужно в MSAccess. Перепробовал почти все форматы поля типа Дата, Уже не знаю что делать. Помогите, кто знает.


 
sniknik ©   (2004-07-07 20:37) [1]

...
SQL.Add("WHERE Pur_date >= "+ #39+
StringReplace(DateToStr(DateTimePickerStart.Date), ".", "/", rfReplaceAll)+#39+" And...


> Перепробовал почти все форматы поля типа Дата
да ну? это как? формат у поля даты один и это число, типа Double, а ты туда строки вижу пихаеш.
делай параметрами лучше.


 
Bohdan   (2004-07-07 21:04) [2]

to sniknik > я имел в виду что выставлял формат поля для даты (полный, длинный, средний, краткий) - это в настройках свойств поля самой базы MSAccess.
Но через
...StringReplace(DateToStr(DTStart.Date), ".", "/", [rfReplaceAll])...
тоже выдается та же ошибка :-((
Пробовал и через параметры вот так
 sSQL:= TADOQuery(DBGridPur.DataSource.DataSet).SQL.Text;
 TADOQuery(DBGridPur.DataSource.DataSet).Close;
 TADOQuery(DBGridPur.DataSource.DataSet).Parameters.ParamByName("DateStart").Value:= dtStart.Date;
 TADOQuery(DBGridPur.DataSource.DataSet).Parameters.ParamByName("DateEnd").Value:= dtEnd.Date;
 TADOQuery(DBGridPur.DataSource.DataSet).Parameters.ParamByName("Vendor_ID").Value:= 1;
 TADOQuery(DBGridPur.DataSource.DataSet).Open;

И все равно эта же ошибка...
Выставляю и так:
 DateSeparator := ".";
 ShortDateFormat := "dd.mm.yyyy";


Какие еще будут соображения?


 
sniknik ©   (2004-07-07 22:36) [3]

соображение такое огласи получающийся запрос чтобы виднее было.
добавка

...
SQL.Add("WHERE Pur_date >= #"+StringReplace(DateToStr(DateTimePickerStart.Date), ".", "/", rfReplaceAll)+"# And...

проследи чтобы разделитель точкой был, было что заменять, или сразу его указывай "/" или "-".

но если и с параметрами не получается...
кстати тип параметра тоже неплохо указывать тем или иным образом (например .asDateTime)

и еще кстати несовпадение типа не обязательно может быть этой стороны... поле в базе какого?


 
Bohdan   (2004-07-08 13:24) [4]

Спасибо sniknik, разобрался лучше с параметрами, и прошло, но почему-то обычный запрос не срабатывает...


 
sniknik ©   (2004-07-08 13:36) [5]

> но почему-то обычный запрос не срабатывает...
формат даты в строковом выражении должен быть ... #01/01/2004# ... или #01-01-2004# проверь результирующий запрос перед выполнением, чтото у тебя не складывается.
проверь и не пользуйся никогда ;о), параметры лучше.


 
Bohdan   (2004-07-08 16:34) [6]

Уважаемый sniknik Подскажите еще пожалуйста, почему этот запрос срабатывает один только раз, а последующие результаты пустые?

procedure TFmStatPur.BitBtn1Click(Sender: TObject);
begin
 TADOQuery(DBGridPur.DataSource.DataSet).Close;
 TADOQuery(DBGridPur.DataSource.DataSet).SQL.Add("SELECT * FROM Purchases");
 TADOQuery(DBGridPur.DataSource.DataSet).SQL.Add(" WHERE Pur_date>=:DateStart AND Pur_date<=:DateEnd AND Vendor_ID<=:Vendor_ID");
 TADOQuery(DBGridPur.DataSource.DataSet).Parameters.ParamByName("DateStart").Value:= dtStart.Date;
 TADOQuery(DBGridPur.DataSource.DataSet).Parameters.ParamByName("DateEnd").Value:= dtEnd.Date;
// if RadioGroupAll.ItemIndex=1 then if BoxVendors.ItemIndex>=0 then
 TADOQuery(DBGridPur.DataSource.DataSet).Parameters.ParamByName("Vendor_ID").Value:= 1;
 TADOQuery(DBGridPur.DataSource.DataSet).Open;
end;


 
sniknik ©   (2004-07-08 16:59) [7]

может быть потому что ты
TADOQuery(DBGridPur.DataSource.DataSet).Clear
забыл. (большего в этом коде чегото не видится, кроме того что повторное внесение тогоже запроса явное излишество ;о), достаточно значения параметров менять)

и к слову, конструкция такая мне не нравится TADOQuery(DBGridPur.DataSource.DataSet), уверен что гриду квери всегда подключена будет? а если ADODataSet попадется? у него проперти SQL нет. а вот в обратку, CommandText есть у обоих. хотя нет все одно не нравится. (не знаю ну было бs от Sender, чтобы универсальность кода была... но ты же грид явно указываеш. какой смысл?)


 
Rem   (2004-07-08 17:31) [8]

Кстати, в ADOQuery работает конструкция вида:
 "Дата >= " + IntToStr(Trunc(DateTimePickerStart.Date))



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

Текущий архив: 2004.08.01;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
3-1089193831
mikola
2004-07-07 13:50
2004.08.01
Randomaize


6-1084811642
MaxcM
2004-05-17 20:34
2004.08.01
ICS HttpServer + POST


14-1089738290
VID
2004-07-13 21:04
2004.08.01
NetMeeting - как с ним работать ?


6-1085932270
Sn
2004-05-30 19:51
2004.08.01
Немогу принять ответ сервера UDP


1-1090283167
Alexey Leonchik
2004-07-20 04:26
2004.08.01
Функция округления