Como capturar valor de um campo????

Delphi

22/07/2006

Boas ! :lol:
Deixa ver se consigo me expressar!
Eu tenho uma tabela com o campo cod_cliente,certo.
Eu gostaria de pegar o ultimo valor deste campo colocar em uma variavel, somar 1 e adicionar no novo registro, tipo um campo autoincremento.
A tabela e TabClientes, utilizo ClienteDataSet, SQLDataSet, DataSetProvider e DataSet.
Antes com paradox era:
ModuloDados.TabClientes.FieldValue......., ou coisa parecida.
Agora não sei como fazer!
Muito obrigado por qualquer dica :lol:


Marcelo_j.

Marcelo_j.

Curtidas 0

Melhor post

Marcio.theis

Marcio.theis

22/07/2006

Vc pode fazer usando o comando Max usando uma query, tipo:
var
    prox: integer;
begin
prox:=0;
qry.Close;
qry.SQL.Clear;
qry.SQL.Add(´select Max(cod_cliente) Codigo´);
qry.SQL.Add(´from cliente´);
qry.Open;
if not qry.IsEmpty then
    prox:=qryCOD_CLIENTE.Value;
Inc(prox);
qry.Close;
tblCliente.Insert;
tblClienteCOD_CLIENTE.Value:=prox;


Acho que funciona, não testei...


GOSTEI 1

Mais Respostas

Marco Salles

Marco Salles

22/07/2006

Acho que funciona, não testei...


funcionar pode ate funcionar , porque ja é um codigo bem conhecido. Mas veja que o amigo ja usa a tecnologia mIDAS.

utilizo ClienteDataSet, SQLDataSet, DataSetProvider e DataSet.


O ´MAIS MENOS´ Recomendável para o caso é usar os campos Agregados do Proprio ClientDataSet.

Eu digo ´MAIS MENOS´ , e explico

MAIS de usar o campo agregados x uma requisão ao servidor (consulta sql)... Usar campo agregados voce não sobrecarrega nada e mais rapido emfimmmm

MENOS , porque isto so ira funcionar em aplicaçoes Loces o que é desanconselhavel para aplicaçoes Cliente Servidor..

Criar um campo Agregado e fãicl e rápido

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;


[b:b704734432]Para pegar o valor , faça[/b:b704734432]

Var
MaxCodigo;Integer;
Begin
MaxCodigo:=ClientDataset1NomeDoNovoCampo.AsInteger;



GOSTEI 0
Marcelo_j.

Marcelo_j.

22/07/2006

Ola colegas!

Eu fiz exatamente como o colega falou.
Criei o campo agregado, e no evento do botão inserir coloquei o seguinte codigo:
Var
somar:Integer;
begin
Somar:=Buscar_Dados.CDSClienteCalculado.AsInteger;
Somar:=Somar+1;
Buscar_Dados.CDSClienteCOD_CLIENTES.AsInteger:=Somar;
Buscar_Dados.CDSCliente.ApplyUpdates(-1);
end;

Ai me da a menssagem de erro:

Project ... raised exception class EDatabaseError with message ´Cannot acces field Calculado as type Integer´.Process stopped. UseStep or Rum to continue.


GOSTEI 0
Marco Salles

Marco Salles

22/07/2006

Project ... raised exception class EDatabaseError with message ´Cannot acces field Calculado as type Integer´.Process stopped. UseStep or Rum to continue.


bem , eu não sei se esta faltando algum detalhe na configuração desse campo.. Estou sem o delphi aqui para testar....

[b:4d6ec5709b]Se alguem souber aonde esta o possivel erro por favor que se manifeste[/b:4d6ec5709b].

Porem voce pode fazer o seguinte :

Criei o campo agregado, e no evento do botão inserir coloquei o seguinte codigo:
Var 
somar:Integer; 
begin
if TryStrToInt(Buscar_Dados.CDSClienteCalculado.AsString,Somar) then
  Somar:=strtoint(Buscar_Dados.CDSClienteCalculado.AsString)+1
else
 Somar:=1;
Buscar_Dados.CDSCliente.Append; 
Buscar_Dados.CDSClienteCOD_CLIENTES.AsInteger:=Somar; 
end; 


Que certamente irá funcionar.....

[b:4d6ec5709b]Outro detalhe importante .... No Cds Existe a opção da criação de um Campo Calculado [/b:4d6ec5709b]

[b:4d6ec5709b]Post aqui os resultados [/b:4d6ec5709b], igual voce fez agora , pq eu mesmo assim que der vou testar sua ´experiencia´ , ja que esto ´resabiada´ com ela...


GOSTEI 0
Cabelo

Cabelo

22/07/2006

Se for o primeiro registro.... está trazendo em branco...

Por isso o erro...

vc deve fazer a seguinte consistância..

if Trim(Buscar_Dados.CDSClienteCalculado.AsString) = ´´ then
begin
Somar := 1;
end
else
begin
Inc(Somar);
end;


Acredito que deva funcionar...


GOSTEI 0
Marco Salles

Marco Salles

22/07/2006

Se for o primeiro registro.... está trazendo em branco...

Por isso o erro... vc deve fazer a seguinte consistância.. Código: if Trim(Buscar_Dados.CDSClienteCalculado.AsString) = ´´ then begin Somar := 1; end else begin Inc(Somar); end;


Cabelo , o problema aqui não é só isso. [b:791092570c]No inicio pensei que fosse.[/b:791092570c]

O problema aqui é que [b:791092570c]Buscar_Dados.CDSClienteCalculado.AsInteger [/b:791092570c], retorna um tipo inválido....Eu não sei porque ???? :?: :?: :?:

Resolver o problema ja esta resolvido , usando o
[b:791092570c]Buscar_Dados.CDSClienteCalculado.AsString[/b:791092570c] no Lugar e fazendo as devidas conversões.

Mas pq que Buscar_Dados.CDSClienteCalculado.AsInteger retorna erro , ja é outro problema... :?: :?: :?:


Var 
somar:Integer; 
begin 
if TryStrToInt(Buscar_Dados.CDSClienteCalculado.AsString,Somar) then 
  Somar:=strtoint(Buscar_Dados.CDSClienteCalculado.AsString)+1 
else 
 Somar:=1; 
Buscar_Dados.CDSCliente.Append; 
Buscar_Dados.CDSClienteCOD_CLIENTES.AsInteger:=Somar; 
end; 



GOSTEI 0
Marcelo_j.

Marcelo_j.

22/07/2006

Colegas não estou conseguindo.
Eu estudo Delphi atravez de livros, e uso este Site para tirar duvidas.
Eu vou torrar os meus neuronios com os livros aqui para descobrir o erro, e se eu conseguir eu retorno.
Obrigado pela Atenção, ate mais.


GOSTEI 0
POSTAR