Ir para conteúdo
Fórum Script Brasil
  • 0

[resolvido] Incrementar Campo


VDLR

Pergunta

Alguém pode me ajudar:

Vou dar um exemplo do que presciso

Exemplo Tabela CadRIM

ID-- Data---------Contr_RIM

1--- 01/08/2007--- 5

2--- 06/08/2007--- 6

3--- 01/09/2007--- 7

4--- 01/11/2007--- 8

5--- 15/12/2007--- 9

6--- 10/01/2008--- 1

Próximo Lançamento em 15/01/08 seria no Max do ID que é 6, e acrescentar mais 1 no Contr_RIM que é 1.

Ficaria assim

7 15/01/2008 2

ID Campo Auto Incrementado

Tem como sempre no max do campo ID eu acrescentar mais 1 no campo Contr_RIM.

Já quebrei a cabeça com isto e não achei como.

Abraço

Valdecir :unsure:

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0
Guest --Jonas --

Vai ai uma dica que pode vir a ser muito util:

Neste exemplo qryUso é um SimpleDataSet.

Desta forma o programador poderá mostrar facilmente o seu valor

Auto-incremental, por exemplo, sempre que ele der um insert na tabela ele faz o

seguinte:

Edit1.text := intTOstr(Inc_gen(‘Generator_desejada’))

Se caso cancelar a inserção chame a procedure Dec_Gen(‘Generator_desejada’);

//onde Generator_desejada e aquela que será incrementada ou decrementada.

Function Inc_Gen(Generator: String): 
integer;
begin
  qryUso.Close;
  qryUso.DataSet.CommandText := 'select gen_id('+Generator+',1) from 
rdb$DATABASE';
  qryUso.Open;
  result := qryUso.Fields.Fields[0].AsInteger;
  qryUso.Close; 
end;

procedure Dec_Gen(Generator: String);
begin
  qryUso.Close;
  qryUso.DataSet.CommandText := 'select gen_id('+Generator+',-1) from 
rdb$DATABASE';
  qryUso.Open;
  qryUso.Close;
end;

Link para o comentário
Compartilhar em outros sites

  • 0

Jonas obrigado pela atenção.

Cara eu não entendi muito bem o que você postol ( não entendo sql)

1º onde entra o campo que eu desejo incrementar ? (o que eu presciso e incrementar sempre o ultimo lançamento da tabela)

2º Edit1.text := intTOstr(Inc_gen(‘Generator_desejada’)) que generator é este ?

Abraço

Valdecir ;)

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Jonas --
Jonas obrigado pela atenção.

Cara eu não entendi muito bem o que você postol ( não entendo sql)

1º onde entra o campo que eu desejo incrementar ? (o que eu presciso e incrementar sempre o ultimo lançamento da tabela)

2º Edit1.text := intTOstr(Inc_gen(‘Generator_desejada’)) que generator é este ?

Abraço

Valdecir ;)

Generator é seu campo autoincremento, voce tem que adaptar ao seu codigo

ex: Edit1.text := intTOstr(Inc_gen('ID')) ;

Contr_RIM := Contr_RIM + 1;

deu pra entender ?

Link para o comentário
Compartilhar em outros sites

  • 0
Vou dar um exemplo do que presciso

Exemplo Tabela CadRIM

ID-- Data---------Contr_RIM

1--- 01/08/2007--- 5

2--- 06/08/2007--- 6

3--- 01/09/2007--- 7

4--- 01/11/2007--- 8

5--- 15/12/2007--- 9

6--- 10/01/2008--- 1

Próximo Lançamento em 15/01/08 seria no Max do ID que é 6, e acrescentar mais 1 no Contr_RIM que é 1.

Ficaria assim

7 15/01/2008 2

ID Campo Auto Incrementado

Tem como sempre no max do campo ID eu acrescentar mais 1 no campo Contr_RIM.

VDLR, parece-me que você quer que ID seja incrementado sequencialmente (sempre pelo MAX+1) para todos os registros da sua tabela. Já para Contr_RIM, parece-me que você deseja incrementá-lo sequencialmente (sempre pelo MAX+1), mas apenas para os registros dentro de um determinado ano, ou seja, a cada ano a contagem reinicia. Certo?!

Cara eu não entendi muito bem o que você postol ( não entendo sql)

1º onde entra o campo que eu desejo incrementar ? (o que eu presciso e incrementar sempre o ultimo lançamento da tabela)

2º Edit1.text := intTOstr(Inc_gen(‘Generator_desejada’)) que generator é este ?

VDLR, pelos seus questionamentos dá para perceber que você não está utilizando Interbase ou Firebird.

Como sempre insisto em mencionar, em dúvidas com BD, é conveniente mencionar: Banco de dados e componente utilizados!!!

