Форум: "Базы";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];
Внизвыполнение запроса типа Дата в базе 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.038 c