Number is out of range. que erro é esse ? ?

Delphi

25/12/2008

Pessoal, peguei uma base de dados do firebird para migrar para o Oracle e fiz um robozinho com o delphi, mas acontece que chega em uma determinada tabela e da esse erro, não sei o que esta acontecendo, eu percorro campo por campo e adiciono da base de destino..
Segue abaixo uma parte do código.

dmConexao.cdsTableCriada.Insert;
for i:=0 to dmConexao.cdsAuxiliar.FieldCount-1 do
begin
dmConexao.cdsTableCriada.Fields[i].Value:=dmConexao.cdsAuxiliar.Fields[i].Value;
end;
dmConexao.cdsTableCriada.Post;

Por favor me ajudem....


Onhide86

Onhide86

Curtidas 0

Respostas

Dbergkamps10

Dbergkamps10

25/12/2008

Olá,
Este erro acontece pq vc está tentando acessar um número q não existe, ou não está disponível para ser acessado. Deve ser no laço. Insira algum tipo de controle para vc ver onde realmente acontece, acredito q deva ser na última execução.

Att
Dalton


GOSTEI 0
Onhide86

Onhide86

25/12/2008

Acredito que não, pois ele insere normalmente nas outras tabelas, so nesta que da o erro...


GOSTEI 0
Dbergkamps10

Dbergkamps10

25/12/2008

Olá,
Tente trocar o insert por append. Se mesmo assim, não der certo, tente o seguinte código:
dmConexao.cdsTableAuxiliar.First;
i:=0;
while not dmConexao.cdsTableAuxiliar.Eof do 
begin
dmConexao.cdsTableCriada.Append
dmConexao.cdsTableCriada.Fields[i].Value:=dmConexao.cdsAuxiliar.Fields[i].Value;
dmConexao.cdsTableCriada.Post;
inc(i);
end;


Att
Dalton


GOSTEI 0
Pestana_

Pestana_

25/12/2008

Pessoal, peguei uma base de dados do firebird para migrar para o Oracle e fiz um robozinho com o delphi, mas acontece que chega em uma determinada tabela e da esse erro, não sei o que esta acontecendo, eu percorro campo por campo e adiciono da base de destino.. Segue abaixo uma parte do código. dmConexao.cdsTableCriada.Insert; for i:=0 to dmConexao.cdsAuxiliar.FieldCount-1 do begin dmConexao.cdsTableCriada.Fields[i].Value:=dmConexao.cdsAuxiliar.Fields[i].Value; end; dmConexao.cdsTableCriada.Post; Por favor me ajudem....


Este campo tem o mesmo tipo de dados do campo da tabela antiga?


GOSTEI 0
Builder

Builder

25/12/2008

Pelo que entendi, há um erro na lógica do programa:

dmConexao.cdsTableAuxiliar.First;
i:=0;
while not dmConexao.cdsTableAuxiliar.Eof do
begin
dmConexao.cdsTableCriada.Append
dmConexao.cdsTableCriada.Fields[i].Value:=dmConexao.cdsAuxiliar.Fields[i].Value;
dmConexao.cdsTableCriada.Post;
inc(i);
end;

O contador i esta sendo usado para referênciar os campos (campo 1, campo 2, campo 3, etc.) e no entanto seu incremento está associado ao número de registros.

i_campos:=dmConexao.cdsTableAuxiliar.FieldCount-1;
dmConexao.cdsTableAuxiliar.First;
i:=0;
while not dmConexao.cdsTableAuxiliar.Eof do
begin

dmConexao.cdsTableCriada.Append

for i:=0 to i_campos do
dmConexao.cdsTableCriada.Fields[i].Value:=dmConexao.cdsAuxiliar.Fields[i].Value;

dmConexao.cdsTableCriada.Post;

end;

Não testei, mas seria algo assim.


GOSTEI 0
Onhide86

Onhide86

25/12/2008

Respondendo a citação de: dbergkamps10, só o append da um erro que a tabela não esta preparada para inserção, então coloquei o seguinte código para teste:
.
.
.
dmConexao.cdsTableCriada.Insert;
dmConexao.cdsTableCriada.Append;
.
.
.
Mas continua dando o mesmo erro..
Valeu.


GOSTEI 0
Pestana_

Pestana_

25/12/2008

dmConexao.cdsTableCriada.Insert; dmConexao.cdsTableCriada.Append;


mas não tem sentido dar um Insert e logo em seguida um Append. Utilize um ou outro método para inserir o registro.


flw.


GOSTEI 0
Onhide86

Onhide86

25/12/2008

Respondendo a citação de Pestana:

Segue abaixo um trecho do script da tabela do Firebird:
.
CREATE TABLE PEDIDO_ITEM (
ID_EMPRESA INTEGER NOT NULL,
ID_PEDIDO INTEGER NOT NULL,
ID_MERCADORIA INTEGER NOT NULL,
QUANTIDADE_PEDIDA DECIMAL(15,2) NOT NULL,
QUANTIDADE_RESERVADA DECIMAL(15,2),
QUANTIDADE_FATURADA DECIMAL(15,2),
QUANTIDADE_SALDO DECIMAL(15,2),
VALOR DECIMAL(15,2) NOT NULL,
COMISSAO DECIMAL(3,2) NOT NULL,
VALOR_COMISSAO DECIMAL(15,2),
IPI DECIMAL(15,2) NOT NULL,
TOTAL_IPI DECIMAL(15,2) NOT NULL,
ICMS DECIMAL(15,2) NOT NULL,
TOTAL_ICMS DECIMAL(15,2) NOT NULL,
TOTAL_SEM_IPI DECIMAL(15,2) NOT NULL,
TOTAL_COM_IPI DECIMAL(15,2) NOT NULL,
PESO_ITEM DECIMAL(15,2),
PESO_TOTAL DECIMAL(15,2),
SITUACAO VARCHAR(20) NOT NULL,
ID_USUARIO INTEGER NOT NULL
);

E um trecho do script do Oracle:
.
ID_EMPRESA NUMBER NOT NULL,
ID_PEDIDO NUMBER NOT NULL,
ID_MERCADORIA NUMBER NOT NULL,
QUANTIDADE_PEDIDA NUMBER(15,2) NOT NULL,
QUANTIDADE_RESERVADA NUMBER(15,2),
QUANTIDADE_FATURADA NUMBER(15,2),
QUANTIDADE_SALDO NUMBER(15,2),
VALOR NUMBER(15,2) NOT NULL,
COMISSAO NUMBER(3,2) NOT NULL,
VALOR_COMISSAO NUMBER(15,2),
IPI NUMBER(15,2) NOT NULL,
TOTAL_IPI NUMBER(15,2) NOT NULL,
ICMS NUMBER(15,2) NOT NULL,
TOTAL_ICMS NUMBER(15,2) NOT NULL,
TOTAL_SEM_IPI NUMBER(15,2) NOT NULL,
TOTAL_COM_IPI NUMBER(15,2) NOT NULL,
PESO_ITEM (15,2),
PESO_TOTAL NUMBER(15,2),
SITUACAO VARCHAR2(20) NOT NULL,
ID_USUARIO NUMBER NOT NULL


GOSTEI 0
Pestana_

Pestana_

25/12/2008

talvez você não fez um select para retornar os campos da tabela.

informe a mensagem de erro para que possamos te ajudar!


GOSTEI 0
Onhide86

Onhide86

25/12/2008

E respondendo a citação de Builder, acredito que não haja erro de lógica de programação, pois ele insere todos os registros normalmente nas outras tabelas, só neste que seria a 34° tabela que da o erro.


GOSTEI 0
Onhide86

Onhide86

25/12/2008

A mensagem de erro é exatamente o titulo deste Post.

´Number is out of Range´

Tradução

´Número está fora do intervalo´

Falo.


GOSTEI 0
Pestana_

Pestana_

25/12/2008

estranho a estrutura me parece que esta igual, tente colocar um breakPoint nesta rotina para verificar se os valores estão sendo enviados para outra tabela e com isso você identifica qual campo que esta com problema.


GOSTEI 0
Onhide86

Onhide86

25/12/2008

Fiz o teste e coloquei o BreakPont, mas os valores que são passados são passados as respectivas colunas, e da o mesmo erro.
Fiz a soma dos registros que foram inseridos e deu exatamente 5500 registros, sera que é o limite do Oracle se inserções de uma vez só ?


GOSTEI 0
Onhide86

Onhide86

25/12/2008

Pessoal, fiz alguns testes aqui e o erro acontece em uma determinada tabela onde o campo é um DECIMAL(3,2), e o valor passado por exemplo é ´10´, mas já tentei acrescentar os 2 zeros a direita mas não resolve o meu problema, porém tento também mudando o tipo do tField, por exemplo, quando é string eu coloco ´nome do field´.Value, mas quando é float eu coloco ´nome do field´.AsFloat, tentei também .asBCD, mas esse miserável erro continua, por favor alguém me de uma luz, valeu pessoal.


GOSTEI 0
Pestana_

Pestana_

25/12/2008

Eu estava pensando que o problema estava no tamanho do campo, mas como o erro persistiu ao adicionar o valor 10 em um campo de tamanho 3,2 (DECIMAL(3,2)), então não pode ser este o problema. O que poderia gerar erro é se o valor que você esta tentando passar ultrapassase a precisão e/ou a escala do tamanho do campo, p. ex.: ao tentar adicionar o valor 1234,123. Neste caso você teria que aumentar o tamanho do campo.


GOSTEI 0
POSTAR