Fórum Gerador de Número Faltantes #261768

13/12/2004

0

Olá pessoal, tudo bem? Espero que sim..

Bom, estou fazendo ainda meu programinha pra catalogar gibis, e gostaria de fazer um pequeno gerador de números faltantes nele.. a minha ideia é a seguinte..

As revistas sao catalogadas dentro de um grupo e um subgrupo.. entao eu pensei em fazer assim..

Selecionar o Grupo e o SubGrupo onde estao as revistas que quero gerar os número faltantes. Ex.: Grupo: Marvel Comics; SubGrupo: Wolverine;

Digitar a númeração inicial e a final das revistas de acordo com o digitado. Ex.: Inicial: 001 e Fina: 101.

E digitar o nome com q foi cadastrado, sem o número. Ex. Wolverine #

Aí no caso, iria gerar os nomes Wolverine 001, Wolverine 002, etc.. juntando o nome, com os numeros, de 001 a 101.. e após essa geração, ele iria comparar todos os títulos gerados com os q estao ta tabela, dentro do Grupo e SubGrupo específicado, e descartar os que forem iguais, deixando só os que não forem iguais, os que estao faltando..

Depois disso eu vou aprender a colocar esses numeros gerados num relatório pra impressão, mas por enquanto gostaria somente de uma ajuda em como fazer esse gerador, como fazer pra ele criar esses nomes e comprar com a tabela... grato pela ajuda.. :roll:



Allan Elias Ramos :wink:


Aersoftware

Aersoftware

Responder

Posts

13/12/2004

Rômulo Barros

Coloque um Edit para receber o Valor Inicial e outro Edit para Receber o valor final da numeração. Agora, adicione um Memo para receber os resultados gerados e um botão para carrregar o Memo. Coloque o código abaixo no evento Click do botão:

procedure TForm1.btnGerarNumerosClick(Sender: TObject);
Var
   Controle  : Integer ;
   Resultado : String ;
begin
   MemoResultados.Lines.Clear;
   For Controle := StrToInt(EdtInicial.Text) To StrToInt(EdtFinal.Text) Do
   Begin
      Resultado := IntToStr(Controle);
      While(Length(Resultado) < 3) Do
        Resultado := ´0´ + Resultado;
      Resultado := ´Wolverine # ´ + Resultado;
      MemoResultados.Lines.Add(Resultado);
   End;
end;



Responder

Gostei + 0

13/12/2004

Gandalf.nho

Dependendo do banco de dados que você estiver usando, você pode criar uma Stored Procedure para fazer isso dentro do próprio banco.


Responder

Gostei + 0

13/12/2004

Aersoftware

Olá Undeclared, fiz algumas modificações e cheguei ao seguinte resultado..

var
  Controle : Integer;
  Resultado : String; 
begin
  MmLista.Lines.Clear; 
  for Controle := StrToInt(EdtInicial.Text) to StrToInt(EdtFinal.Text) do 
    begin
      Resultado := IntToStr(Controle); 
      if EdtZeros.Text = ´0´ then 
        begin
          Resultado := EdtNome.Text + Resultado; 
          MmLista.Lines.Add(Resultado); 
        end
      else if EdtZeros.Text = ´1´ then 
        begin
          while (length(Resultado) < 2) do 
          Resultado := ´0´ + Resultado; 
          Resultado := EdtNome.Text + Resultado;
          MmLista.Lines.Add(Resultado);
        end
      else if EdtZeros.Text = ´2´ then
        begin
          while (length(Resultado) < 3) do
          Resultado := ´0´ + Resultado;
          Resultado := EdtNome.Text + Resultado;
          MmLista.Lines.Add(Resultado);
        end;
    end;


Basicamente essa mudança é pro usuário poder controlar quantos zeros a esquerda ele colocou, pra fazer a pesquisa precisa, pq pra algumas revistas pode ter 2 zeros (no caso de passar de 100 numeros) e outras podem ter 1 zero somente (caso nao chegue a 100 numeros)..

Bom, até aí funcionou blz, obrigado pela ajuda... mas, tentei fazer a comparação dos nomes gerados com o banco de dados e nao fui muito feliz.. como eu poderia fazer isso, baseado no código acima?

