![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
выполнение запроса типа Дата в базе MSAccess [D7, MSAccess]
Bohdan © (2004-07-07 19:41:00)Здравствуйте. Подскажите пожайлуста как ликвидировать ошибку "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. Перепробовал почти все форматы поля типа Дата, Уже не знаю что делать. Помогите, кто знает.
Rem (2004-07-08 17:31:00) [1]Кстати, в ADOQuery работает конструкция вида:
'Дата >= ' + IntToStr(Trunc(DateTimePickerStart.Date))
sniknik (2004-07-08 16:59:00) [2]может быть потому что ты
TADOQuery(DBGridPur.DataSource.DataSet).Clear
забыл. (большего в этом коде чегото не видится, кроме того что повторное внесение тогоже запроса явное излишество ;о), достаточно значения параметров менять)
и к слову, конструкция такая мне не нравится TADOQuery(DBGridPur.DataSource.DataSet), уверен что гриду квери всегда подключена будет? а если ADODataSet попадется? у него проперти SQL нет. а вот в обратку, CommandText есть у обоих. хотя нет все одно не нравится. (не знаю ну было бs от Sender, чтобы универсальность кода была... но ты же грид явно указываеш. какой смысл?)
Bohdan (2004-07-08 16:34:00) [3]Уважаемый 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 13:36:00) [4]> но почему-то обычный запрос не срабатывает...
формат даты в строковом выражении должен быть ... #01/01/2004# ... или #01-01-2004# проверь результирующий запрос перед выполнением, чтото у тебя не складывается.
проверь и не пользуйся никогда ;о), параметры лучше.
Bohdan (2004-07-08 13:24:00) [5]Спасибо sniknik, разобрался лучше с параметрами, и прошло, но почему-то обычный запрос не срабатывает...
sniknik (2004-07-07 22:36:00) [6]соображение такое огласи получающийся запрос чтобы виднее было.
добавка
...
SQL.Add('WHERE Pur_date >= #'+StringReplace(DateToStr(DateTimePickerStart.Date), '.', '/', rfReplaceAll)+'# And...
проследи чтобы разделитель точкой был, было что заменять, или сразу его указывай '/' или '-'.
но если и с параметрами не получается...
кстати тип параметра тоже неплохо указывать тем или иным образом (например .asDateTime)
и еще кстати несовпадение типа не обязательно может быть этой стороны... поле в базе какого?
Bohdan (2004-07-07 21:04:00) [7]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 20:37:00) [8]
...
SQL.Add('WHERE Pur_date >= '+ #39+
StringReplace(DateToStr(DateTimePickerStart.Date), '.', '/', rfReplaceAll)+#39+' And...
> Перепробовал почти все форматы поля типа Дата
да ну? это как? формат у поля даты один и это число, типа Double, а ты туда строки вижу пихаеш.
делай параметрами лучше.