Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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 ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо