![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Cannot perform this operation on a close dataset. В чем дело? [D7, MSSQL]
Vlad Oshin © (2007-05-15 12:36:00)while not(ADOqueryOtelKey.Eof) do begin // ïî êàæäîìó îòåëþ,
for i:=1 to ADOqueryDate.RecordCount do begin //ïî êàæäîé äàòå äåëàåì çàïðîñ
ArrayADO[i]:=tADOquery.Create(nil);
ArrayADO[i].Connection:=ADOConnection2;
ArrayADO[i].Active:=false;
ArrayADO[i].SQL.Clear;
ArrayADO[i].SQL.Add(
'SELECT'+
' TP_Key,'+
......
' and hd_key=:p3'+
' ORDER BY pn_name, tp_key, days desc, ts_name'
);
ArrayADO[i].Parameters.ParamByName('p1').Value := Edit4.Text;
ArrayADO[i].Parameters.ParamByName('p2').Value := ADOqueryDate.fieldByName('TD_DATE').AsString;
ArrayADO[i].Parameters.ParamByName('p3').Value := ADOqueryOtelKey.fieldByName('hd_key').AsString;
ArrayADO[i].Active;
ArrayADO[i].first;
ERROR Cannot perform this operation on a close dataset
В чем м/б дело? Создал запрос, выполнил - 50 раз так делал и ничего..
Плохиш (2007-05-16 01:59:00) [1]
> Anatoly Podgoretsky © (15.05.07 23:23) [15]
> > Плохиш (15.05.2007 12:44:05) [5]
>
> Не бессмысленно, бессмысленно это делать после создания.
В данном конкретном случае - бессмысленно. А другии случаи будем рассматривать по мере поступления...
Anatoly Podgoretsky (2007-05-15 23:25:00) [2]> Vlad Oshin (15.05.2007 14:52:12) [12]
> сейчас поле не типа DATA, а типа varchar
Так и не надо это датой называть, прямо говори, что это строка
Anatoly Podgoretsky (2007-05-15 23:23:00) [3]> Плохиш (15.05.2007 12:44:05) [5]
Не бессмысленно, бессмысленно это делать после создания.
Jan1 (2007-05-15 15:44:00) [4]
>
> не возможно, по условию
по какому еще условию? Я Вам про то что while Eof не вызовит ошибки, а Ваш вариант чреват...
Jan1 (2007-05-15 14:59:00) [5]
> сейчас поле не типа DATA, а типа varchar
> но, можно и сделать как надо.
млин, так в чем проблема?
> Вопрос: Как заставить понять формат дд.мм.гггг
а так:
set dateformat dmy
GO
select cast('31.12.2006' as datetime)
GO
set dateformat mdy
GO
select cast('12.31.2006' as datetime)
GO
в крайнем случае есть универсальный формат: YYYYMMDD
Vlad Oshin (2007-05-15 14:52:00) [6]
> не понял. ты дату как хранишь?
сейчас поле не типа DATA, а типа varchar
но, можно и сделать как надо. Вопрос: Как заставить понять формат дд.мм.гггг
вот что накопал
Если у Вы используете MS SQL, тогда "#" не надо
(Просто привык к Access'у).
Тогда надо делать так:
select * from Zevent where dat_e BETWEEN '04/28/2004' AND '05/01/2004'
В MS SQL используется "американский" формат даты, когда сначала пишется месяц, потом день, а потом год.
По поводу предпоследнего сообщения. Порядок дней и месяцев может меняться на разных серверах. Лично у меня были проблемы с этим. Поэтому ищите универсальный формат даты. Либо проверяйте порядок следования дней, месяцев, лет.
> попробуй на серверном курсоре.
не возможно, по условию
Jan1 (2007-05-15 14:41:00) [7]
> а разница?
попробуй на серверном курсоре.
> я уже спрашивал, ну если ты знаешь - скажи, как заставить
> понять дд.мм.гггг
не понял. ты дату как хранишь?
Vlad Oshin (2007-05-15 14:40:00) [8]
> Jan1 zdm ©
потому что так не работает.
формат даты не понимается. он ждет мм/дд/гггг
я уже спрашивал, ну если ты знаешь - скажи, как заставить понять дд.мм.гггг
Поэтому, я сделал дату строкой.
> Jan1 (15.05.07 13:27) [7]
>
> > for i:=1 to ADOqueryDate.RecordCount do begin
>
> а чего здесь не while Eof?
> <Цитата>
а разница?
zdm (2007-05-15 14:03:00) [9]
> McSimm_ © (15.05.07 12:40) [2]
> Вообще дикость какая-то...Делать кучу ADOQuery
почему? если MDI приложение, то как иначе? что-бы данные отображались в одном окне, а селектя или инсертя, апдейтя -отоброжение не менялось в привязанной к датасоурц окне с гридом?
zdm (2007-05-15 14:00:00) [10]передача данных парматерами, тем и хороша, что ненадо задумывться о формате. просто ParamByName('дата').Value=now,,или DateTimePicker.Date.....хотя ADO глюкует иногда.. AsDateTime-рулит! а не Asdate:) ну и соотвественно в полях БД -крткий формат данных даты...или в отображении
Jan1 (2007-05-15 13:27:00) [11]
> for i:=1 to ADOqueryDate.RecordCount do begin
а чего здесь не while Eof?
Jan1 (2007-05-15 13:26:00) [12]
> ArrayADO[i].Parameters.ParamByName('p2').Value := ADOqueryDate.
> fieldByName('TD_DATE').AsString;
это ты так дату заносишь? ну-ну... А чем AsDateTime неугодил?
Плохиш (2007-05-15 12:44:00) [13]
> ArrayADO[i].Active:=false;
Бессмысленно, после создания набор данных не активен
> ArrayADO[i].SQL.Clear;
> ArrayADO[i].SQL.Add(
Что за не любовы к свойству Text?
> ArrayADO[i].Active;
McSimm_ уже сказал :-)
> ArrayADO[i].first;
Бессмысленно, после открытия указатель устанавливается на первую запись набора данных.
Vlad Oshin (2007-05-15 12:44:00) [14]черт, совсем могов нет :)
спасибо.
Да, там немного на самом деле(не более 4х). А надо для .. короче, мне так понятнее
ЮЮ (2007-05-15 12:43:00) [15]> ArrayADO[i].Active;
ArrayADO[i].Open;
>Вообще дикость какая-то...
>Делать кучу ADOQuery.
Тем более с одним и тем же текстом
McSimm_ (2007-05-15 12:40:00) [16]Вообще дикость какая-то...
Делать кучу ADOQuery.
McSimm_ (2007-05-15 12:39:00) [17]
> ArrayADO[i].Active;
:= true ?