Ilano 0 Denunciar post Postado Outubro 20, 2014 Olá pessoal, Estou tentando fazer o seguinte: Numa ListBox tenho todos os campos de uma tabela. Quero passar esses campos para um memo, mas com um detalhe, que sejam jogadas em cada linha 7 palavras, ou seja, sete campos em cada linha para compor um select. Alguém teria uma sugestão? Grato, Ilano. Sendo mais claro, perciso disso: No ListBox tenho os itens: Campo1 Campo2 Campo3 Campo4 Campo5 Campo6 Campo7 Campo8 Campo9 Campo10 Campo11 Campo12 Campo13 Campo14 Campo15 Apóes percorrer o ListBox, no memo fique assim: (Na linha 0) SELECT Campo1, Campo2, Campo3, Campo4, Campo5, Campo6, Campo7, (Na linha 1) Campo8, Campo9, Campo10, Campo11, Campo12, Campo13, Campo14, (Na linha 2) Campo15 FROM NOME_DA_TABELA Compartilhar este post Link para o post Compartilhar em outros sites
Ilano 0 Denunciar post Postado Outubro 20, 2014 Bom pessoal, Fiz um negócio meio estranho, mas funcionou. Se alguém souber como melhorar, o que acredito que tenha como melhorar sim, por favor, esteja à vontade. procedure TFrmListarCampos.BtnGerarSQLClick(Sender: TObject);Var I, C, F : Integer; pCampos : String;begin pCampos:=''; C:=0; F:=0; cxListBox1.Items.Clear; cxSQL.Lines.Clear; For I:=0 To clbCampos.Items.Count - 1 Do Begin If clbCampos.Items.Items.Checked = True Then C:=C + 1; ENd; For I:=0 To clbCampos.Items.Count - 1 Do Begin If clbCampos.Items.Items.Checked = True Then Begin F:=F + 1; cxListBox1.Items.Add(clbCampos.Items.Items.Text); End; End; F:=cxListBox1.Items.Count; C:=0; For I:=0 To cxListBox1.Items.Count - 1 Do Begin pCampos:=pCampos + cxListBox1.Items.Strings + ', '; If (C >= 7) AND (I < F) Then Begin cxSQL.Lines.Add(pCampos); pCampos:=''; C:=0; End Else If (C <= 7) AND (I = F - 1) Then Begin cxSQL.Lines.Add(LeftStr(pCampos, (Length(pCampos) - 2))); cxSQL.Lines.Add('FROM ' + LbTabela.Caption + ' (NOLOCK)') End; C:=C + 1; End; cxSQL.Lines.Strings[0]:='SELECT TOP 1000 ' + cxSQL.Lines.Strings[0]; BtnConfirmar.Enabled:=True;end; Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Outubro 21, 2014 Colega, seu código ficou um tanto confuso e ficou difícil identificar os componentes que usou.... de todo modo, não precisa usar tantos for para fazer o que quer, 1 só já é o suficiente... vou postar aqui um exemplo que faz a mesma coisa usando um checklistbox e um memo para exibir os dados formatados em sql quando clicar no botão. No checklistbox eu adicionei direto os itens como no exemplo que passou (campo1 ... campo15). unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, CheckLst; type TForm1 = class(TForm) cxSQL: TMemo; Button1: TButton; clbCampos: TCheckListBox; LbTabela: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); Var iAux, iQtdePalavras : Integer; pCampos : String; begin pCampos := EmptyStr; iQtdePalavras := 0; cxSQL.Lines.Clear; For iAux :=0 To clbCampos.Items.Count - 1 Do Begin If clbCampos.Checked[iAux] = True Then begin inc(iQtdePalavras); //Pegou o primeiro item da linha, logo não precisa jogar a ',' ainda if (Trim(pCampos) = EmptyStr) then pCampos := 'SELECT TOP 1000 ' + clbCampos.Items.Strings[iAux] else begin //Verifica se já chegou no limite de 7 palavras para decidir o próximo passo if (iQtdePalavras) > 7 then begin //Insere no memo cxSQL.Lines.Add(pCampos + ', '); //recomeça a inserção dos campos na variável auxiliar pCampos := clbCampos.Items.Strings[iAux]; //Reinicia o contador de palavras, agora com 1 para manter o padrão //de quebrar a cada 7 palavras iQtdePalavras := 1; end else //Se não chegou a 7 palavras, apenas acrescenta a ',' e acumula pCampos := pCampos + ', ' + clbCampos.Items.Strings[iAux]; end; end; end; //Insere os últimos itens selecionados no checklistbox cxSQL.Lines.Add(pCampos); cxSQL.Lines.Add('FROM ' + LbTabela.Caption + ' (NOLOCK)'); // BtnConfirmar.Enabled:=True; end; end. Rodando o teste, obtive o resultado abaixo no memo, selecionando os 15 itens. SELECT TOP 1000 Campo1, Campo2, Campo3, Campo4, Campo5, Campo6, Campo7, Campo8, Campo9, Campo10, Campo11, Campo12, Campo13, Campo14, Campo15 FROM TabTeste (NOLOCK) Compartilhar este post Link para o post Compartilhar em outros sites
Ilano 0 Denunciar post Postado Outubro 23, 2014 Beleza Chrnos, Já implementei no meu projeto, deu certinho! Realmente ficou bem melhor, fora que você explicou com riqueza de detalhes todas as linhas. obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Outubro 23, 2014 O nosso mal é sair programando sem pensar no melhor meio pra isso rs.... mas se funcionou e entendeu o conceito que usei, então está ótimo rs... qualquer coisa estamos ai pra ajudar. :coolio: Compartilhar este post Link para o post Compartilhar em outros sites