VDLR Postado Agosto 13, 2007 Denunciar Share Postado Agosto 13, 2007 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: Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest --Jonas -- Postado Agosto 13, 2007 Denunciar Share Postado Agosto 13, 2007 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; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 VDLR Postado Agosto 13, 2007 Autor Denunciar Share Postado Agosto 13, 2007 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çoValdecir ;) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest --Jonas -- Postado Agosto 13, 2007 Denunciar Share Postado Agosto 13, 2007 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çoValdecir ;)Generator é seu campo autoincremento, voce tem que adaptar ao seu codigoex: Edit1.text := intTOstr(Inc_gen('ID')) ; Contr_RIM := Contr_RIM + 1; deu pra entender ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Agosto 13, 2007 Denunciar Share Postado Agosto 13, 2007 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 VDLR Postado Agosto 14, 2007 Autor Denunciar Share Postado Agosto 14, 2007 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 ClientDatasetAbraçoValdecir Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Agosto 14, 2007 Denunciar Share Postado Agosto 14, 2007 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 ClientDatasetestou meio apressado, indo embora, então deixo só as consultas SQL. É só colocar nos devidos componentes para executar:select MAX(ID) IDfrom CadRIMEsta é direta, é só dá um open e pegar o resultado +1select MAX(Contr_RIM) Contr_RIMfrom CadRIMwhere extract(year from data) = :ANONesta é necessário passar como parâmetro o AnoAcho que você consegue montar o resto.Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 VDLR Postado Agosto 15, 2007 Autor Denunciar Share Postado Agosto 15, 2007 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çãowhere extract(year from data) = :ANOTem como você me ajudarAbraçoValdecir Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Agosto 15, 2007 Denunciar Share Postado Agosto 15, 2007 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... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 VDLR Postado Agosto 15, 2007 Autor Denunciar Share Postado Agosto 15, 2007 Micheus muito obrigado.Funcionou, valeu mesmo cara....Abraço Valdecir :D :D :D Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
VDLR
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
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.