AJUDA COM O CHECKLISTBOX NO DELPHI 7
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.
É 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
Curtidas 0
Melhor post
Joel Rodrigues
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.
Claro que este é apenas um exemplo, eu nem mesmo testei no Delphi, mas a lógica é esta.
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.
GOSTEI 1
Mais Respostas
Hardsoft Informatica
16/07/2012
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....
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....
GOSTEI 0
Cauê Nishijima
16/07/2012
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....
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
GOSTEI 1
Hardsoft Informatica
16/07/2012
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?????
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?????
GOSTEI 1
Cauê Nishijima
16/07/2012
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?????
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
GOSTEI 1
Cauê Nishijima
16/07/2012
só corrigindo o código:
UPDATE baixa_vias SET dt_baixa = :dt_baixa, pc = :pc WHERE nr_via = :nr_via;
GOSTEI 1
Hardsoft Informatica
16/07/2012
mano, to tipo jegue...
GOSTEI 0
Hardsoft Informatica
16/07/2012
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])));
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])));
GOSTEI 0
Joel Rodrigues
16/07/2012
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.
Sql_acao.ParamByName(NR_VIA).AsInteger:= (CheckListBox1.Items.Objects[i]).InstanceSize;
Afinal você quer pegar parte do texto dos itens selecionados.
GOSTEI 1
Cauê Nishijima
16/07/2012
ola marcos, desculpa foi erro meu, esqueci de colocar... deve ficar assim ó:
Explicando o comando COPY: copia um substring uma string, de uma posição inicial até uma certa quantidade,
]
Explicando o comando POS: posição de uma substring, em uma substring
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
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
GOSTEI 1
Cauê Nishijima
16/07/2012
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
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
GOSTEI 0
Hardsoft Informatica
16/07/2012
resolvido galera, valeu pela ajuda...
GOSTEI 0
Marlos Silva
16/07/2012
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;
GOSTEI 0
Marlos Silva
16/07/2012
no CheckListBox esta escrito assim: 0001- Usuario Fulano
GOSTEI 0