Добрый день! Магическим образом происходит дозапись данных в dbf-файл... И вроде бы все обычным образом делаю: открываю dbf-файл, получаю значения полей и добавляю заполненную запись в dbf. Результат: записи добавляются, но только 3 из 16 полей заполняются данными.
Если перед заполнением DBFClearBuffer не выполню, то в те же 3 поля данные переносятся мои, а остальные поля заполняются значениями из 1-ой записи в файле.
Из-за это происходит?
Таким получается файл с выгруженными данными (последние 6 строк мои - выгруженные). Заполняются поля: KODT, NAIMT, KOL
http://narod.ru/disk/8413797000/file.dbf.html
А исходный текст примерно такой:
var Dbf_Oter : LongInt;
var filename_Oter : string;
filename_Oter := 'Имя_файла';
Dbf_Oter := DBFOpen(filename_Oter,stOpen);
if Dbf_Oter = 0
{
message('Доступ к файлу для выгрузки в ОТЭР запрещен! Возможно, файл занят другим пользователем.');
abort;
exit;
}
DBFClearBuffer(Dbf_Oter);
_loop otpuskgsm
{
DbfputFieldValue(Dbf_Oter,'KOL',otpuskgsm.kol);
DBFPutFieldValue(Dbf_Oter,'NNAK', substr(otpuskgsm.NNAKL,1,6));
DBFPutFieldValue(Dbf_Oter,'DATAS', smenaazs.DNSM);
DBFPutFieldValue(Dbf_Oter,'TABNZ', substr(string(pers1.TABNMB),1,6));
DBFPutFieldValue(Dbf_Oter,'FIOZ', substr(substr(pers1.fio,1,pos(' ',pers1.fio)-1),1,6));
DBFPutFieldValue(Dbf_Oter,'DATAR', otpuskgsm.ZAPDATA);
DBFPutFieldValue(Dbf_Oter,'TIMER', timetostr(otpuskgsm.ZAPTIME,'HH:MM'));
if modifier getfirst toplivo2 = tsok
{
DBFPutFieldValue(Dbf_Oter,'KODT',substr(toplivo2.KODGSM,1,2));
DBFPutFieldValue(Dbf_Oter,'NAIMT',substr(toplivo2.NAME,1,15));
}
if modifier getfirst perspol = tsok
{
DBFPutFieldValue(Dbf_Oter,'TABN',perspol.TABNMB);
DBFPutFieldValue(Dbf_Oter,'FIO', substr(perspol.fio,1,pos(' ',perspol.fio)-1));
DBFPutFieldValue(Dbf_Oter,'KARTA', 123456789123)
}
if modifier getfirst eputlst = tsok
{
DBFPutFieldValue(Dbf_Oter,'NPUT', eputlst.SERIAPL+eputlst.npl);
DBFPutFieldValue(Dbf_Oter,'DATAV', eputlst.datapl);
if modifier getfirst transp = tsok
DBFPutFieldValue(Dbf_Oter,'GARN',transp.GARNOM);
}
DBFInsertRecord(Dbf_Oter);
} // loop
DBFClose(Dbf_Oter);
Добавление в данных в dbf-файл
Модераторы: m0p3e, edward_K, Модераторы
Ув. Ged!
1. Where может быть и пустым, а все связи описываться в modifier getfirst. Это может влиять на ситуацию?
Сразу скажу, что значения полей, записываемых в DBFPutFieldValue, при отладке отображаются верные.
2. Хотите ли Вы сказать, что к стрингу надо приводить и числовые значения, даже если тип поля в dbf-файле числовой? (А ведь поле 'KOL' как раз перенеслось - оно числовое )
P.S. Карты не банковские, а путевые
1. Where может быть и пустым, а все связи описываться в modifier getfirst. Это может влиять на ситуацию?
Сразу скажу, что значения полей, записываемых в DBFPutFieldValue, при отладке отображаются верные.
2. Хотите ли Вы сказать, что к стрингу надо приводить и числовые значения, даже если тип поля в dbf-файле числовой? (А ведь поле 'KOL' как раз перенеслось - оно числовое )
P.S. Карты не банковские, а путевые

Код: Выделить всё
Функция DBFPutFieldValue
Назначение
Установить значение поля текущей записи.
Описание
function DBFPutFieldValue (handle : longInt;
fName, str : string
) : integer;
Или посмотрите как живут значения в dbf через текстовый редактор.
Числа живут в строковом виде в отличии от бинарных файлов.
PS: на счет карт - просто, хотел предупредить
