Цитата:
Сообщение от
alvares
Коллеги, а есть у кого рабочий пример для создания DBF c помощью "FastDbf"
Не могу понять как работать с заголовком DBF, подскажите в чем не прав - пример создает файл нулевой длины и не отпускает его пока открыта АХ.
Спасибо.
Вот вам рабочий пример.
При работе с NET не забывайте о таких особенностях:
1. Ядро аксапты не перехватывает CLR ошибки, поэтому их нужно перехватывать в коде самому, иначе остаются "висеть" инициализированные объекты (в вашем случае захваченные файлы). Со сборкой мусора при использовании CLR не все так просто...
Кроме того вы просто не сможете понять в чем причина ошибки...
2. В NET принято нумерация последовательности объектов (строк, стобцов...) с нуля а не с единицы как в аксапте.
X++:
static void DBFCreate(Args _args)
{
SocialExplorer.IO.FastDBF.DbfFile dbfFile = new SocialExplorer.IO.FastDBF.DbfFile();
SocialExplorer.IO.FastDBF.DbfRecord dbfRecord;
SocialExplorer.IO.FastDBF.DbfHeader dbfHeader;
;
try
{
winApi::deleteFile("c:\\tt1.dbf");
dbfFile.Create("c:\\tt1.dbf");
dbfHeader = dbfFile.get_Header();
dbfHeader.AddColumn("StrCol", SocialExplorer.IO.FastDBF.DbfColumnType::Character, 20, 0);
dbfHeader.AddColumn("NumCol1", SocialExplorer.IO.FastDBF.DbfColumnType::Number, 15, 3);
dbfHeader.AddColumn("NumCol2", SocialExplorer.IO.FastDBF.DbfColumnType::Number, 3, 0);
dbfHeader.AddColumn("DateCol", SocialExplorer.IO.FastDBF.DbfColumnType::Date);
dbfHeader.AddColumn("BoolCol", SocialExplorer.IO.FastDBF.DbfColumnType::Boolean);
dbfRecord = new SocialExplorer.IO.FastDBF.DbfRecord(dbfHeader, System.Text.Encoding::GetEncoding(1251));
dbfRecord.set_Item(0, 'Test');
dbfRecord.set_Item(1, "100");
dbfRecord.set_Item(2, "10");
dbfRecord.SetDateValue(3,str2datetime('31.12.2010', 123));
dbfRecord.set_Item(4, 'f');
dbfFile.Write(dbfRecord);
dbfFile.WriteHeader();
dbfFile.Close();
}
catch (Exception::CLRError)
{
dbfFile.Close();
Error(AifUtil::getClrErrorMessage());
}
}