Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

dbf ;to ;txt [dBase, FoxPro]


VictorT ©   (2002-06-14 12:50:00) 

В СУБД Informix есть команда unload, которая позволяет сохранить содержимое таблицы в текстовый файл с разделителями полей. Как сделать то же самое с dbf-файлом в Делфи? Можно конечно перемещаться курсором по таблице и писать в текстовый файл. Но может есть способ, такой же простой как в Informix?


VictorT   (2002-06-14 15:27:00) [1]

Спасибочки. Я правда предпологал, что есть более простой способ. Сам собирался делать почти также, только напрямую писать в текстовый файл.


K_dim   (2002-06-14 13:41:00) [2]

Тут правда обратное преобразование, но исправлять лень.
А так вроде бы всё понятно.
tbltxt - TTable with TableType=ttASCII

Function Txt2Dbf(tbltxt, tbldbf: ttable) : longint;
var i, dl : integer;
st, stfld : string;
begin
// Ф-ция копирует TXT файл в DBF согласно структуры DBF-файла
result := 0; // результат - кол-во обработанных записей
try
tblTXT.First;
while not(tblTXT.EOF) do begin
st := tblTxt.Fields[0].asstring;
dl := 1;
tblDbf.Append;
for i:= 0 to tbldbf.FieldCount-1 do begin
stfld := OemToAnsiStr( copy(st,dl, tbldbf.Fields[i].displayWidth) );
// tbldbf.Fields[i].asString := OemToAnsiStr( copy(st,dl, tbldbf.Fields[i].displayWidth) );
dl := dl+length(stfld);
case tbldbf.Fields[i].datatype of
ftString : tbldbf.Fields[i].asString := stfld;
ftInteger, ftSmallint, ftWord: tbldbf.Fields[i].value := StrToInt(stfld);
ftFloat: tbldbf.Fields[i].value := StrToFloat(stfld);
ftDateTime: tbldbf.Fields[i].value := StrToDateTime(stfld);
ftDate: tbldbf.Fields[i].value := StrToDate(stfld);
ftTime: tbldbf.Fields[i].value := StrToTime(stfld);
ftCurrency: tbldbf.Fields[i].value := StrToCurr(stfld);
else tbldbf.Fields[i].asString := stfld;
end; // case
end; // for curfld:= 0 to tbldbf.FieldCount-1
result := result+1;
tblTXT.Next;
end; // while not(tblDbf.EOF)
except
on E : Exception do begin
MessageDlg("Ошибка: "+#13+#10+E.message, mtError, [mbOk], 0);
result := -1;
end;
end; // try
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо