Fórum AJUDA COM O CHECKLISTBOX NO DELPHI 7 #419960

16/07/2012

0

Pessoal, estou levando uma surra sem fim para implementar uma rotina em um sistema que estou desenvolvendo, será alguém ai pode me dar uma luz????

É o seguinte tenho um formulário que está trazendo informações dentro de um CHECKLISTBOX até ai tudo blz, meu problema começa no momento de dar baixa nas opções selecionadas.

Meu Checklistbox só tem 2 informações: número de via e código de barra; O que estou tentando fazer é quando selecionar a via no checklistbox e clicar no botão baixar entao a aplicação iria ATUALIZAR meu banco de dados, colocando numa tabela chamada BAIXA_VIAS a DT_BAIXA que está vazia e trocando o valor do campo PC que é o tipo CHAR que está com valor N para S.
Já dei uma vasculhada na net e não encontrei uma solução pro meu caso. E só estou conseguindo fazer pra atualizar todos os registros e não é o que quero pois quero atualizar somente aqueles registros que estiverem selecionados dentro do checklistbox.

Alguém se habilitar a me dar uma luz, orientação, direcionamento; me ajudem pessoal.

Hardsoft Informatica

Hardsoft Informatica

Responder

Post mais votado

16/07/2012

Como está o texto dos itens do checklistbox? É o número da via?
Enfim vou lhe dar um exemplo de como percorrer os itens, verificar quais estão marcados e executar uma determinada ação.
queryAcao.SQL.Text := ´UPDATE BAIXA_VIAS SET DATA_BAIXA = :dtBaixa WHERE NUM_VIA = :numVia´;
for i := 0 to Pred(checkVias.Items.Count) do
begin
if checkVias.Checked[i] then
begin
queryAcao.ParamByName(´dtBaixa´).AsDateTime := Today;
queryAcao.ParamByName(´numVia´).AsString := checkVias.Items[i];
queryAcao.ExecSQL;
end
end

Claro que este é apenas um exemplo, eu nem mesmo testei no Delphi, mas a lógica é esta.

Joel Rodrigues

Joel Rodrigues
Responder

Gostei + 1

Mais Posts

16/07/2012

Hardsoft Informatica

Olá Joel, boa noite

meu formulário mostra os dados assim:

NR_VIA COD_BARRA
00001 0000000000000000001
00002 0000000000000000001
00003 0000000000000000001
....

O que eu estou tentando é, selecionar o checkbox do 00001 por exemplo e e clicar no botao baixar e assim atualiar o banco de dados modificando atualizando o campo DT_BAIXA que vai ser a data em que estou selecionando a via e o campo PC que está N e vai ter que fica S....

Tentei sua sugestão, mais acho q não compreendir direito.

Eu poderia fazer??? se o nr_via estiver seleionado entao sql_acao atualizaria os campos descritos acima.
Tô perdidinho....
Responder

Gostei + 0

16/07/2012

Cauê Nishijima

Olá Joel, boa noite

meu formulário mostra os dados assim:

NR_VIA COD_BARRA
00001 0000000000000000001
00002 0000000000000000001
00003 0000000000000000001
....

O que eu estou tentando é, selecionar o checkbox do 00001 por exemplo e e clicar no botao baixar e assim atualiar o banco de dados modificando atualizando o campo DT_BAIXA que vai ser a data em que estou selecionando a via e o campo PC que está N e vai ter que fica S....

Tentei sua sugestão, mais acho q não compreendir direito.

Eu poderia fazer??? se o nr_via estiver seleionado entao sql_acao atualizaria os campos descritos acima.
Tô perdidinho....


Ola HARDSOFT, acho que com algumas adaptações no código do Joel, resolve seu problemas 100%


