Relacinamento entre Campos.
Boa Noite,
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.
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
Curtidas 0
Respostas
Spooner
26/02/2005
Ninguem sabe??
GOSTEI 0
Aroldo Zanela
26/02/2005
Colega,
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:
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
Spooner
26/02/2005
Boa Tarde Aroldo Zanela,
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.
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
Aroldo Zanela
26/02/2005
Colega,
Foi exatamente isto que mencionei na mensagem anterior. Para demonstrar, criei a seguinte estrutura no Firebird:
Usei a seguinte implementação no Delphi:
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