Форум: "Начинающим";
Текущий архив: 2006.09.03;
Скачать: [xml.tar.bz2];
ВнизОткрыть все ДатаСеты...... Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.039 c