queryAcao.SQL.Text := UPDATE BAIXA_VIAS SET DATA_BAIXA = :dtBaixa, PX = S WHERE NUM_VIA = :numVia;
for i := 0 to Pred(checkVias.Items.Count) do
begin
   if checkVias.Checked[i] then
   begin
      queryAcao.ParamByName(´dtBaixa´).AsDateTime := Today;
      queryAcao.ParamByName(´numVia´).AsString := trim(copy(checkVias.Items[i],0,Pos( ,checkVias.Items[i])));
      queryAcao.ExecSQL;
   end;
end;


Acredito que pelo que eu e o Joel entendemos é isso. Se não for explique novamente para nós.

Abraço
Cauê Nishijima
Responder

Gostei + 1

16/07/2012

Hardsoft Informatica

Boa noite, companheiros

Não sei, devo estar compreendendo algo errado. Meu código está da seguinte forma:

procedure TFrmConferenciaPC.Btn_baixarClick(Sender: TObject);
var
i:Integer;
begin
for i:= 0 to CheckListBox1.Count-1 do
begin
if CheckListBox1.Checked[i] then
begin
Sql_acao.Close;
Sql_acao.SQL.Clear;
Sql_acao.SQL.Add(Update BAIXA_VIAS where DT_BAIXA=:dt_baixa, PC=:pc);
Sql_acao.ParamByName(DT_BAIXA).AsDate:= edt_data_confere.Date;
Sql_acao.ParamByName(PC).AsString:=S;
Sql_acao.ParamByName(NR_VIA).AsInteger:= (CheckListBox1.Items.Objects[i]).InstanceSize;
Sql_acao.ExecQuery;
end;
end;
end;

Mas ai está aparecendo a seguinte mensagem de erro:

Project Sindicat.exe raised exception class EIBInterBaseErro with message Dynamic SQL Error
SQL erro code =-104
Token unknown - line 1, column 19
where. Process stopped. Use Step or Run continue

Amigos, que devo fazer?????
Responder

Gostei + 1

17/07/2012

Cauê Nishijima

Boa noite, companheiros

Não sei, devo estar compreendendo algo errado. Meu código está da seguinte forma:

procedure TFrmConferenciaPC.Btn_baixarClick(Sender: TObject);
var
i:Integer;
begin
for i:= 0 to CheckListBox1.Count-1 do
begin
if CheckListBox1.Checked[i] then
begin
Sql_acao.Close;
Sql_acao.SQL.Clear;
Sql_acao.SQL.Add(Update BAIXA_VIAS where DT_BAIXA=:dt_baixa, PC=:pc);
Sql_acao.ParamByName(DT_BAIXA).AsDate:= edt_data_confere.Date;
Sql_acao.ParamByName(PC).AsString:=S;
Sql_acao.ParamByName(NR_VIA).AsInteger:= (CheckListBox1.Items.Objects[i]).InstanceSize;
Sql_acao.ExecQuery;
end;
end;
end;

Mas ai está aparecendo a seguinte mensagem de erro:

Project Sindicat.exe raised exception class EIBInterBaseErro with message Dynamic SQL Error
SQL erro code =-104
Token unknown - line 1, column 19
where. Process stopped. Use Step or Run continue

Amigos, que devo fazer?????



Cara seu comando SQL esta errado, o comando segue a seguinte estrutura:

UPDATE tabela SET campo = valor WHERE campo = condição

No seu caso acho que deve ficar assim:

UPDATE baixa_vias SET dt_baixa = :dt_baixa, pc = :pc WHERE NR_VIA = (CheckListBox1.Items.Objects[i]).InstanceSize;


Apesar que não entendi o porque você utilizou o comando
(CheckListBox1.Items.Objects[i]).InstanceSize
para pegar o valor do checklist. O comando que eu lhe enviei não seria melhor??
Responder

Gostei + 1

17/07/2012

Cauê Nishijima

só corrigindo o código:

UPDATE baixa_vias SET dt_baixa = :dt_baixa, pc = :pc WHERE nr_via = :nr_via;
Responder

Gostei + 1

