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

Вниз

Открыть все ДатаСеты......   Найти похожие ветки 

 
K_Lock ©   (2006-08-12 15:32) [0]

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

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

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


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

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

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


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

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

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 ДатаСетов????
Может я чего неправильно в цикле указал???


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

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

> showMessage ("intToStr(i));


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

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


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

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

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


 
Ketmar ©   (2006-08-13 01:05) [5]

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


 
K_Lock ©   (2006-08-13 01:10) [6]

Спасибо.


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

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

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

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

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

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

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

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


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

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


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

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

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


 
Virgo_Style ©   (2006-08-13 20:12) [10]

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

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


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


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


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


 
Anatoly Podgoretsky ©   (2006-08-13 20:54) [12]

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


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

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

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

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


 
K_Lock ©   (2006-08-13 22:58) [14]

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


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


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

> [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
а счетчик крутится.


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


> 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:18) [17]

> [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.
Но и так делать тоже не рекомендуется :)


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

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


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

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


 
MsGuns ©   (2006-08-14 13:31) [19]

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


 
Ega23 ©   (2006-08-14 13:40) [20]


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


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



Страницы: 1 вся ветка

Текущий архив: 2006.09.03;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.053 c
2-1155141635
Johnny_Row
2006-08-09 20:40
2006.09.03
процедура в отдельном потоке выполняется медленнее в 2 раза


15-1154787455
ZeroDivide
2006-08-05 18:17
2006.09.03
Женился


2-1155458365
vain
2006-08-13 12:39
2006.09.03
Иконки для программ


2-1155323259
4izh
2006-08-11 23:07
2006.09.03
как получить имена полей в listview


2-1155237353
ArtemESC
2006-08-10 23:15
2006.09.03
Как убрать Beep при нажатии Enter при вводе в TEdit?