Как сохранить порядок столбцов в таблице .dbf, созданной в C #? - PullRequest
0 голосов
/ 24 июня 2010

Я пытаюсь создать таблицу .dbf с помощью Visual C #, потому что она мне нужна для импорта данных в другое приложение.Для этого мне нужно, чтобы порядок столбцов был правильным, иначе приложение не примет таблицу.До сих пор все работало нормально, но недавно мне пришлось внести некоторые изменения в структуру таблицы, и я добавил столбцы в точном положении в операторе CREATE.Проблема, которую я получаю, заключается в том, что когда я открываю таблицу после создания в Visual Fox Pro, новые столбцы располагаются в конце таблицы, а не там, где я их помещаю.

Мой код выглядит следующим образом:

#region create dbf file
        //create the file again
        string strCreate = "CREATE TABLE " + strExportPath + "\\"+fisier+" " + 
            "(TIPD Numeric(1), "+
            " LN Numeric(2), " +
            " AN Numeric(4), "+
            " DEN_ANG Char(50), " +
            " CUI Char(13), " +
            " NR_CRT Numeric(6), "+
            " TIP_RECTIF Char(1), " +
            " NUME_ASIG Char(50), " +
            " CNP Char(13), "+
            " CNP_COPIL Char(13), "+
            " CAS_ASIG Char(2), "+
            " ZI_LUCRAT Numeric(2), "+
            " TOT_ZI_LUC Numeric(2), "+
            " SERIE_CCM Char(5), "+
            " NUMAR_CCM Char(10), "+
            " SERIE_CCM_ Char(5), "+
            " NUMAR_CCM_ Char(10), "+
            " DATA_ACORD DATE, " +
            " COD_INDEMN Char(2), " +
            " ZI_PRE_ANG Numeric(1), "+
            " ZI_FN Numeric(2), " +
            " ZI_PRE Numeric(2), "+
            " LOC_PRES Numeric(2), "+
            " SUM_ANG Numeric(18), "+
            " FN Numeric(18), " +
            " DATA_INC DATE, "+
            " DATA_SF DATE, "+
            " COD_URG Char(3), " +
            " COD_CONTAG Char(2), "+
            " BAZA_CALC Numeric(6), "+
            " ZI_BZ_CALC Numeric(3), "+
            " MZBCI Numeric(8,4), "+
            " ME_NR CHAR(10))";



        OleDbConnection con = new OleDbConnection(strConn);
        try 
        {
            con.Open();
        }
        catch //(Exception ex)
        {
            NMsgBox("Err", "", "Renunta");
            return;
        }

        OleDbCommand createCmd = new OleDbCommand(strCreate, con);
        try
        {
            createCmd.ExecuteNonQuery();
        }
        catch //(Exception ex)
        {
            NMsgBox("Err "+fisier, "", Renunta");
            return;
        }
        con.Close();

Столбцы, такие как CNP_COPIL, DATA_ACORD и LOC_PRES, являются частью нового столбца и всегда ставятся последними, даже если я выполняю команду CREATE COMMAND в Visual Fox Pro

. Я также могу упомянуть, что яСОЗДАТЬ пустую таблицу каждый раз и заполнять ее данными, я не делаю изменения таблицы, потому что мне это не нужно.Каждый месяц появляется новая таблица.

И я не понимаю, почему она ставит «новые столбцы» в последнюю очередь, даже если таблица новая, и я удалил все предыдущие из этой папки

Ответы [ 2 ]

1 голос
/ 24 июня 2010

Конечно, не имеет смысла, что столбцы будут переупорядочены, когда таблица будет новой.И то, что порядок выглядит правильным, когда вы смотрите на структуру таблицы.

Есть только одно хорошее объяснение: любая программа, которую вы используете для просмотра таблицы, запомнила порядок столбцов из предыдущего запуска.И ставит новые столбцы в конце.Это было бы очень распространенной и желательной функцией, позволяющей пользователю возвращаться к виду таблицы так же, как это было в последний раз, когда она смотрела на нее.Данные макета должны храниться в личных данных программы, формат файла .dbf не может их сохранить.

Это просто артефакт дисплея, он никак не может повлиять на правильную работу.

0 голосов
/ 01 августа 2010

Вы можете изменить порядок столбцов таблицы Foxpro в среде разработки Foxpro.

USE table EXCLUSIVE
MODIFY STRUCTURE

Нажмите на кнопку слева от поля и перетащите ее вверх или вниз туда, где вам нужно.

РЕДАКТИРОВАТЬ: После прочтения комментария о его работе на компьютере вашего босса кажется, что проблема в том, что foxuser.dbf запоминает порядок столбцов, который вы просматривали в последний раз - поскольку столбцов там не было в последний раз он просто показывает их в конце, хотя они действительно в середине.

Какую команду вы используете для просмотра таблицы на вашем компьютере?

...