Pelo exemplo, o Jonas tentou exemplificar o tal gerador, utilizando um banco Interbase ou Firebird (já que usa rdb$DATABASE) e componentes da paleta DataAcces (DatasetProvider +ClientDataset, pelo que sugere qryUso.DataSet.CommandText)

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
VDLR, parece-me que você quer que ID seja incrementado sequencialmente (sempre pelo MAX+1) para todos os registros da sua tabela. Já para Contr_RIM, parece-me que você deseja incrementá-lo sequencialmente (sempre pelo MAX+1), mas apenas para os registros dentro de um determinado ano, ou seja, a cada ano a contagem reinicia. Certo?!

É isso ai Micheus o ID sequencialmente e o Contr_RIM a cada ano a contagem reinicia e vai adicionando mais 1.

Tem como ??

Estou usando o BD MySql com DBexpress e ClientDataset

Abraço

Valdecir

Link para o comentário
Compartilhar em outros sites

  • 0
VDLR, parece-me que você quer que ID seja incrementado sequencialmente (sempre pelo MAX+1) para todos os registros da sua tabela. Já para Contr_RIM, parece-me que você deseja incrementá-lo sequencialmente (sempre pelo MAX+1), mas apenas para os registros dentro de um determinado ano, ou seja, a cada ano a contagem reinicia. Certo?!

É isso ai Micheus o ID sequencialmente e o Contr_RIM a cada ano a contagem reinicia e vai adicionando mais 1.

Tem como ??

Estou usando o BD MySql com DBexpress e ClientDataset

estou meio apressado, indo embora, então deixo só as consultas SQL. É só colocar nos devidos componentes para executar:

select MAX(ID) ID

from CadRIM

Esta é direta, é só dá um open e pegar o resultado +1

select MAX(Contr_RIM) Contr_RIM

from CadRIM

where extract(year from data) = :ANO

Nesta é necessário passar como parâmetro o Ano

Acho que você consegue montar o resto.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Poxa Micheus desculpe, mas não consegui.

Tenho esta função que faz parte do que você me passou. (pelo menos penso que sim....)

function TFRCadRim.GetNewFieldCod(TableName, FieldName :string) :LongInt;
begin
  DMdados.SQLDataSetMax.CommandType := ctQuery;
  DMdados.SQLDataSetMax.CommandText := 'SELECT (MAX('+FieldName+')) AS '+FieldName+' FROM '+TableName;
  DMdados.SQLDataSetMax.Open;
  Result := DMdados.SQLDataSetMax.FieldByName(FieldName).AsInteger +1;
  DMdados.SQLDataSetMax.Close;
end;

Mas não consegui colocar esta condição

where extract(year from data) = :ANO

Tem como você me ajudar

Abraço

Valdecir

Link para o comentário
Compartilhar em outros sites

  • 0
Poxa Micheus desculpe, mas não consegui.

Tenho esta função que faz parte do que você me passou. (pelo menos penso que sim....)

function TFRCadRim.GetNewFieldCod(TableName, FieldName :string) :LongInt;
begin
  DMdados.SQLDataSetMax.CommandType := ctQuery;
  DMdados.SQLDataSetMax.CommandText := 'SELECT (MAX('+FieldName+')) AS '+FieldName+' FROM '+TableName;
  DMdados.SQLDataSetMax.Open;
  Result := DMdados.SQLDataSetMax.FieldByName(FieldName).AsInteger +1;
  DMdados.SQLDataSetMax.Close;
end;
é, faz um tempinho, e já tem um upgrade:
function TFRCadRim.GetNewFieldCod(TableName, FieldName :string; WhereOption :string = '') :LongInt;
begin
  DMdados.SQLDataSetMax.CommandType := ctQuery;
  DMdados.SQLDataSetMax.CommandText := 'SELECT (MAX('+FieldName+')) AS '+FieldName+' FROM '+TableName;
  if WhereOption <> '' then
      DMdados.SQLDataSetMax.CommandText :=   DMdados.SQLDataSetMax.CommandText +' WHERE ' +WhereOption;
  DMdados.SQLDataSetMax.Open;
  Result := DMdados.SQLDataSetMax.FieldByName(FieldName).AsInteger +1;
  DMdados.SQLDataSetMax.Close;
end;
e já adaptei aqui para o seu código. Daí para obter o MAX de ID, chame ela assim:
GetNewFieldCod('CadRIM', 'ID');
para o MAX de Contr_RIM, chame ela assim:
GetNewFieldCod('CadRIM', 'ID', Format('extract(year from data) = %d', [YearOf(Date)]));

- a função YearOf está declarada na unit DateUtils; (Delphi 7)

- a função Format está declarada na unit SysUtils;

Veja se agora vai...

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...