Shuster 0 Denunciar post Postado Novembro 11, 2007 Fiz um loop pra pegar a informação de 100 checkbox's do meu formulário são muitos né, em vez de colocar todos os checkbox's no scriipt, decidi fazer o seguinte: procedure TfrmLotomania.NovoConcurso; var campo, sSQL :String; Objeto :TCheckBox; valor, i :Integer; begin while not valor <= 100 do begin Objeto.Create(Self); Objeto.name := 'ck' + valor; if ( Objeto.checked = True) then begin i := i + 1; campo := 'Bola' + FloatToStr(i); if (i <= 20)then begin sSQL := 'UPDATE resultados SET (' + campo + '=' + FloatToStr(valor) + ') ' + 'WHERE Concurso = ' + concurso; {dm é o meu data module do projeto onde está o cmd meu command button} dm.cmd.CommandText := sSQL; dm.cmd.Execute; end end; valor := valor +1; frmPrincipal.ProgressBar.Position := i * 5; end; end; Ta rodando o loop numa boa, o problema é que como o "Objeto" não é o mesmo que eu criei em tempo de projeto, ele cria um novo checkbox e não referência um já criadono meu form, q é o que eu preciso. Cara agradeço desde já à atenção. Os objetos do meu formulário são vários checkbox's os nomes são padronizados assim: 'ck1', 'ck2', 'ck3'... Espero ser ajudado e agradeço muito à atenção... Compartilhar este post Link para o post Compartilhar em outros sites
orc 0 Denunciar post Postado Novembro 12, 2007 Fiz um loop pra pegar a informação de 100 checkbox's do meu formulário são muitos né, em vez de colocar todos os checkbox's no scriipt, decidi fazer o seguinte: procedure TfrmLotomania.NovoConcurso; var campo, sSQL :String; Objeto :TCheckBox; valor, i :Integer; begin while not valor <= 100 do begin Objeto.Create(Self); Objeto.name := 'ck' + valor; if ( Objeto.checked = True) then begin i := i + 1; campo := 'Bola' + FloatToStr(i); if (i <= 20)then begin sSQL := 'UPDATE resultados SET (' + campo + '=' + FloatToStr(valor) + ') ' + 'WHERE Concurso = ' + concurso; {dm é o meu data module do projeto onde está o cmd meu command button} dm.cmd.CommandText := sSQL; dm.cmd.Execute; end end; valor := valor +1; frmPrincipal.ProgressBar.Position := i * 5; end; end; Ta rodando o loop numa boa, o problema é que como o "Objeto" não é o mesmo que eu criei em tempo de projeto, ele cria um novo checkbox e não referência um já criadono meu form, q é o que eu preciso. Cara agradeço desde já à atenção. Os objetos do meu formulário são vários checkbox's os nomes são padronizados assim: 'ck1', 'ck2', 'ck3'... Espero ser ajudado e agradeço muito à atenção... você pode percorrer seus check box assim no form : // esse código percorre o form verificando os checkbox for Contador := 0 to ComponentCount - 1 do if Components[ Contador ].ClassType = TCheckBox then begin with TCheckBox( Components[ Contador ] ) do begin // aqui você poe o fonte que desejar end; end; Compartilhar este post Link para o post Compartilhar em outros sites
Shuster 0 Denunciar post Postado Novembro 13, 2007 Cara valew a força, mais continua do mesmo jeito, no if o TCheckBox(Components).Checked é sempre false independente do que eu marque nos meus checkbox's. Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Novembro 14, 2007 Não entendi no seu fonte o porque disto: while not valor <= 100 do begin Objeto.Create(Self); Objeto.name := 'ck' + valor; if ( Objeto.checked = True) thenQual seria a finalidade ? Ele logo depois faz um UPDATE, no caso cria o CheckBox e faz o UPDATE, o update não deveria de acontece somente em um outro momento ?Se quiser criar ele e já marcar teria somente de passar: Objeto.Checked:=True;E a validação: if ( Objeto.checked = True) thenNão funciona, visto que por padrão quando cria o CheckBox ele vem desmarcado... Não entendi no seu fonte o porque disto: while not valor <= 100 do begin Objeto.Create(Self); Objeto.name := 'ck' + valor; if ( Objeto.checked = True) thenQual seria a finalidade ? Ele logo depois faz um UPDATE, no caso cria o CheckBox e faz o UPDATE, o update não deveria de acontece somente em um outro momento ?Se quiser criar ele e já marcar teria somente de passar: Objeto.Checked:=True;E a validação: if ( Objeto.checked = True) thenNão funciona, visto que por padrão quando cria o CheckBox ele vem desmarcado... Compartilhar este post Link para o post Compartilhar em outros sites
Shuster 0 Denunciar post Postado Novembro 15, 2007 procedure TfrmLotomania.NovoConcurso; var campo, concurso, data, sSQL, name, teste :String; Objeto :TCheckBox; valor, i, nr_campo :Integer; chk :Boolean; begin concurso := txtConcurso.Text; data := QuotedStr(FormatDateTime('dd/mm/yyyy',dtSorteio.Date)); valor := 0; sSQL := 'INSERT INTO resultados (Concurso, DataSorteio) VALUES ' + '('+concurso+', '+data+')'; dm.cmd.CommandText := sSQL; dm.cmd.Execute; //i := 1; for i := 5 to 105 do if Components.ClassType = TCheckBox then begin chk := TCheckBox(Components).Checked; if (chk = false) then begin valor := i - 4; if (valor < 20) then begin campo := 'Bola' + FloatToStr(valor); sSQL := 'UPDATE resultados SET ' + campo + '=' + FloatToStr(valor) + ' WHERE Concurso = ' + concurso; dm.cmd.CommandText := sSQL; dm.cmd.Execute; end; end; end; end; Meu código está desse jeito agora e mesmo assim não está efetuando o UPDATE dos campos marcados. Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Novembro 16, 2007 Bom... primeiramente, sempre que for colocar algum código fonte use a tag CODE... Alterando um pouco o seu fonte: procedure TForm1.NovoConcurso; var campo, concurso, data, sSQL: String; valor, i: Integer; begin concurso:=txtConcurso.Text; data:=QuotedStr(FormatDateTime('dd/mm/yyyy',dtSorteio.Date)); sSQL:='INSERT INTO resultados (Concurso, DataSorteio) VALUES ' + '(' + concurso + ', ' + data + ')'; dm.cmd.CommandText:=sSQL; dm.cmd.Execute; for i:=5 to self.ComponentCount - 1 do begin if self.Components[i].ClassType = TCheckBox then begin if (not TCheckBox(self.Components[i]).Checked) then begin valor:=i - 4; if (valor < 20) then begin campo:='Bola' + FloatToStr(valor); sSQL:='UPDATE resultados SET ' + campo + '=' + FloatToStr(valor) + ' WHERE Concurso = ' + concurso; dm.cmd.CommandText:=sSQL; dm.cmd.Execute; end; end; end; end; end; Onde estiver Self. troque pelo objeto onde estão inseridos os TCheckBox, ou seja, se eles estiverem dentro de um TPanel deve de ir no nome do TPanel no lugar do Self, caso esteja diretamente no form, pode deixar como esta, caso a função esta criada em um local fora do form onde estão os TCheckBox, deve de ir o nome do form no lugar do Self. Compartilhar este post Link para o post Compartilhar em outros sites
Shuster 0 Denunciar post Postado Novembro 17, 2007 Pessoal consegui colocar o meu loop pra funcionar numa boa, só q ele ta inserindo em decrescente, dos objetos de taborder > para os objetos de taborder <. Mas ta beleza. Muito obrigado pela força galera. var campo, concurso, data, sSQL, valor: String; Bola, i: Integer; begin concurso := txtConcurso.Text; data :=QuotedStr(FormatDateTime('dd/mm/yyyy',dtSorteio.Date)); sSQL :='INSERT INTO resultados (Concurso, DataSorteio) VALUES ' + '(' + concurso + ', ' + data + ')'; dm.cmd.CommandText := sSQL; dm.cmd.Execute; Bola := 1; for i:= 1 to 100 do begin if self.Components[i].ClassType = TCheckBox then begin if (TCheckBox(self.Components[i]).Checked = True) then begin valor := TCheckBox(self.Components[i]).Caption; if (Bola < 21) then begin campo:='Bola' + FloatToStr(Bola); sSQL:='UPDATE resultados SET ' + campo + '=' + valor + ' WHERE Concurso = ' + concurso; dm.cmd.CommandText:=sSQL; dm.cmd.Execute; Bola := Bola +1; end else begin Application.MessageBox('Você marcou mais de 20 números!','Erro na quantidade de números',MB_OK + MB_ICONERROR); exit; end; end; end; end; end; Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Novembro 18, 2007 beleza... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites