De ListBox para ListBox

Delphi

01/09/2005

Srs, bom dia!

Estou tentando mas não estou conseguindo inserir no ListBox2, um item selecionado no ListBox1. Consigo preencher o ListBox1, com dados provenientes de um banco, mas preciso possibilitar que o usuario selecione o (os) item (s) desejado (s) no ListBox1 e insira no ListBox2, e a partir daí utilizar os dados do ListBox2 como parâmetros para uma query específica. Se alguem puder me ajudar, serei muito grato. Desde já eu agradeço.

Abraço a todos.


Programalista

Programalista

Curtidas 0

Respostas

Bruno Belchior

Bruno Belchior

01/09/2005

with ListBox1 do
  ListBox2.Items.Add(Items[ItemIndex]);

isso se o parâmetro for realmente a string... senão use o [b:4cbbd226cb]AddObject[/b:4cbbd226cb] e passe um índice qualquer... :wink:


GOSTEI 0
Programalista

Programalista

01/09/2005

Valeu brunovicenteb, era isto que eu precisava. Deu certo!

Abrigado, qq coisa estamos ai.

Att,

Programalista


GOSTEI 0
Programalista

Programalista

01/09/2005

Pessoal, surgiu um outro problema: Estou tentando atribuir o conteúdo do ListBox2 à uma variável do tipo ´string´ para que eu possa passá-la como parâmetro em uma query, mas o Delphi exibe um erro dizendo que os tipos String (variável) e o TString (ListBox2) são incompativéis.

[Error] Ulistbox.pas(106): Incompatible types: ´String´ and ´TStrings´


Algum saberia como resolver isto?

Obrigadaço! e abraço a todos.

Att,

Programalista.


GOSTEI 0
Bruno Belchior

Bruno Belchior

01/09/2005

if ListBox1.ItemIndex <> -1 then
  Query.ParByName(´Parametro1´).AsString := ListBox1.Items[ListBox1.ItemIndex];



GOSTEI 0
Programalista

Programalista

01/09/2005

Bom dia Bruno, e a todos do Fórum.

Eu preciso de uma query assim:
select * from certificado where codigo in (125, 450, 80) order by codigo


sendo assim, ao comando do usuario, estarei passando esta query para o banco, onde os valores de parâmetro deverão ser aqueles que o usuario irá selecionar e que vão estar no ListBox2. Preciso desta solução porque o sistema que desenvolvi permite que o relatório seja convertido em .pdf e enviado por email, então atualmente, se preciso enviar 3 relatórios de certificado para o meu cliente, eu tenho que gerá-los um por um, converter em .pdf (através do sistema), salvar e só depois criar um email e anexar todos. Se eu conseguir o que pretendo, o usuário poderá selecionar os códigos que desejar (no ListBox1) e preencher o ListBox2 a partir daí irá disparar a geração ´do relatório´ (único) com tantas páginas de acordo que os códigos gerados, ou seja, se forem selecionados 3 códigos, será gerado um único relatório com 3 páginas. Então o sistema irá gerar um único .pdf que será enviado por email. Talvez tenha outra forma mais prática de implementar esta solução, se tiver alguma sugestão, ela será muito bem vinda. Agradeço desde já.

Att,

Programalista.


GOSTEI 0
Bruno Belchior

Bruno Belchior

01/09/2005

acho que em vez de dois [b:f127c166fb]ListBox´s[/b:f127c166fb] pq vc não usa um [b:f127c166fb]CheckListBox[/b:f127c166fb] :?: Assim ele poderá escolher quantos ´Relatórios´ ele quiser... não sei se entendi seu problema ou se estou me equivocando :oops: de qualquer forma, no ListBox vc lista um nome e quer passar um código :?: ou você lista nomes e quer passar realmente nomes como parâmetro :?:


GOSTEI 0
Programalista

Programalista

01/09/2005

Mais uma vez, obrigado!

