1

別のアプリケーションにデータをインポートするために必要なため、Visual C#を使用して.dbfテーブルを作成しようとしています。そのためには、列の順序が正確である必要があります。そうでない場合、アプリケーションはテーブルを受け入れません。これまでは正常に機能していましたが、最近、テーブルの構造にいくつかの変更を加える必要があり、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などの列は新しい列の一部であり、Visual FoxProでCREATECOMMANDを実行した場合でも、常に最後に配置されます。

また、毎回空のテーブルを作成してデータを入力することもできます。テーブルを変更する必要がないため、変更は行いません。毎月新しいテーブルがあります。

そして、テーブルが新しいものであり、その場所から以前のすべての列を削除したとしても、なぜ「新しい列」が最後に配置されるのかわからないようです。

4

2 に答える 2

2

もちろん、テーブルが真新しいときに列が並べ替えられることは意味がありません。また、テーブル構造を見ると、順序が正しいように見えます。

良い説明は1つだけです。テーブルを表示するために使用しているプログラムはすべて、前回の実行からの列の順序を記憶しています。そして、新しい列を最後に配置します。これは非常に一般的で望ましい機能であり、ユーザーはテーブルを最後に見たときと同じようにテーブルのビューを取り戻すことができます。レイアウトデータはプログラムのプライベートデータに保存する必要があり、.dbfファイル形式では保存できません。

これは単なる表示アーティファクトであり、適切な動作に影響を与えることはありません。

于 2010-06-24T11:33:30.687 に答える
0

FoxproIDE内でFoxproテーブルの列の順序を変更できます。

USE table EXCLUSIVE
MODIFY STRUCTURE

フィールドの左側にあるボタンをクリックして、必要な場所まで上下にドラッグします。

編集: 上司のコンピューターで動作していることについてのコメントを読んだ後、問題はfoxuser.dbfが最後に参照した列の順序を記憶していることのようです-最後に列が表示されたときに列がなかったため、彼らは本当に真ん中にありますが、終わります。

コンピューターのテーブルを確認するために使用している正確なコマンドは何ですか?

于 2010-08-01T15:46:20.187 に答える