Fórum Dúvida com ClientDataSet #325953

24/07/2006

0

Como faço p/pegar no banco o valor do campo codigo , incrementar + 1 e depois jogar no banco novamente? Estou vindo de BDE/Paradox e lá eu fazia da seguinte forma, no botão incluir eu jogava o valor do campo numa variavel, e depois do metodo Append eu somava + 1 ao valor dessa variavel p/depois armazenar. Dessa forma aki:

Num := TTable1.FieldByName(´Cod_Cli´).AsString;
.
.
TTable1.Append;

TTable1.FieldByName(´Cod_Cli´).AsString := IntToStr(StrToInt(Num) + 1);

Só q com ClienteDataSet isso naum funciona, tem algum exemplo de como posso fazer isso?


Fabiano_aprendiz

Fabiano_aprendiz

Responder

Posts

24/07/2006

Marco Salles

tenho acompanhado de longe sua preocupação em campos auto_Incrementados

Pelo visto acho que voce ainda não consegui.

Acho porem , mais indicado voce ainda tentar fazer com que o Banco gere isto para voce , do que ficar fazendo Na mão .. Em aplicaçoes Local , não havera problema nenhum , porem o mesmo não se pode falar de aplicaçoes client-Servidor

Mas voltando ao assunto , o que voce quer tem muitas maneiras . Geralmente se faz uma consulta ao Banco . Eu particularmente acho desnecessário , visto que o ClientDataSet tem a opção de [b:7010fc4107]campo Agregados.[/b:7010fc4107]
Criar um campo Agregado e fãicl e rápido

Citação: de duplo click no ClintDataSet , esclolha o Nome do novo Campo , o Tipo , e a opção Agregate Note que aparecerá um campo separado dos demias TFileds Selecione este campo e na Propriedade Expression desse campo digite Max(cod_cliente) Coloque active em True e por fim no ClientDataset no objecto inspector na propriedade AggregatesActive para true;


Para pegar o valor , faça

Código: 
Var 
MaxCodigo;Integer; 
Begin 
MaxCodigo:=ClientDataset1NomeDoNovoCampo.AsInteger+1; 


e na hora de salvar use o Valor Do MaxCodigo


ClientDataset1Cod_Client.asinteger:=Max_Codigo;


[b:7010fc4107]Bem a unica dúvida minha , é se sera preciso antes da instrução
MaxCodigo:=ClientDataset1NomeDoNovoCampo.AsInteger+1; Fechar e abrir o ClientDataSet .[/b:7010fc4107]


Responder

Gostei + 0

24/07/2006

Fabiano_aprendiz

Olá Marco,

Segui todas as suas orientações, mas estou recebendo um erro na linha :

MaxCodigo:=DmCadCliente.cdsClienteCod.AsInteger + 1;

O erro é: Cannot access field ´Cod´ as type Integer.

O q pode está errado?


Responder

Gostei + 0

24/07/2006

Fabiano_aprendiz

Só uma observação, eu fechei e abri como vc disse o ClientDataSet, mas mesmo assim, o erro já citado ocorre...


Responder

Gostei + 0

24/07/2006

Martins

Olá Marco, Segui todas as suas orientações, mas estou recebendo um erro na linha : MaxCodigo:=DmCadCliente.cdsClienteCod.AsInteger + 1; O erro é: Cannot access field ´Cod´ as type Integer. O q pode está errado?


O Campo cod existe em sua tabela, ele é do tipo integer?

caso existe, faça o seguinte clique com o botão direito no cds e depois fields editor (acho q é isso), inclua todos os campos e depois tente novamente.

MaxCodigo:=DmCadCliente.cdsCliente.FieldByName(´Cod´).AsInteger + 1;


boa sorte!!!


Responder

Gostei + 0

24/07/2006

Fabiano_aprendiz

Naum....
É um campo que foi criado, seguindo passo a passo todas as orientações do Marco.


Responder

Gostei + 0

24/07/2006

Marco Salles

[b:6fea51a4e8]citação de martins[/b:6fea51a4e8]
O Campo cod existe em sua tabela, ele é do tipo integer?


Fabiano_Aprendiz , aqui eu apenas copiei algo que ja tinha respondido em outro tópico e coloquei aqui..

vamos recapitular

Citação: de duplo click no ClintDataSet , [b:6fea51a4e8]esclolha o Nome do novo Campo [/b:6fea51a4e8], o Tipo , e a opção Agregate Note que aparecerá um campo separado dos demias TFileds Selecione este campo e na Propriedade Expression desse campo digite Max([b:6fea51a4e8]Nome Do Seu Campo Que Voce que voce quer pegar o máximo Valor)/b] Coloque active em True e por fim no ClientDataset no objecto inspector na propriedade AggregatesActive para true;


Para pegar o valor , faça

[b]NomeDoNovoCampo que voce criou ao dar o Duplo Click etc...[/b:6fea51a4e8]

Código:
Var 
MaxCodigo;Integer; 
Begin 
MaxCodigo:=ClientDataset1NomeDoNovoCampo.AsInteger+1;  


e na hora de salvar

e na hora de salvar use o Valor Do MaxCodigo


Código:
ClientDataset1NomeDoSeuCampoAutoIncrementado.AsInteger:=MaxCodigo


NomeDoSeuCampoAutoIncrementado = Nome Do Seu Campo Que Voce que voce quer pegar o máximo Valor


Claro que voce so vai usar isto se NomeDoSeuCampoAutoIncrementado , estiver no Tfields. Caso contrário voce tera que usar[b:6fea51a4e8] FieldByName[/b:6fea51a4e8]

ClientDataset1.FieldByName(´NomeDoSeuCampoAutoIncrementado´).AsInteger:=MaxCodigo[/code]

[b:6fea51a4e8]Abrir e fechar o Cds não tem nada a ver com Isso[/b:6fea51a4e8]


Depois de tudo dando certo faça este teste...

E por fim , não se assuste e muito fácil e prático...


Responder

Gostei + 0

24/07/2006

Fabiano_aprendiz

Marco,

Fiz e refiz tudo o q vc indicou, mas continua ocorrendo o mesmo erro na linha:
MaxCodigo:= DmCadCliente.cdsClienteCod.AsInteger + 1;

O erro é : Cannot access field ´Cod´ as type Integer.


Responder

Gostei + 0

24/07/2006

Marco Salles

Marco, Fiz e refiz tudo o q vc indicou, mas continua ocorrendo o mesmo erro na linha: MaxCodigo:= DmCadCliente.cdsClienteCod.AsInteger + 1; O erro é : Cannot access field ´Cod´ as type Integer.


é porque ainda não chegou a hora .

qual o nome do seu campo Original ???

Ele é do tipo Inteiro ???

Qual o nome que voce esta dando para o campo Agregado ???

No Tfirld do campo Agregado voce ativou Active = True ???

O resto amigo é muito fácil... Faço isto toda hora de olhos fechados . e voce tb o fará de olhos fechados , pode ter certeza disso.


Responder

Gostei + 0

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

Aceitar