Eu listo os códigos no ListBox1 e quero passá-los como parâmetro, estes códigos são do tipo inteiro. A intenção de usar o LisBox em vez do CheckListBox é apenas para deixar de forma mais clara, o que usuário está selecionando.

Abraços.


GOSTEI 0
Rômulo Barros

Rômulo Barros

01/09/2005

Vamos supor que o seu ListBox2 possua os valores: 1 - 2 - 3

Logo seu select ficaria assim:

select * from certificado where codigo in (1,2,3) order by codigo


[b:b03371bc89]
Para isto, utililzei como base o código abaixo:[/b:b03371bc89]

Var
   C : Byte;
   Query : String;
   Parametros : String;
begin
   With(ListBox2)Do
   Begin
      Query := ´select * from certificado where codigo In´;
      Parametros := ´(´;
      For C := 0 To Items.Count -1 Do
      Begin
         If(C = Items.Count -1)Then
         Begin
            Parametros := Parametros + Items[C] + ´)´;
         End
         Else
           Begin
              Parametros := Parametros + Items[C] + ´,´;
           End;
      End;
      Query := Query + Parametros + ´ order by codigo´;
      ShowMessage(Query);
   End;
end;


[b:b03371bc89]Espero q funcione de acordo com sua necessidade !!![/b:b03371bc89]


[u:b03371bc89][i:b03371bc89][b:b03371bc89][color=blue:b03371bc89]Obs:[/color:b03371bc89][/b:b03371bc89][/i:b03371bc89][/u:b03371bc89][color=red:b03371bc89] É fundamental que vc valide se o listbox2 possui itens para evitar erros.[/color:b03371bc89]


GOSTEI 0
Programalista

Programalista

01/09/2005

Rômulo Barros, meu camarada [b:30c34261bb]valeu Demais[/b:30c34261bb] era exatamente isto de que eu precisava, [b:30c34261bb]o b r i g a d o![/b:30c34261bb]

Agradeço também ao Bruno pelas suas valiosas contribuições.

Olha gente, sou iniciante na arte de programar, mas eu estou tentando e com certeza chegarei lá, por isso eu sou muito grato a todos àqueles que contribuem para o meu crescimento. Obrigado mesmo.

Abraços.


GOSTEI 0
Rômulo Barros

Rômulo Barros

01/09/2005

:arrow: [u:827890b9a2]Relaxa !!![/u:827890b9a2] :wink:


GOSTEI 0
Bruno Belchior

Bruno Belchior

01/09/2005

:wink: só pra resumir mais um pouco:
var
  ComandoSQL: string;
begin
  ComandoSQL := Format(´Select * from Tabelas where Codigo in (¬s) order by ´ +
    ´Codigo´, [ListBox2.Items.CommaText]);
end;



GOSTEI 0
Rômulo Barros

Rômulo Barros

01/09/2005

Boa Solução, [u:9f898c339c]brunovicenteb [/u:9f898c339c]!!
Está aí uma solução ´enxuta´ para o problema do nosso amigo.
Mais uma q eu não sabia e aprendi.
É Vivendo e aprendendo..

[b:9f898c339c]Parabéns... !!!![/b:9f898c339c] :wink:


GOSTEI 0
Bruno Belchior

Bruno Belchior

01/09/2005

:wink: como você mesmo disse :!: [quote:d80c91b13a=´Rômulo Barros´]:arrow: [u:d80c91b13a]Relaxa !!![/u:d80c91b13a] :wink:[/quote:d80c91b13a]


GOSTEI 0
Programalista

Programalista

01/09/2005

UAU!!! que enxugada.

Deste fórum eu não arredo mais o pé, incrível, aqui só tem ´feras´, desenvolvedores destemidos...e competentes. Não sem preocupem, ainda farei parte deste time para poder contribuir com algumas [b:91778914af]máximas [/b:91778914af]como estas.

Obrigadaço pessoal, vocês foram muito, mas muito solidários!

Abraços e Parabéns a você Bruno e a você Rômulo.


GOSTEI 0
POSTAR