Fórum Problemas com campo Numeric no fb 1.5 e delphi 6 #50149
30/03/2005
0
Estou com um problema que já esta me esgotando, tenho em uma tabela um campo denominado EMPDES com a seguinte definição
[b:34c35bb66b]Numeric 6,2[/b:34c35bb66b], para armazer valores em percentuais.
Porem quando estou em meu aplicativo, e abro a Tabela em questão me é retornado o seguinte erro:
[b:34c35bb66b]
Project Pharma.exe raised exception class EDataBaseError with message
´SqlEmpresa: Campo EMPDES não é do tipo esperado, esperando:BCD atual FmtBcdField.[/b:34c35bb66b]
Já tirei o field, o componente, e nada.. o engraçado é que vou no FieldsEditor do SQLDataSet ou no ClientDataSet e o campo esta como BCDField.
Alguém poderia me ajudar? Estou utilizando Delphi 6, Firebird 1.5 acessado via DBExpress.
Fausto[/b]
Faustoalves
Curtir tópico
+ 0Posts
30/03/2005
Afarias
T+
Gostei + 0
30/03/2005
Faustoalves
Esta com dialeto 3, e também com o mesmo charset tanto no banco quanto no componente de conexão
Gostei + 0
30/03/2005
Afarias
T+
Gostei + 0
30/03/2005
Faustoalves
[b:2f74a9d5f5]Esta com dialeto 3,[/b:2f74a9d5f5] [color=red:2f74a9d5f5][b:2f74a9d5f5] E[/b:2f74a9d5f5][/color:2f74a9d5f5] também com o mesmo charset tanto no banco quanto no componente de conexão
Eu quiz dizer em um frase só, que esta com ambos, eu sei que o charset não influência em campos numéricos apenas comentei para evitar os famosos chutes.
Fausto
ps: o engraçado é qdo mudo o campo para Decimal(6,2) funciona..
Gostei + 0
30/03/2005
Gandalf.nho
Gostei + 0
31/03/2005
Faustoalves
Fausto
Gostei + 0
14/04/2005
Pmst
Fausto isso também aconteceu comigo, me parace que o driver do dbx para interbase (rodando para firebird) não consegue reconhecer corretamente o tipo do dado.
para resolver alterer de numeric(6,2) para numeric(10,2).
na aplicação sempre que você for referincia o campo
campo.ascurrency := varmem
varmem := campo.ascurrency
se você tentar usar : value, asfloat, asdouble, asbcd vai dar erro
que esta por exemplo float e esta esperando tfmtbcd.
resolvi dessa forma, espero que ajude
[]´s
Paulo.
Gostei + 0
15/04/2005
Faustoalves
Fausto isso também aconteceu comigo, me parace que o driver do dbx para interbase (rodando para firebird) não consegue reconhecer corretamente o tipo do dado. para resolver alterer de numeric(6,2) para numeric(10,2). na aplicação sempre que você for referincia o campo campo.ascurrency := varmem varmem := campo.ascurrency se você tentar usar : value, asfloat, asdouble, asbcd vai dar erro que esta por exemplo float e esta esperando tfmtbcd. resolvi dessa forma, espero que ajude []´s Paulo.
Paulo, antes de tudo obrigado pela atenção, eu resolvi este problema criando o campo com Decimal(6,2), mas supondo que eu resolva adorar a solução proposta por vc, como eu faria para limitar a digitação em 999.99, ou seja 3 digitos com duas casas decimais?
Mais uma pergunta, esta foge um pouco do tópico que estamos discutindo, estou migrando do Paradox para o FB, e estou tendo um trabalho massante para desenvolver as telas de pesquisa, como vc faz este procedimento? vc tem uma pesquisa para cada tabela ? ex:
Tabela fornecedores: No contas a pagar eu necessito do código do mesmo, então estou criando um form para pesquisar o fornecedor e devolver o código, o mesmo estou fazendo para as tabelas de clientes, vendedores, produtos.. etc.. vc também faz desta forma?
Desde já agradeço a atenção
Fausto
Gostei + 0
15/04/2005
Pmst
Fausto isso também aconteceu comigo, me parace que o driver do dbx para interbase (rodando para firebird) não consegue reconhecer corretamente o tipo do dado. para resolver alterer de numeric(6,2) para numeric(10,2). na aplicação sempre que você for referincia o campo campo.ascurrency := varmem varmem := campo.ascurrency se você tentar usar : value, asfloat, asdouble, asbcd vai dar erro que esta por exemplo float e esta esperando tfmtbcd. resolvi dessa forma, espero que ajude []´s Paulo.
Fausto, para limitar a digitação faça o seguinte, para campos do tipo tedit
use maskedit, e no campo editmask coloque a mascara #.00
na 2a. questão, para cadastros eu tenho um unico form com um dbgrid e um edit.
trabalho sempre com o [u:0e2d941dab]trio[/u:0e2d941dab] (sqlquery+datasetprovider+clientdataset).
onde :
AUXILIAR = SQLQuery
dspAUXILIAR = DataSetProvider
cdsAUXILIAR = ClientDataSet
dsAUXILIAR = DataSource
var
Campo : TField;
PCODFOR : Integer;
with DM do
begin
AUXILIAR.Fields.Clear;
AUXILIAR.FieldDefs.Clear;
Campos := TStringField.Create(Self);
Campos.FieldName := ´NOMFOR´;
Campos.Name := AUXILIAR.Name+Campos.FieldName;
Campos.DisplayLabel := ´NOMFOR´;
Campos.DisplayWidth := 40;
Campos.FieldKind := fkdata;
Campos.Size := 40;
Campos.DataSet := AUXILIAR;
Campos := TIntegerField.Create(Self);
Campos.FieldName := ´CODFOR´;
Campos.Name := AUXILIAR.Name+Campos.FieldName;
Campos.DisplayLabel := ´CODFOR´;
Campos.DisplayWidth := 10;
Campos.FieldKind := fkdata;
Campos.DataSet := AUXILIAR;
cdsAUXILIAR.Active := False
with AUXILIAR do
begin
Close;
SQL.Clear;
SQL.Add(´Select NOMFOR,CODFOR with TABELA Order by NOMFOR´);
Open;
end;
cdsAUXILIAR.Active := True;
if cdsAUXILIAR.RecordCount > 0 Then
begin
Try
F_MOSTRATAB := TF_MOSTRATAB.Create(Application);
F_MOSTRATAB.ShowModal;
NOMFORx.Text := DataModulo.cdsAUXILIAR[´NOMFOR´];
PCODFOR := DataModulo.cdsAUXILIAR[´CODFOR´]
AUXILIAR.Close;
Finally
F_MOSTRATAB.Release;
F_MOSTRATAB := Nil;
end;
end;
AUXILIAR.Fields.Clear;
AUXILIAR.FieldDefs.Clear;
end;
no form MOSTRATAB, o grid está ligado ao dsAUXILIAR, quando dá um duplo click fecho o form e mostro o resultado num edit (NOMFORx.Text) e guardo o cod. do fornecedor em PCODFOR
para consultas propriamente ditas, uma para cada, usuando sempre que possivel o [u:0e2d941dab]trio[/u:0e2d941dab] (sqlquery+datasetprovider+clientdataset).
espero que ajude,
[ ]´s
Paulo.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)