Como capturar valor de um campo????
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:
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.
Curtidas 0
Melhor post
Marcio.theis
22/07/2006
Vc pode fazer usando o comando Max usando uma query, tipo:
Acho que funciona, não testei...
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
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.
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.
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
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
22/07/2006
Se for o primeiro registro.... está trazendo em branco...
Por isso o erro...
vc deve fazer a seguinte consistância..
Acredito que deva funcionar...
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
22/07/2006
Se for o primeiro registro.... está trazendo em branco...
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.
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.
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.
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