Eu coloquei 2 LookUps tambem, onde o usuário vai selecionar o Grupo e o SubGrupo que esta a revista.. no caso, eu teria que fazer essa pesquisa SQL onde ele achasse as revistas que tenham a chave estrangeira de Grupos e SubGrupos iguais as que foram selecionadas e depois comparar.. bom, a pesquisa eu sei fazer.. só me atrapalhei um pouco onde ela é feita e onde vai a comparação com os nomes gerados... grato pela ajuda.. :roll:



Allan Elias Ramos :roll:


Responder

Gostei + 0

14/12/2004

Rômulo Barros

Bom, para pesquisar no banco através dos resultados obtidos, poderemos fazer um loop e pesquisar através de cada um deles(resultados).

procedure TForm1.Button1Click(Sender: TObject);
Var
   Controle : Integer;
   QueryPesquisa : TSqlQuery;
begin
   For Controle := 0 To Memo1.Lines.Count -1 Do
   Begin
      With(QueryPesquisa)Do
      Begin
         Close();
         SQL.Text := ´ SELECT SUB.NOME ´
                  +  ´ FROM   TABLE_GRUPO GRUP, TABLE_SUB_GRUP SUB ´
                  +  ´ WHERE  SUB.CODIGO_GRUPO = GRUP.CODIGO_GRUP  ´
                  +  ´ AND    SUB.NOME_REVISTA =                   ´
                  +    QuotedStr(Memo1.Lines[Controle]);
         Open();
         ShowMessage(´Resultado: ´ + Fields[0].AsString);
      End;
   End;
end;


:arrow: [color=red:7163c37740][b:7163c37740]Este código acima terá que ser gerado através das opções escolhidas pelo usuário nos Lookups. Acredito que se vc informar a estrutura das tabelas GRUPO e SUBGRUPO, facilitaria bastante para que ajudássemos.[/b:7163c37740][/color:7163c37740]


Responder

Gostei + 0

14/12/2004

Aersoftware

Undeclared, a estrutura é bem simples..

[b:9231716bc4]Grupos[/b:9231716bc4]

PkCod_Grupo
Nome

[b:9231716bc4]SubGrupos[/b:9231716bc4]

PkCod_SubGrupo
FkCod_Grupo
NomeSubGrupo

Eu estive pensando em uma coisa, mas nao sei se da pra fazer.. fazer a pesquisa SQL e comparar ao mesmo tempo que ele gerar as edições.. daí eu teria q fazer isso 3 vezes, pras 3 opções que o usuário usar com zeros a esquerda.. tem como? Eu faço as pesquisas sempre comparando o KeyValue dos LookUps.. :wink:



Allan Elias Ramos :roll:


Responder

Gostei + 0

14/12/2004

Aersoftware

Olá, fiz mais uma pequena modificação no código acima e ficou assim, logo antes do código acima tem:

  DmDados.ClientNacionais.Close;
  with DmDados.SqlNacionais do
    begin
      close;
      CommandText :=
        ´Select * From TbRevNacionais Where FkCod_Grupo =´
        + IntToStr(DbLkUpGrupos.KeyValue)
        + ´And FkCod_SubGrupo =´
        + IntToStr(DbLkUpSubGrupos.KeyValue)
        + ´Order By NomeNumero´;
      open;
    end;
  DmDados.ClientNacionais.Open;
  DmDados.ClientNacionais.First;
  while not DmDados.ClientNacionais.Eof do
    begin
      MmResultado.Lines.Add(DmDados.ClientNacionais.FieldByName(´NomeNumero´).AsString);
      DmDados.ClientNacionais.Next;
    end;


Esse código faz um outro Memo receber os nomes das revistas que estao cadastradas.... entao, no 1º, ele vai receber o código gerado pelo gerador do numero incial ao final, e no segundo ele vai receber, também por ordem de nome os registros cadastrados..

O q eu pensei em fazer é comparar as linhas inseridas no momento da inserção e ver se sao diferentes.. se forem diferentes, um terceiro Memo irá receber também a linha que estiver sendo inserida no gerador..

Tentei mais ou menos assim..

If MmLista <> MmResultado then
   MmFaltantes := MmLista


Sei que não é assim, falta as ´extensões´ do memo pra comparar, mas nao sei qual delas colocar pra ele comprar o resultado gerado e colocar no último Memo esse resultado do 1º Memo..



Allan Elias Ramos :roll:


Responder

Gostei + 0

15/12/2004

Aersoftware

Alguém? :oops:



Allan Elias Ramos :wink:


Responder

Gostei + 0

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

Aceitar