Fórum Error type mismatch for field ´codigo´, expect...FMTCcdfield #374355
31/08/2009
0
erro type mismatch for field ´codigo´, expecting: integer actual: FMTCcdField
Alguem poderia me ajudar? O codigo é esse:
begin
dm.cdsfunc.Close;
dm.cdsfunc.CommandText:=´select GEN_ID(GEN_FUNCIONARIOS_ID, 1) as CODIGO FROM RDB$DATABASE´;
dm.cdsfunc.Open;
editcod.text := IntToStr(dm.cdsfunc.FieldByName(´CODIGO´).AsInteger);
end
esperam q entendam!vlw
Thiagoangra2
Curtir tópico
+ 0Posts
31/08/2009
Andcarpi
Tente ir no banco, com algum manager do seu banco, recriar o campo em integer, e ai sim, vai dar certo.
Gostei + 0
31/08/2009
Rweberich
Faz o seguinte:
begin
dm.cdsfunc.Close;
dm.cdsfunc.CommandText:=´select GEN_ID(GEN_FUNCIONARIOS_ID, 1) as CODIGO FROM RDB$DATABASE´;
dm.cdsfunc.Open;
editcod.text := (dm.cdsfunc.FieldByName(´CODIGO´).value);
end
Gostei + 0
31/08/2009
Thiagoangra2
Faz o seguinte:
begin
dm.cdsfunc.Close;
dm.cdsfunc.CommandText:=´select GEN_ID(GEN_FUNCIONARIOS_ID, 1) as CODIGO FROM RDB$DATABASE´;
dm.cdsfunc.Open;
editcod.text := (dm.cdsfunc.FieldByName(´CODIGO´).value);
end[/quote:f5a6616622]
amigao, deu certo nau! continuo dando o msm error! nau faço ideia de como resolver isso!
Gostei + 0
31/08/2009
Thiagoangra2
deu uma olhada no meu firebird(ibexpert) e o campo codigo está sim como integer! é pra mudar em algum lugar especifico? vlw
Gostei + 0
31/08/2009
Andcarpi
´select cast(GEN_ID(GEN_FUNCIONARIOS_ID, 1) as integer) as CODIGO FROM RDB$DATABASE´;
meio no chute essa solucao, mas sei lá né, achei no forum mesmo essa resposta.[/code]
Gostei + 0
31/08/2009
Thiagoangra2
´select cast(GEN_ID(GEN_FUNCIONARIOS_ID, 1) as integer) as CODIGO FROM RDB$DATABASE´;
é rapaz deu certo nau!
Gostei + 0
31/08/2009
Andcarpi
Por Rômulo Barros.
Amigo... passei por isso e "quase morri do coração" com esse problema. Isto aconteceu comigo quando eu estava migrando um sistema feito em ADO com Oracle e eu estava o covertendo para DBEXPRESS com Oracle. Finalmente, consegui resolver o problema. É o seguinte: O delphi apenas aceita valores numéricos com, no máximo, 15 posicoes: Exemplo: (183493657589087). Então, sempre que um determinado campo resultante de uma consulta retorna um valor numérico maior do que 15 posições, ocorre o erro. Para resolver, eu identifiquei o campo que trazia mais de 15 posições e resolvi com a seguinte instrução SQL: Código: SELECT SUBSTR(CAMPO,0,15)FROM TABELA O método SUBSTR é específico do Oracle. Verfique qual o método equivalente para o SGBD q vc utiliza.
Tenta ae :P
Mas bom, mais que isso, nao sei... :/
Entao, que eu nao manjo de firebird, mas pelo visto, a sua funcao ´GEN_ID()´ está retornando valores neste tipo, imaginei que o cast pudesse redefinir o tipo do campo, se vc souber alguma funcao que faca isso no firebird, tenta ae, deve resolver também.
Gostei + 0
01/09/2009
Osocram
Veja se ele esta vindo c o tipo certo.
==================================
Eu ja tive esse prob. varias vezes, pois o delphi tenta entender qual o tipo de dados, e as vezes ele muda de ideia. Se não me engano tipo numeric até não sei qtos numeros o delphi considera sendo apenas Bcd, e apartir dae ele usa o FmtBcd.
O que vc pode fazer para evitar de ficar acontecendo esse prob é mudar uma configuração no caso do SqlQuery.NumericMapping = true; o default dele é false. Mudando isso para true vai fazer com que o delphi não fique tentando adivinhar sempre o tipo dos campos.
So tem um pequeno porem se vc ja tem os campos no FieldList, todos que são bcd vai dar erro e vc vai ter que tirar todos eles da memoria e adicionar de novo.
Gostei + 0
01/09/2009
Thiagoangra2
amigo, pelo que intendi é remover os campos da query e do dataset e adiciona-los novamente certo? se for isso ja fiz! e continua do msm jeito dando o msm error! Oo
Gostei + 0
01/09/2009
Osocram
mudar isso aqui
SqlQuery.NumericMapping = true;
ativa o SqlQuery
depois puxa os fields novamente.
Gostei + 0
01/09/2009
Thiagoangra2
Poxa infelizmente nau funfo, q raio de erro deve ser esse hein!
vlw pelas dicas!
abraços
Gostei + 0
16/09/2009
Thiagoangra2
Poxa infelizmente nau funfo, q raio de erro deve ser esse hein!
vlw pelas dicas!
abraços[/quote:99be7a23ec]
depois de quebrar cabeça consegui! :wink:
vlw pela força
Gostei + 0
16/09/2009
Fabriciocolombo
Gostei + 0
17/09/2009
Thiagoangra2
procedure Tfrmcadfun.BitBtn1Click(Sender: TObject);
begin
messagebox(frmcadfun.Handle,´Deseja novo registro?´,´Atenção´, mb_YesNo+mb_iconinformation);
if messagebox(frmcadfun.handle,´Deseja novo registro?´,´Atenção´, mb_YesNo+mb_iconinformation) =(mryes) then
begin
dm.cdsfunc.Append;
editcod.Text:=inttostr(retornachave(´GEN_FUNCIONARIOS_ID´, 1));
editnome.SetFocus;
end
else
if messagebox(frmcadfun.Handle,´Deseja novo registro?´,´Atenção´, mb_YesNo+mb_iconinformation)=(mrno) then
begin
editnome.SetFocus;
end;
end;
ta aí...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)