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

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

Открыть все ДатаСеты......


K_Lock ©   (2006-08-12 15:32:00) 

Добрый день.
В какой-то теме это уже было, но я ее потерял. :-(

У меня есть 15 ДатаСетов, как открыть их все попроще. А то писать для каждого ДатаСет.Опен- черезчур.

Заранее спасибо.


Ega23   (2006-08-14 13:40:00) [1]


> Вопрос с галерки: зачем иметь 13 открытых датасетов одновременно
> ?


13 TDBLookupCombo с параметрами фильтрации - why not?


MsGuns   (2006-08-14 13:31:00) [2]

Вопрос с галерки: зачем иметь 13 открытых датасетов одновременно ?


K_Lock   (2006-08-14 00:35:00) [3]

> Оператор Is возвращает True если левый операнд принадлежит
> типу правого опреранда. У тебя при проверки пролетают все
> кто не TpFIBDataSet
> а счетчик крутится.


Все. Въехал. Просто до этого тормознул чето :)

Спасибо, что разъяснили.


!_SM_!   (2006-08-14 00:18:00) [4]

> [11] Мефисто   (13.08.06 20:51)


> [10] Virgo_Style ©   (13.08.06 20:12)

Да я и не говорю что так надо делать, или так правильно... Я сказал только то, что сказал...
Вот...

> [13] Mike Kouzmine ©   (13.08.06 21:36)
> Не знаю, как там, но сразу после выполнения цикла в переменной,
> лежит то, что надо.
>
> for i:=0 to 10 do inc(i);

Так нельзя:
[Error] UFsWorld.pas(228): Assignment to FOR-Loop variable 'i'
А вот так
for i:=0 to 5 do;
ShowMessage(IntToStr(i));
Покажет 6.
Но и так делать тоже не рекомендуется :)


Германн   (2006-08-14 00:16:00) [5]


> Mike Kouzmine ©   (13.08.06 21:36) [13]
>
> Не знаю, как там, но сразу после выполнения цикла в переменной,
>  лежит то, что надо.
>
> for i:=0 to 10 do inc(i); result:=i;
> for result:=0 to 10 inc(result); Одинаково было нп Д6.

Ну АП уже всё сказал - рулетка. Сегодня повезло. Завтра нет.


!_SM_!   (2006-08-14 00:09:00) [6]

> [14] K_Lock ©   (13.08.06 22:58)
> > А разница как раз за счет "левых компанентов"
>
>
> В смысле "Левых" ? Нормальные "компаненты", не крякнутые
> не триальные. Все по честному.
> ----------
> Пробовал Show message вставлять в тело цикла - тож самое,
> ShowMessage выскакивает ровно 211 раз. :(

[7] !_SM_!   (13.08.06 04:56)
>if (DModule.Components[I] is TpFIBDataSet) then
Если не is тогда ничего не откроется

Оператор Is возвращает True если левый операнд принадлежит типу правого опреранда. У тебя при проверки пролетают все кто не TpFIBDataSet
а счетчик крутится.


K_Lock   (2006-08-13 22:58:00) [7]

> А разница как раз за счет "левых компанентов"


В смысле "Левых" ? Нормальные "компаненты", не крякнутые не триальные. Все по честному.
----------
Пробовал Show message вставлять в тело цикла - тож самое, ShowMessage выскакивает ровно 211 раз. :(


Mike Kouzmine   (2006-08-13 21:36:00) [8]

Не знаю, как там, но сразу после выполнения цикла в переменной, лежит то, что надо.

for i:=0 to 10 do inc(i); result:=i;
for result:=0 to 10 inc(result); Одинаково было нп Д6.

А разница как раз за счет "левых компанентов"


Anatoly Podgoretsky   (2006-08-13 20:54:00) [9]

А может он в рулетку хочет поиграть.


Мефисто   (2006-08-13 20:51:00) [10]


> !_SM_!   (13.08.06 20:07) [9]


Хочешь переспорить всех форумчан?
Ню-ню... :)))


Virgo_Style   (2006-08-13 20:12:00) [11]

!_SM_!   (13.08.06 20:07) [9]

В том-то и самое интересное - никогда не знаешь, когда оно "закосячит" - т.е. сработает не так, как хочется, а так, как написано.


!_SM_!   (2006-08-13 20:07:00) [12]

> [8] Anatoly Podgoretsky ©   (13.08.06 09:06)

Согласен, но если цикл выполниться хоть раз и сраза за циклом ShowMessage (IntToStr(i)); Не разу не подводил помоему.... может и не так. Сам так пользуюсь иногда. Если бы хоть раз закосячило, не писал бы....


Anatoly Podgoretsky   (2006-08-13 09:06:00) [13]

!_SM_!   (13.08.06 04:56) [7]
Читать справку, использовать конечно можно что угодно, хоть Random(температура на марсе), но к покажет имеет к реальности нереальное отношение, может повезет, а может нет.


!_SM_!   (2006-08-13 04:56:00) [14]

> [4] K_Lock ©   (13.08.06 00:57)
> Да открываются то все.
> Просто интересно - почему 211, а не 13.

> For I := 0 to DModule.ComponentCount - 1 do

Сколько компанентов на DataModule?

> Получается, что не только датасет открывается, но и каждый
> Field который в нем прописан :), так что-ли?

>if (DModule.Components[I] isTpFIBDataSet) then
Если не is тогда ничего не откроется

> [3] Loginov Dmitry ©   (13.08.06 00:46)

Почему это ее нельзя использовать? Можно...
Например для следующего цикла....
А ShowMessage (IntToStr(i));
покажет конечное значение счетчика.


K_Lock   (2006-08-13 01:10:00) [15]

Спасибо.


Ketmar   (2006-08-13 01:05:00) [16]

> [4] K_Lock ©   (13.08.06 00:57)
полусается незнание матчасти и нежелание читать справку. в [3] уже пояснили. после цикла i может иметь какое угодно значение, особенно если включена оптимизация. и вообще, об этом честно предпреждает компилятор. впредь советую читать то, что он пишет -- можно много интересных вещей узнать. и ошибок делать поменьше.


K_Lock   (2006-08-13 00:57:00) [17]

Да открываются то все.
Просто интересно - почему 211, а не 13.

Получается, что не только датасет открывается, но и каждый Field который в нем прописан :), так что-ли?


Loginov Dmitry   (2006-08-13 00:46:00) [18]

Ошибка в строке

> showMessage ('intToStr(i));


Нельзя использовать переменную цикла после выполнения цикла.

Вообще в чем проблема? ДатаСеты не все открываются?


K_Lock   (2006-08-13 00:40:00) [19]

Объясните пожалуйста:

For I := 0 to DModule.ComponentCount - 1 do
  begin
    if (DModule.Components[I] is TpFIBDataSet) then TpFIBDataSet(DModule.Components[I]).Open;
  end;
showMessage ('intToStr(i));


Почему после выполнения, I = 211, если у меня всего 13 ДатаСетов????
Может я чего неправильно в цикле указал???


Мефисто   (2006-08-12 15:45:00) [20]

Что-то типа такого:

For I := 0 to Form.ComponentCounnt - 1 do
 if Form.Components[I] is TDataSet then
   TDataSet(Form.Components[I]).Open;


Наверх

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