Fórum Relacinamento entre Campos. #270291
26/02/2005
0
Estou com o seguinte problema.
Tenho uma tabela nessa tabela tem dois campos um chamado CATEGORIA e outro chamado SUBCODIGO na inclusão de um registro o usuario informa por exemplo a CATEGORIA E1 e o sistema automaticamente teria que puxar o codigo 001 no campo SUBCODIGO, se incluise um novo registro e o usuario informar a categoria E1 o SUBCODIGO deveria vir 002 pq já existe um lançamento com o codigo 001, e tbm não deveria aceitar que o campo SUBCODIGO tenha valores duplicados, mas se o usuario informar uma CATEGORIA E2 então o SUBCODIGO deveria ser 001, pq mudou a categoria, e se ele incluise outro registro usando a categoria E2 o SUBCODIGO deveria vier 002 pq já tem um registro E2 com o subcodigo 001. O problema é que não estou conseguindo fazer esse controle no Delphi.
Estou usando FireBird e Delphi 7.
Spooner
Curtir tópico
+ 0Posts
01/03/2005
Spooner
Gostei + 0
01/03/2005
Aroldo Zanela
Crie uma tabela para controlar essas sequências.
Ex:
SEQUENCIAS (TABELA)
CATEGORIA,CHAR(2)
SUBCODIGO,INTEGER
Implemente uma busca de categoria nesta tabela, se a categoria não existir, então inclua a categoria e inicialize o contador de subcodigo, caso a categoria já exista, incremente o contador de subcodigo.
Ex:
if not tbSequencias.Locate(´categoria´,editCATEGORIA,[]) then .. Incluir catedoria e contador = 1 else .. colocar tabela em ediçao e incrementar contador de subcodigo
Gostei + 0
02/03/2005
Spooner
O problema é que o contador depende da categoria por ex:
Tabela não tem nem um lançamento.
ai eu mando incluir informo uma categoria E1 e quando eu sair desse campo o sistema automaticamente joga 001 no campo subcodigo, no segundo lançamento se ele informar a mesma categoria o sistema grava outra linha com a categoria E1 e já no subcodigo tem que vim 002, mas se o usuario informar uma categoria E2 o campo subcodigo não pode vim com 003 e sim com 001 pq esse foi o primeiro lançamento que usei a categoria E2, e assim por diante...
Obrigado pela resposta.
Gostei + 0
02/03/2005
Aroldo Zanela
Foi exatamente isto que mencionei na mensagem anterior. Para demonstrar, criei a seguinte estrutura no Firebird:
CREATE TABLE CATEGORIAS ( CAT_ID CHAR(2) NOT NULL, CAT_SUBGRUPO INTEGER );
Usei a seguinte implementação no Delphi:
procedure TForm1.Button1Click(Sender: TObject); begin if not tbCategorias.Locate(´cat_id´, leCategoria.Text, []) then begin tbCategorias.AppendRecord([leCategoria.Text, 1]); end else begin tbCategorias.Edit; tbCategoriasCAT_SUBGRUPO.Value := tbCategoriasCAT_SUBGRUPO.Value+1; tbCategorias.Post; end; // Abaixo, demais implementações leSubgrupo.Text:= FormatFloat(´000´, tbCategoriasCAT_SUBGRUPO.Value); end; procedure TForm1.FormCreate(Sender: TObject); begin tbCategorias.Open; end;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)