Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.25;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
1-80855
nerom
2002-04-12 15:07
2002.04.25
Как убрать курсор из единств. эдита в форме???


14-81064
knyaz17
2002-03-19 16:34
2002.04.25
Проблема с Oracle в Win2000!!!


1-80972
Jony
2002-04-12 09:55
2002.04.25
Где разместить ЕХЕ-шник?


1-80990
volodya_
2002-04-12 15:00
2002.04.25
Как сделать чтобы при нажатии на форме стандартной


1-80899
Демон
2002-04-14 19:48
2002.04.25
Как работать с иконкой в трэйбаре