> 2) Допустим в моем приложении в delphi есть 20 чекбоксов на > одной форме с именами cb_1, cb_2, ..., cb_20. Я проверяю их > значение и в зависимости от их значения я делаю в общемто > одну и туже апперацию. Например: > if cb_1.checked=true then zzz:=zzz+cb_1.caption+', '; // > zzz: string > if cb_2.checked=true then zzz:=zzz+cb_2.caption+', '; > ... > if cb_20.checked=true then zzz:=zzz+cb_20.caption;
А если так:
for I:=0 to Form.ComponentCount-1 do begin
if StrLeft(Form.Components[I].Name, 3)="cb_" then begin
if Form.Components[I].Checked=1 then begin
zzz := zzz + Form.Components[I].Caption;
end;
end;
end;
sql в delphi
Вопрос:
1) Можно сделать sql запрос такого рода: select fieldA, fieldB, fieldC from tableA
А можно ли сделать запрос не через имя столбца, а через его порядковый номер (можно так сортировать, но мне это не надо). Зачем мне это? Если имя столбца состоит из 2-х слов разделенных пробелом, типа Код Товара то при select Код Товара from tamle1 он ничего ненайдет и будет ругатьтся, что нет такого столбца как Код.
2) Допустим в моем приложении в delphi есть 20 чекбоксов на одной форме с именами cb_1, cb_2, ..., cb_20. Я проверяю их значение и в зависимости от их значения я делаю в общемто одну и туже апперацию. Например:
if cb_1.checked=true then zzz:=zzz+cb_1.caption+', '; // zzz: string
if cb_2.checked=true then zzz:=zzz+cb_2.caption+', ';
...
if cb_20.checked=true then zzz:=zzz+cb_20.caption;
Видно, что я делаю почти одно и тоже. Можно ли это подсократить?
Я пытался делать так: form.companents[N].name - но это даст только его имя,
можно получить tag но это тоже нето. Как?
> 2) Допустим в моем приложении в delphi есть 20 чекбоксов на > одной форме с именами cb_1, cb_2, ..., cb_20. Я проверяю их > значение и в зависимости от их значения я делаю в общемто > одну и туже апперацию. Например: > if cb_1.checked=true then zzz:=zzz+cb_1.caption+', '; // > zzz: string > if cb_2.checked=true then zzz:=zzz+cb_2.caption+', '; > ... > if cb_20.checked=true then zzz:=zzz+cb_20.caption;
А если так:
for I:=0 to Form.ComponentCount-1 do begin
if StrLeft(Form.Components[I].Name, 3)="cb_" then begin
if Form.Components[I].Checked=1 then begin
zzz := zzz + Form.Components[I].Caption;
end;
end;
end;
---
Sql запрос и еще...17.09.02 13:35 Автор: _Inquisitor_ Статус: Незарегистрированный пользователь
> for I:=0 to Form.ComponentCount-1 do begin
> if StrLeft(Form.Components[I].Name, 3)="cb_" then begin
> if Form.Components[I].Checked=1 then begin
> zzz := zzz + Form.Components[I].Caption;
> end;
> end;
> end;
>
---
Sorry pal, так не получиться. По причине того что не у каждого компонента есть свойство Caption :-(
И мой совет(не в обиду), прежде чем что-либо написать проверь это на своей машине. А то, как-то некрасиво получается.
> > for I:=0 to Form.ComponentCount-1 do begin
> > if StrLeft(Form.Components[I].Name, 3)="cb_" then
> begin
> > if Form.Components[I].Checked=1 then begin
> > zzz := zzz + Form.Components[I].Caption;
> > end;
> > end;
> > end;
> >
---
> Sorry pal, так не получиться. По причине того что не у > каждого компонента есть свойство Caption :-(
Так в коде сначала имя компонента проверяется. Если в начале имени стоит "cb_", то подразумевается что это чекбокс.
> И мой совет(не в обиду), прежде чем что-либо написать > проверь это на своей машине. А то, как-то некрасиво > получается.
Не на чем проверить, нету Дельфы на тачке, писал по памяти, просто как пример, для иллюстрации хода мыслей. Если не работает - уж извини... :))
Sql запрос и еще...17.09.02 12:57 Автор: _Inquisitor_ Статус: Незарегистрированный пользователь
> А можно ли сделать запрос не через имя столбца, а через > его порядковый номер А как ты это себе представляешь?
>Зачем мне это? Если имя столбца состоит из 2-х слов
> разделенных пробелом, Избавься от пробелов! В Oracle, например, ты не сможешь создать поле в имени которого есть пробелы. Если же ты работаешь с Access, то попробуй использовать что-то типа Table.[Имя поля с пробелом] на счет других СУБД не в курсе.
> 2) Допустим в моем приложении в delphi есть 20 чекбоксов на > одной форме с именами cb_1, cb_2, ..., cb_20. Я проверяю их > значение и в зависимости от их значения я делаю в общемто > одну и туже апперацию. Например: > if cb_1.checked=true then zzz:=zzz+cb_1.caption+', '; // > zzz: string > if cb_2.checked=true then zzz:=zzz+cb_2.caption+', '; > ... > if cb_20.checked=true then zzz:=zzz+cb_20.caption; > Видно, что я делаю почти одно и тоже. Можно ли это > подсократить? А в какой момент времени ты формируешь строку? Если при установке чека, то напиши процедурку, и перенаправь событие OnClick для каждого CheckBox'а на нее. Ну что-то типа
procedure TForm1.CheckBox1OnClick (Sender: Tobject);
begin
Do_On_CheckBoxClick(Sender);
end;
procedure TForm1.Do_On_CheckBoxClick(Sender: Tobject);
begin
if Sender is TCheckBox then zzz:=zzz+(Sender as TCheckBox).Caption;
end;
На счет конкретной реализации могу ошибаться, но идея такова. Если же ты формируешь строку при нажатии кнопки (например), то боюсь что тут уж ничего и не урежешь, придется описывать все ручками.
Sql запрос и еще...17.09.02 14:17 Автор: ASJinx Статус: Незарегистрированный пользователь
> А в какой момент времени ты формируешь строку? Если при > установке чека, то напиши процедурку, и перенаправь событие > OnClick для каждого CheckBox'а на нее. Ну что-то типа > procedure TForm1.CheckBox1OnClick (Sender: Tobject); > begin > Do_On_CheckBoxClick(Sender); > end; > procedure TForm1.Do_On_CheckBoxClick(Sender: Tobject); > begin > if Sender is TCheckBox then zzz:=zzz+(Sender as > TCheckBox).Caption; > end; > На счет конкретной реализации могу ошибаться, но идея > такова. Если же ты формируешь строку при нажатии кнопки > (например), то боюсь что тут уж ничего и не урежешь, > придется описывать все ручками.
Фигня в том, что чеки уже сформированы и мне при закрытии окна с чеками надо считать их значения (т.е. при событии OnClose), сформировать zzz из их caption. Нормальным способом будет долго и много, надо короче ...
Sql запрос и еще...17.09.02 14:50 Автор: _Inquisitor_ Статус: Незарегистрированный пользователь
> Фигня в том, что чеки уже сформированы и мне при закрытии > окна с чеками надо считать их значения (т.е. при событии > OnClose), сформировать zzz из их caption. Нормальным > способом будет долго и много, надо короче ... Ну тогда что-то типа
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var i: integer;
TC: TComponent;
begin
For i:=0 to Form1.ComponentCount-1 do
begin
TC:=Form1.Component[i];
if (TC is TCheckBox) then
if (TC as TCheckBox).Checked then zzz:=zzz+(TC as TCheckBox).Caption;
end;
end;
PS Научись общаться с хелпом, иногда помогает ;-))