none
Erro ao importar dados de DBF para FB RRS feed

  • Pergunta

  • pessoal como vai?

    não tenho muita experiência em c#, mas me foi passada uma tarefa, a qual estou penando para concluir..

    seguinte: preciso importar algumas tabelas do dbf para o firebird, para que possam ser lidas por um sistema em php. nas tabelas com menos de 10 mil registros, blz... roda perfeito
    nas que tem mais, dá um erro sempre no registro 16379 e dá a mensagem object reference not set to an instance of an object.

    alguém já passou por isso ou que possa me dar uma luz para resolver... to com prazo pra isso e meu chefe tá como urubu em carniça no meu pescoço

    algumas características, o banco fica em um servidor linux rodando em modo texto com firebird 1.5

    desde já agradeço

    Eagle Flight

    código utilizado

                    ConexaoFB = ConexaoTrabalhadaFB.Conectar();
                    arquivolog.Write("Recuperando Registros de sav_vdi: ");
                    Indicador = "Atualizando sav_vdi";
                    TratarDados TD = new TratarDados();
                    String vdival, vdiqtde, vdipreco, vdisequen;

                    TratarProgresso("Zerar", regsavvdi);

                    NomeTabela = "SAV_VDI";
                    try
                    {
                        siad_vdi_mao.BringToFront();
                        Application.DoEvents();
                        OleDbTransaction DBFTran = Conexao.BeginTransaction();
                        tblsavvdi = new OleDbCommand("select VDI_CUPOM, VDI_PROD, VDI_QTDE, VDI_VALOR, VDI_LOTE, VDI_VALID, VDI_SEQUEN from " + NomeTabela + " WHERE VDI_DTTRAN is NULL", Conexao, DBFTran);
                        OleDbDataReader rsavvdi = tblsavvdi.ExecuteReader();
                        arquivolog.Write("Importando Registros de sav_vdi: ");
                        while (rsavvdi.Read())
                        {
                            vdival = TD.TratarDatas(rsavvdi.GetValue(5).ToString().Trim());
                            vdiqtde = TD.TratarDouble(rsavvdi.GetValue(2).ToString().Trim());
                            vdipreco = TD.TratarDouble(rsavvdi.GetValue(3).ToString().Trim());
                            vdisequen = TD.TratarDouble(rsavvdi.GetValue(6).ToString().Trim());

                            if (vdisequen == "")
                            {
                                vdisequen = "0";
                            }

                            InstrucaoFBIns = "INSERT INTO SIAD_VDI(CUPOM, CODPRO, QTDE, VALOR, LOTE, VALIDADE, VDI_SEQUEN) VALUES(" + rsavvdi.GetValue(0).ToString().Trim() + ", " + rsavvdi.GetValue(1).ToString().Trim() + ", " + vdiqtde + ", " + vdipreco + ", '" + rsavvdi.GetValue(4).ToString().Trim() + "', '" + vdival + "'," + vdisequen + ")";
                            ExecutarQueryFB(InstrucaoFBIns);

                            TratarProgresso("Incrementar", 0);
                            ++registrosprocessados;
                        }
                        AtualizarPendentes(NomeTabela, "VDI_DTTRAN", DataConvertida);

                        rsavvdi.Close();
                        siad_vdi_check.BringToFront();
                        arquivolog.WriteLine(Convert.ToString(regsavvdi).Trim());
                        Application.DoEvents();
                    }
                    catch (Exception erro)
                    {
                        arquivolog.WriteLine("Erro -> " + erro.Message);
                        MessageBox.Show("Erro ao importar a tabela " + NomeTabela + ". Erro: " + erro.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    finally
                    {
                        ConexaoFB.Close();
                    }

    sexta-feira, 19 de dezembro de 2008 11:55

Todas as Respostas

  • Sr Eagle não tenho muita experiencia em Firebird, porém o que está aparecendo é que há algum tipo de dados incorreto na linha informada, você já tentou migrar este DBF para SQL por exemplo.

    Outro opção é verificar a linha no DBF e excluir este registro para ver se o mesmo da continuidade.

    Verifique se há espaço para crescimento do seu Banco de dados com numeros em exessos de registro, pois o cresccimento da base de dados nestes momento deve ser imensa.

     

     

    SDS.

    segunda-feira, 22 de dezembro de 2008 17:43