Como gravar Itens de CheckListBox no IBX6
Pessoal, alguem sabe como faço para salvar os itens marcados de CheckListBox em uma tabela IBX ?
A rotina que estou usando é essa:
for i := 0 to Clb_qm.Items.Count-1 do
begin
if Clb_qm.Checked[i] = True then
BEGIN
dmbancos.IBQCad_Dst.ParamByName(´Pqm´).AsString :=
Clb_qm.Checked[i];
end
A rotina que estou usando é essa:
for i := 0 to Clb_qm.Items.Count-1 do
begin
if Clb_qm.Checked[i] = True then
BEGIN
dmbancos.IBQCad_Dst.ParamByName(´Pqm´).AsString :=
Clb_qm.Checked[i];
end
Edan
Curtidas 0
Respostas
Faelcavalcanti
09/05/2005
Cara depende do caso como você esteja atualizando, por exemplo imagine se existissem 800 registros no CheckListBox, a demora que seria. Mas de qualquer forma, você teria que utilizar outro componente ou forma que minimize este processo. Mas para resolver você poderia tentar algo do tipo.
Interpretei o seu tópico por um motivo de não estar atualizando os dados lançados dentro de um loop, caso esteja acontecendo um outro problema posterior especifique-o.
:wink:
Falow!
var i : integer; begin for i := 0 to CheckListBox.Count - 1 do begin // ... procedimento de pré-condifuração como: Limpar Buffers de Parâmetros, registros, etc. Query.Prepared := False; Query.ParamByName(´CAMPO´).AsBoolean := CheckListBox.Checked; // neste caso especifiquei que o campo seria do tipo boolean Query.Prepared := True; // ... procedimentos de pós-configuração como ExecSQL, Master/Detail, etc. end; end;
Interpretei o seu tópico por um motivo de não estar atualizando os dados lançados dentro de um loop, caso esteja acontecendo um outro problema posterior especifique-o.
:wink:
Falow!
GOSTEI 0
Edan
09/05/2005
Rafael, estou colocando os procedimentos da query fora do loop
for i := 0 to clb_qm.Items.Count - 1 do begin
dmbancos.IBQCad_Dst.ParamByName(´pqm´).AsString :=
Clb_qm.Items[i];
end;
dmbancos.IBQCad_Dst.Prepare;
dmbancos.IBQCad_Dst.ExecSQL;
dmbancos.IBQCad_Dst.Close;
dmbancos.IBTransaction1.Commit;
, e exatamente nesta condição
Query.ParamByName(´CAMPO´).AsBoolean := CheckListBox.Checked;
na compilação gera erro na expressão CheckListBox.Checked, após o ponto ele não habilita a apção Checked, e estou usando char(1) na minha tabela, no meu CheckListBox eu tenho 6 opções e estou usando o delphi 5.
for i := 0 to clb_qm.Items.Count - 1 do begin
dmbancos.IBQCad_Dst.ParamByName(´pqm´).AsString :=
Clb_qm.Items[i];
end;
dmbancos.IBQCad_Dst.Prepare;
dmbancos.IBQCad_Dst.ExecSQL;
dmbancos.IBQCad_Dst.Close;
dmbancos.IBTransaction1.Commit;
, e exatamente nesta condição
Query.ParamByName(´CAMPO´).AsBoolean := CheckListBox.Checked;
na compilação gera erro na expressão CheckListBox.Checked, após o ponto ele não habilita a apção Checked, e estou usando char(1) na minha tabela, no meu CheckListBox eu tenho 6 opções e estou usando o delphi 5.
GOSTEI 0
Gandalf.nho
09/05/2005
Em vez de CHAR(1), será que não funcionaria melhor com Smallint?
GOSTEI 0
Edan
09/05/2005
Gandalf.nho, funcionou colocando como boolean, mas quando verifico no banco e no campo aparece somente -1, isso ocorre eu selecionando apenas 1 ou todos dados do meu checklistbox ?
GOSTEI 0
Faelcavalcanti
09/05/2005
Gandalf.nho, funcionou colocando como boolean, mas quando verifico no banco e no campo aparece somente -1, isso ocorre eu selecionando apenas 1 ou todos dados do meu checklistbox ?
Amigo quando mencionei com o CheckListBox, posi tinha interpretado os métodos com o do CheckBox, ou seja, dentro de uma ListBox existem vários Checkbox, por isto naquele caso o método não estava sendo visualizado.
Mas quando ele aparece [b:25633e1546]-1[/b:25633e1546] é porque a informação solicitada não foi encontrada, ou fora do índice, ou não inicializado. No caso de utilizar Char você ainda poderá utilizá-lo como um SmallInt de forma limitada como :
Query.ParamByName(´PQM´).AsString[1] := CheckListBox.Items[i].Index;
Não entendo porque utilizas como char, o que seria este campo PQM ???
GOSTEI 0
Edan
09/05/2005
caro amigo faelcavalcanti, mudei no meu banco o campo que antes era char para smallint e dessa forma deu certo em termos, pois na leitura do meu checklistbox tanto faz se estão marcados todos ou somente 1 item, ele grava no banco somente -1, talvez esse -1 seja porque na leitura ele começa por 0.
E o pqm é o paramentro que estou passando na minha query.
for i := 0 to clb_qm.Items.Count-1 do begin
if clb_qm.Checked[i] then begin
// Neste ponto eu faço a checagem dos itens marcados
showmessage(´item checado é´+inttostr(i));
// gravando a informação
dmbancos.IBQCad_Dst.ParamByName(´pqm´).AsBoolean :=
Clb_qm.Checked[i];
end
end;
E o pqm é o paramentro que estou passando na minha query.
for i := 0 to clb_qm.Items.Count-1 do begin
if clb_qm.Checked[i] then begin
// Neste ponto eu faço a checagem dos itens marcados
showmessage(´item checado é´+inttostr(i));
// gravando a informação
dmbancos.IBQCad_Dst.ParamByName(´pqm´).AsBoolean :=
Clb_qm.Checked[i];
end
end;
GOSTEI 0
Faelcavalcanti
09/05/2005
Ok amigo. Fiquei repensando o porquê de você estar fazendo desta forma por preocupação com a performace. You win!
:wink:
Falow!
:wink:
Falow!
GOSTEI 0
Edan
09/05/2005
Você tem alguma sugestão :?: ,
GOSTEI 0
Dpinho
09/05/2005
Neste codigo abaixo tento gravar todas as opções do Cheklistbox, porem ele so grava o ultimo item, preciso que ele grave todos os itens.
[color=red:9f0bcfa9c6]//Gravar as permissões
for i := 0 to Checper.Count -1 do
Begin
DM.CDSForm.Locate(´Descricao´,Checper.Items.text ,[]);
p_Cod := DM.CDSUser.fieldByName(´Id_usuar´).ASInteger;
p_Filial := DM.CDSForm.FieldByname(´id_for´).AsInteger;
p_User := DM.CDSForm.FieldByName(´Nome´).ASString;
p_Senha := DM.CDSForm.FieldByname(´Descricao´).AsString;
if Checper.Checked[I] = True then
p_ADM := ´T´;
if Checper.Checked[I] = True then
p_ADM := ´F´;
with DM.SQLPermis do Begin
close;
sql.clear;
sql.Add(´Insert Into Permi_Usuarios (ID_Usuar,ID_Form, Nom_Form, Descricao,Chec) Values(:p_Cod,:p_Filial,:p_User,:p_Senha,:p_ADM)´);
Params[0].value := p_Cod;
Params[1].value := p_Filial;
Params[2].value := p_User;
Params[3].value := p_Senha;
Params[4].value := p_ADM;
ExecSQL();
end;
end;[/color:9f0bcfa9c6]
[color=red:9f0bcfa9c6]//Gravar as permissões
for i := 0 to Checper.Count -1 do
Begin
DM.CDSForm.Locate(´Descricao´,Checper.Items.text ,[]);
p_Cod := DM.CDSUser.fieldByName(´Id_usuar´).ASInteger;
p_Filial := DM.CDSForm.FieldByname(´id_for´).AsInteger;
p_User := DM.CDSForm.FieldByName(´Nome´).ASString;
p_Senha := DM.CDSForm.FieldByname(´Descricao´).AsString;
if Checper.Checked[I] = True then
p_ADM := ´T´;
if Checper.Checked[I] = True then
p_ADM := ´F´;
with DM.SQLPermis do Begin
close;
sql.clear;
sql.Add(´Insert Into Permi_Usuarios (ID_Usuar,ID_Form, Nom_Form, Descricao,Chec) Values(:p_Cod,:p_Filial,:p_User,:p_Senha,:p_ADM)´);
Params[0].value := p_Cod;
Params[1].value := p_Filial;
Params[2].value := p_User;
Params[3].value := p_Senha;
Params[4].value := p_ADM;
ExecSQL();
end;
end;[/color:9f0bcfa9c6]
GOSTEI 0