我正在尝试使用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 Fox Pro中执行CREATE COMMAND
我还可以提一下,我每次创建一个空表并用数据填充它,我不做alter table,因为我不需要。每个月都有一张新桌子。
而且我似乎不明白为什么它会将“新列”放在最后,即使该表是新表并且我已从该位置删除了每一个
答案 0 :(得分:1)
当桌子是全新的时候,当然没有意义重新排序列。当你查看表结构时,顺序看起来是正确的。
只有一个很好的解释:无论你使用什么程序看表,都记住了上次运行的列顺序。并将新列放在最后。这将是一个非常普遍和令人向往的功能,允许用户像上次看到它一样取回桌子的视图。布局数据必须存储在程序的私有数据中,.dbf文件格式不能存储它。
这只是一个显示工件,它不会以任何方式影响正常操作。
答案 1 :(得分:0)
您可以在Foxpro IDE中更改Foxpro表的列顺序。
USE table EXCLUSIVE
MODIFY STRUCTURE
单击该字段左侧的按钮,然后将其向上或向下拖动到您需要的位置。
编辑:在读完关于它在你老板电脑上工作的评论之后,听起来问题是foxuser.dbf正在记住你上次浏览的列顺序 - 因为列不是最后一次它只是在最后显示它们虽然它们真的在中间。
您使用什么确切的命令查看计算机上的表格?