17/07/2012

Hardsoft Informatica

mano, to tipo jegue...
Responder

Gostei + 0

17/07/2012

Hardsoft Informatica

tipo assim, entendir o codigo que vc me enviou; mas esta linha da um erro:

queryAcao.ParamByName(´numVia´).AsString := trim(copy(checkVias.Items[i],0,Pos( ,checkVias.Items[i])));

o que coloco aqui na ???
queryAcao.ParamByName(´numVia´).AsString := trim(copy(checkVias.Items[i],0,Pos(??? ,checkVias.Items[i])));
Responder

Gostei + 0

17/07/2012

Joel Rodrigues

Essa linha deve ficar no lugar desta
Sql_acao.ParamByName(NR_VIA).AsInteger:= (CheckListBox1.Items.Objects[i]).InstanceSize;

Afinal você quer pegar parte do texto dos itens selecionados.
Responder

Gostei + 1

17/07/2012

Cauê Nishijima

ola marcos, desculpa foi erro meu, esqueci de colocar... deve ficar assim ó:

queryAcao.ParamByName(´numVia´).AsString := trim(copy(checkVias.Items[i],0,Pos(´ ´,checkVias.Items[i])));


Explicando o comando COPY: copia um substring uma string, de uma posição inicial até uma certa quantidade,
copy(texto,posição inicial, quantidade de caracteres)
]

Explicando o comando POS: posição de uma substring, em uma substring
pos(substring, string)


sabendo a posição do primeiro espaço em branco da string eu sei quantos caracteres eu devo copiar desde a posição zero, onde o mesmo corresponde ao número da via.

Abraços
Cauê Nishijima
Responder

Gostei + 1

17/07/2012

Cauê Nishijima

ola marcos, desculpa foi erro meu, esqueci de colocar... deve ficar assim ó:


queryacao.parambyname(´numvia´).asstring := trim(copy(checkvias.items[i],0,pos(´ ´,checkvias.items[i])));


explicando o comando copy: copia uma substring de uma string, de uma posição inicial até uma certa quantidade,
copy(texto,posição inicial, quantidade de caracteres)]

explicando o comando pos: posição de uma substring, em uma string
pos(substring, string)

sabendo a posição do primeiro espaço em branco da string eu sei quantos caracteres eu devo copiar desde a posição zero, onde o mesmo corresponde ao número da via.

abraços
cauê nishijima
Responder

Gostei + 0

26/07/2012

Hardsoft Informatica

resolvido galera, valeu pela ajuda...
Responder

Gostei + 0

16/11/2017

Marlos Silva

Resolvi meu problema dessa forma

procedure TFrmEnquetes.GravaParticipantes(IDEnquete: Integer);
var
  Ql: Integer;
  k: Integer;

begin
  Ql := 0;
  For k := 0 To cb1.Items.Count - 1 do
  begin
    If cb1.checked[k] Then
    Begin

      Inc(Ql);
      with DmCad.q3 do
      begin
        SQL.Clear;
        SQL.Add('INSERT INTO TB_ENQUETES_USUARIOS (ENQUETE_ID, USUARIO_ID, ENU_CHAVE, ENU_CHAVE_INATIVA)');
        SQL.Add(' VALUES (:ENQUETE_ID, :USUARIO_ID, :ENU_CHAVE, :ENU_CHAVE_INATIVA)');
        ParamByName('USUARIO_ID').AsString:= trim(copy(cb1.Items[k],0,4));
        ParamByName('ENQUETE_ID').AsInteger := IDEnquete;
        ParamByName('ENU_CHAVE').AsString := GerarSenhaAleatoria(6);
        ParamByName('ENU_CHAVE_INATIVA').AsBoolean := false ;
        ExecSQL;

      end;
    End;
  End;

end;
Responder

Gostei + 0

16/11/2017

Marlos Silva

no CheckListBox esta escrito assim:   0001- Usuario Fulano 
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar