Number is out of range. que erro é esse ? ?
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....
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
Curtidas 0
Respostas
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
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
25/12/2008
Acredito que não, pois ele insere normalmente nas outras tabelas, so nesta que da o erro...
GOSTEI 0
Dbergkamps10
25/12/2008
Olá,
Tente trocar o insert por append. Se mesmo assim, não der certo, tente o seguinte código:
Att
Dalton
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_
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
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.
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
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.
.
.
.
dmConexao.cdsTableCriada.Insert;
dmConexao.cdsTableCriada.Append;
.
.
.
Mas continua dando o mesmo erro..
Valeu.
GOSTEI 0
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
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
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_
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!
informe a mensagem de erro para que possamos te ajudar!
GOSTEI 0
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
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.
´Number is out of Range´
Tradução
´Número está fora do intervalo´
Falo.
GOSTEI 0
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
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ó ?
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
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_
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