Dúvida com ClientDataSet
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?
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
Curtidas 0
Respostas
Marco Salles
24/07/2006
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
Para pegar o valor , faça
e na hora de salvar use o Valor Do MaxCodigo
[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]
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]
GOSTEI 0
Fabiano_aprendiz
24/07/2006
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?
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?
GOSTEI 0
Fabiano_aprendiz
24/07/2006
Só uma observação, eu fechei e abri como vc disse o ClientDataSet, mas mesmo assim, o erro já citado ocorre...
GOSTEI 0
Martins
24/07/2006
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!!!
GOSTEI 0
Fabiano_aprendiz
24/07/2006
Naum....
É um campo que foi criado, seguindo passo a passo todas as orientações do Marco.
É um campo que foi criado, seguindo passo a passo todas as orientações do Marco.
GOSTEI 0
Marco Salles
24/07/2006
[b:6fea51a4e8]citação de martins[/b:6fea51a4e8]
Fabiano_Aprendiz , aqui eu apenas copiei algo que ja tinha respondido em outro tópico e coloquei aqui..
vamos recapitular
Para pegar o valor , faça
[b]NomeDoNovoCampo que voce criou ao dar o Duplo Click etc...[/b:6fea51a4e8]
Código:
e na hora de salvar
e na hora de salvar use o Valor Do MaxCodigo
Código:
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]
Depois de tudo dando certo faça este teste...
E por fim , não se assuste e muito fácil e prático...
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...
GOSTEI 0
Fabiano_aprendiz
24/07/2006
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.
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.
GOSTEI 0
Marco Salles
24/07/2006
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.
GOSTEI 0