Форум: "Базы";
Текущий архив: 2002.04.25;
Скачать: [xml.tar.bz2];
ВнизTADOQuery...... ;((((( Найти похожие ветки
← →
koks (2002-04-04 12:17) [0]Уважаемые мастера ! Помогите пожалуйста, совсем меня доканали эти параметры.
Строю запрос TADOQuery c параметрами.
В SQL пишу:
SELECT *
FROM Polished_data
WHERE (Source=:idSource) AND (Carats=:idCarats) AND (Cut=:idCut)
AND (Color=:idColor) AND (Clarity=:idClarity) AND (Price=:StorePrice) AND (Date_of_entering=:DateEntered)
далее в коде вызываю процедуру:
procedure ProcessRecord(SourceId, SizeId, CutId, ColorId, ClarityId: integer; Price: single; DateEntered: TDateTime);
begin
with adoqMyQuery do
begin
Close;
Parameters.ParamByName("idSource").Value := SourceId;
Parameters.ParamByName("idCarats").Value := SizeId;
Parameters.ParamByName("idCut").Value := CutId;
Parameters.ParamByName("idColor").Value := ColorId;
Parameters.ParamByName("idClarity").Value := ClarityId;
Parameters.ParamByName("StorePrice").Value := Price;
Parameters.ParamByName("DateEntered").Value := DateEntered;
Open;
end;
end;
для параметров ***id DataType установлена в ftInteger
для параметра StorePrice - в ftFloat
для параметра DateEntered - в ftDateTime
Передаю значения, вызываю запрос для набора параметров, для которых данные СТОПУДОВО ЕСТь. Ошибок не возникает - но данные не возвращаются. Она их просто не находит...
Подозреваю, что дело - в дате. В SQL Access дата пишется как
#01/12/02#. И никак иначе. А вот в бланке запроса можно написать и #01.12.02# и #01/12/02# - она их все равно переведет в #01/12/02#. Но я пробовал раскладывать DateEntered на Day, Month, Year, затем делать из них строку "#01/12/02#" и передавать ее как строковый параметр - результат тот-же.
DateEntered у меня берется из TDateTimePiker.Date (т.е. он без Time)
Подскажите, куда копать....
← →
wicked (2002-04-04 12:23) [1]см. в хелпе по access"у функцию dateserial - её можно использовать в запросах...
и ваще - jet must die... :)
← →
Dok_3D (2002-04-04 13:46) [2]Не фига не jet must die...
Слушай, так раз ты берешь TDateTimePiker.Date без Time, так попробуй
Parameters.ParamByName("DateEntered").DataType:=ftDate;
а, и вообще для всех параметров обязательно проставь соответствующий DataType. И посмотрим, как он must die.
← →
koks (2002-04-04 13:46) [3]Сделал:
B adoqMyQuery.SQL :
SELECT *
FROM Polished_data
WHERE (Source=:idSource) AND (Carats=:idCarats) AND (Cut=:idCut)
AND (Color=:idColor) AND (Clarity=:idClarity) AND (Price=:StorePrice)
AND (Date_of_entering=DateSerial(Year:Year; Month:Month; Day:Day));
И процедура:
procedure ProcessRecord(SourceId, SizeId, CutId, ColorId, ClarityId: integer; Price: single; DateEntered: TDateTime)
var
Year, Month, Day: word;
begin
DecodeDate(DateEntered, Year, Month, Day);
with aqIsRecordUnique do
begin
Close;
Parameters.ParamByName("idSource").Value := SourceId;
Parameters.ParamByName("idCarats").Value := SizeId;
Parameters.ParamByName("idCut").Value := CutId;
Parameters.ParamByName("idColor").Value := ColorId;
Parameters.ParamByName("idClarity").Value := ClarityId;
Parameters.ParamByName("StorePrice").Value := Price;
Parameters.ParamByName("Year").Value := Year;
Parameters.ParamByName("Month").Value := Month;
Parameters.ParamByName("Day").Value := Day;
Open;
end;
end;
Вообще выдает ошибку OleException - Syntax Error (missing operator) in query expression.
← →
Dok_3D (2002-04-04 13:49) [4]>> Вообще выдает ошибку OleException - Syntax Error (missing
>> operator) in query expression.
Не мудри, попробуй, как выше написано.
← →
koks (2002-04-04 13:50) [5]2 Dok_3D: Я так уже пробовал... я ставлю ftDate, а он подставляет все ровно ftDateTime... наглость !
← →
roottim (2002-04-04 13:54) [6]>DateEntered у меня берется из TDateTimePiker.Date (т.е. он без Time)
время там всеравно есть.. формат таков!. может время в базе не соотв-ть тому что ты выбираеш в пикере.
и попробуй посмотреть выполнение запроса
заменить конкретно
(Date_of_entering=#01/12/02#)
ЗЫ
и незабуть... что формат американски!.. т.е mm/dd/yy
← →
wicked (2002-04-04 14:37) [7]2 koks ©
> AND (Date_of_entering=DateSerial(Year:Year; Month:Month;
> Day:Day));
чего-чего?.... вообще-то это пишется так:
Date_of_entering= DateSerial(:Year, :Month, :Day)
хоть vb и суксь, но знать надо....
← →
IPisk (2002-04-04 14:43) [8]а если так
Parameters.ParamByName("DateEntered").AsDateTime := DateEntered
← →
IPisk (2002-04-04 14:47) [9]или так
SELECT *
FROM Polished_data
WHERE (Source=:idSource) AND (Carats=:idCarats) AND (Cut=:idCut)
AND (Color=:idColor) AND (Clarity=:idClarity) AND (Price=:StorePrice)
AND (Date_of_entering=CDate("":DateEntered""))
где последний параметр должен быть строкового типа вида "01.02.2002"
← →
Johnmen (2002-04-04 14:48) [10]Я бы попробовал для начала
Parameters.ParamByName("...").As... := .....;
чтобы не делать двойного преобразования.
← →
koks (2002-04-04 16:59) [11]Друзья ! Спасибо за отклики !
У меня TADOQuery. А В TADOQuery.Papametrs(x) нет As***.
Поэтому вариант AsDateTime точно не прокатит..
Я кажется понял, в чем проблема - по-моему прав rottim.
Что-бы проверить мне надо кое-чего в базе переделать - убрать везде время... (которое фантомно - его как бы нет, но на самом деле оно есть...)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.04.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c