Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.031 c
8-1084513139
Push
2004-05-14 09:38
2004.08.01
Installer


4-1087837574
id
2004-06-21 21:06
2004.08.01
Найти хэндл кнопки по её ID (GWL_ID )


14-1089302163
OSokin
2004-07-08 19:56
2004.08.01
Мастера Дельфи


6-1086080566
NorthMan
2004-06-01 13:02
2004.08.01
про IdTCPServer


1-1090416204
~ShamaN~
2004-07-21 17:23
2004.08.01
Quick Report





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский