-
Здравствуйте! Пишу программу в которой необходимо конструировать запрос по временному интервалу. В БД ячейка типа Дата\Время с полным форматом даты (дд.мм.гггг чч:мм:сс) Пытаюсь подставить SQL запрос (сгенерированный в Access) в компонент ADO Query. SELECT Zakazi.*, Operators.OpFIO
FROM Operators INNER JOIN Zakazi ON Operators.ID = Zakazi.Operator
WHERE (((Zakazi.DateFin)>#9/2/2012 12:00:01#))
ORDER BY Zakazi.DateBeg DESC; В Access запрос работает отлично, но когда подставляешь его в ADO Query - выдаёт ошибку "Неправильно определён объект Parametr. Предоставлены несогласованные или неполные сведения". Если убираю время из запроса - всё работает. Помогите организовать запрос пожалуйста! Всё прекрасно получается когда убираешь время из запроса
-
Помогите пожалуйста! всю ночь просидел проэксперементировал. Не могу понят в чём тут ошибка!
-
> bobby (08.04.2012 07:49:00) [0]
#9/2/2012 12:00:01# это строка
-
Ну как тогда указать ему что это дата и время? Акцес сгенерировал а делфи - не понимает :(
-
Вообще то строки они в кавычках должны быть. А использовать TDateTime + параметры
-
> в компонент ADO Query. отстой. ADODataSet клево. (может хоть так понятно будет ;)
> выдаёт ошибку "Неправильно определён объект Parametr. Предоставлены несогласованные или неполные сведения". в дельфи параметры определяются по : (если не отключить дефаулт), а ## это чисто access "фишка", дельфи про нее не знает. т.е. экранирования не происходит...
> Ну как тогда указать ему что это дата и время? не только дататайм, любые внешние данные, только через параметры... по разным причинам, но прописывание прямо в запросе должно быть исключением.
-
TDateTime я итак использую и форматирую дату под SQL (а именно разделитель с точки на слэш). А сюда #9/2/2012 12:00:01# пробывал ставить от ковычек до квадратных скобок - всёравно добавляет автоматом параметры и на них ругается. Буду разбираться в них раз нету другого способа :( Огромное спасибо что не прошли мимо!
-
> [6] bobby © (08.04.12 11:53)
Ты ответы не читаешь? Или слова знакомые, а смыл в их сочетании нет? Тебе про параметры говорят, вот и пользуйся ими. Прочитай сначала, что это. И про клёвый датасет тоже не забудь.
-
> TDateTime я итак использую и форматирую дату под SQL (а именно разделитель с точки на слэш). т.е. переводишь всем понятный формат в абракадабру, а после почему то жалуешься - не работает.
> Огромное спасибо что не прошли мимо! не надолго, будешь "тупить" терпение быстро кончится...
-
У MS Acces SQL такой формат даты в запросах (Если вы не в курсе)! Вот сгенерированный Access запрос через конструктор: SELECT Zakazi.*, Zakazi.DateFin, Zakazi.Address, Zakazi.Operator2
FROM Zakazi
WHERE (((Zakazi.DateFin)=#3/21/2012 1:30:31#) AND ((Zakazi.Address)="asdads") AND ((Zakazi.Operator2)=12)); где в #тип данных дата/время# "Тип данных строка" Без ковычек это простое число! Такчто перевожу я не просто так, а для того чтоб понял Access!
-
> Такчто перевожу я не просто так, а для того чтоб понял Access! тогда чего плакаишь? смотрим [0] - > В Access запрос работает отлично значит все хорошо, он понимает!!!, и понятно почему на советы пюваишь нафиг.
-
> Такчто перевожу я не просто так, а для того чтоб понял Access!
Боюсь после этого терпение у sniknik © кончится :)
-
Access понимает, а ADO Query не пропускает такой запрос! Совет видел только по поводу параметров. Я щас в них и разбираюсь. Просто может проще путь есть!
-
Реализовал через параметры!
-
> bobby © (09.04.12 00:52) [12] > Access понимает, а ADO Query не пропускает такой запрос! >
Access писали программисты, ADODataSet есть инструмент для программистов, следовательно тебе надо нанять программиста.
-
> bobby © (09.04.12 02:02) [13] > > Реализовал через параметры! >
Ну наконец-то! Может код покажешь?
-
Вот SQL запрос SELECT Tbl.ID, Tbl.Name, Tbl.Date
FROM Tbl
; Вот Код
QMain.Active:=False;
QMain.SQL.Strings[2]:='WHERE (((Tbl.Date)>:Date))';
QMain.Parameters.ParamByName('date').Value:=StrToDateTime('07.04.2012 12:00:00');
QMain.Active:=true; 2 Плохиш - Ты как-раз на форуме для программистов!
-
Я надеюсь, что StrToDateTime('07.04.2012 12:00:00'); - исключительно для примера, а на самом деле ты берешь из какого-нить DateTimePicker'a?
-
> bobby © (09.04.12 00:52) [12] > Access понимает, а ADO Query не пропускает такой запрос!
Тебе не кажется, что это разные вещи.
-
> [12] bobby © (09.04.12 00:52) > Access понимает, а ADO Query не пропускает такой запрос!
Это ты не понимаешь, что Аксес - это приложение, которое пользуется Jet, как и то, что ты пишешь - тоже приложение,.которое пользуется Jet.
И ты забыл про клёвый датасет.
-
const
aSQL = 'SELECT Zakazi.*, Zakazi.DateFin, Zakazi.Address, Zakazi.Operator2 ' +
'FROM Zakazi '
'WHERE Zakazi.DateFin=:DateFin AND ' +
'Zakazi.Address=:address AND ' +
'Zakazi.Operator2=:operator2';
var
ds: TADODataSet;
begin
ds := TADODataSet.Create(nil);
try
ds.Connection := ...;
ds.CommandText := aSQL;
ds.ParamByName('DateFin').Value := Now;
ds.ParamByName('address').Value := 'bla-bla-bla';
ds.ParamByName('operator2').Value := Random(20);
ds.Open;
while not ds.Eof do
begin
......
ds.Next;
end;
finally
ds.Free;
end;
end;
-
подскажите как вместо определенной даты "WHERE (((Zakazi.DateFin)>#9/2/2012 12:00:01#))" прописать текущую
-
подскажите как вместо определенной даты "WHERE (((Zakazi.DateFin)>#9/2/2012 12:00:01#))" прописать текущую
-
надо подождать когда определенная дата станет текущей. а если уже стала, то поможет машина времени.
-
Год ветке. С датой клиента - Now() и параметры. С датой сервера - смотреть анагогичную функцию на сервере.
-
year(now()) year(date()) не?
|