powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Подскажите как в Builder-e открыть DBF и пробежаться по нему построчно
8 сообщений из 8, страница 1 из 1
Подскажите как в Builder-e открыть DBF и пробежаться по нему построчно
    #32968590
Serg****
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите как в Builder-e 5.0 открыть DBF и пробежаться по нему построчно.
...
Рейтинг: 0 / 0
Подскажите как в Builder-e открыть DBF и пробежаться по нему построчно
    #32969223
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А там что -- строчный формат?
Построчно ЛЮБОЙ файл можно открыть в TMemo или с помощью TStringList
________________________________________________________
Глюк - это высокоорганизованная система не поддающихся определению частиц
...
Рейтинг: 0 / 0
Подскажите как в Builder-e открыть DBF и пробежаться по нему построчно
    #32969623
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть два способа.

1) Быстрый и неправильный. Открыть файл как последовательность символов. Пропустить от начала 32 + 32*N + 3 символов. (здесь N - количество полей)

Читать символы с подсчетом длины строки. Если строка начинается с символа * то она считается удаленной. Все типы данных - символьные. Даты - без разделителей. Булевы поля могут принимать значения "1","0","T","F","Y","N"

За формулу не ручаюсь. Она сильно зависит от версии DBF-ника и от особенностей того софта на котором файл был создан. С кодировкой тоже могут быть бока. Но обычно это или "windows-1251" или "cp866".

2) Медленный но правильный. Настроить в свойствах системы драйвер ODBC для DBF файлов. Работать с файлом как с базой данных.
...
Рейтинг: 0 / 0
Подскажите как в Builder-e открыть DBF и пробежаться по нему построчно
    #32970393
Alexander Magnit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На форму бросаешь компоненты ADOConnection, ADOTable или ADOQuery.
Кроме того неплохо определиться, какие именно ДБФки будешь смотреть.
Clipper, FoxPro for Dos, FoxPro for Windows, и т.д., потому что кроме того
что заголовки разные (соответственно и строки подключения), и кодировки
текстовых данных различны.

Вот кусок когда то писаного кода

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
AnsiString STDir;
String Caption = "Выбор директории БД типа PARADOX";
String StartDir = "";  /* "D:\\TAR\\"; */
String SelectDir = "";
if(SelectDirectory(Caption, StartDir, SelectDir)){
        STDir = SelectDir;
/*
        ConnStr = "Driver={Microsoft Visual FoxPro Driver};\
SourceType=DBF;SourceDB="+ ExtractFilePath(MDataSource) +";Exclusive=No;";
*/
/*
Provider=MSDASQL.1;Persist Security Info=False;Data Source=TARDB

Driver={Microsoft Paradox Driver (*.db)};DBQ=physical path to .db file;DriverID=26
Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:\MyDatabase.mdb;Extended Properties="Paradox 7.X;"'

'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\;
Extended Properties=dBase 5.0; Mode=Read|Write|Share Deny None;
Persist Security Info=True';

*/
/*
ConnStr = "Driver={Microsoft Paradox Driver (*.db)}; \
           DriverID=538;Fil=Paradox 5.X; \
           DefaultDir="+ STDir + "\\; Dbq="+ STDir +"\\; CollatingSequence=ASCII;";
ConnStr = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=TARDB";
ConnStr = "Driver={Microsoft Paradox Driver (*.db)};DBQ="+ STDir +";DriverID=26";
ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=D:\\TAR\\;Extended Properties=\"Paradox 5.X;\"";
*/
        Screen->Cursor = crHourGlass;
        try {
switch(FPump->FDBNum) {
        case  1 :
//if(RBTar->Checked) {
ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+ STDir + "\\;\
Extended Properties=\"Paradox  5 .X\"";
//}
        break;
        case  2 :
//if(RBAta->Checked) {
/*
ConnStr =
      "Provider=MSDASQL.1;Persist Security Info=False;Data Source=dBASE Files;" \
      "Extended Properties=\"DSN=dBASE Files;DBQ=" +STDir+
      ";DefaultDir="+STDir+";DriverId=533;FIL=dBase 5.0;" \
      "MaxBufferSize=2048;PageTimeout=600;\";Initial Catalog=" +STDir;
*/
ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+ STDir + "\\;\
Extended Properties=\"dBase  5 . 0 \"";
/*
ConnStr = "Provider=Microsoft.Jet.OLEDB.3.51;Data Source="+ STDir + "\\;\
Extended Properties=\"FoxPro 3.0\"";

ConnStr = "Driver=Microsoft Visual Foxpro Driver; \
   UID=;SourceType=DBF;SourceDB="+STDir + "\\";
*/

/*
ConnStr = "Driver={Microsoft Visual FoxPro Driver};\
SourceType=DBF;SourceDB="+ STDir +";Exclusive=No;";
*/
/*
ConnStr = "Driver={Microsoft dBASE Driver (*.dbf)}; \
SourceType=DBF;SourceDB="+ STDir +";Exclusive=No;";
*/

/*
ConnStr = "Provider=MSDASQL.1;Persist Security Info=False; \
 Data Source=dBASE Files;Mode=Read|Write;Connect Timeout=30; \
 Initial Catalog=" + STDir;
*/

// }
        break;
}
//        ACon->Provider = "MSDASQL.1";
        ACon->Connected = false;
        ACon->KeepConnection = false;
        ACon->ConnectionString = ConnStr;
        ACon->Connected = true;
        ACon->KeepConnection = true;
        CBoxTables->Items->Clear();
        ACon->GetTableNames(CBoxTables->Items, false);
        CBoxTables->ItemIndex =  0 ;
        CBoxTablesChange(Sender);
//        DBMemo->DataSource = NULL;
//        DBMemo->DataField = "";

BBtnOpenDir->Hint = AnsiString(" База данных импорта "+ STDir +"|База данных импорта");
        } catch(Exception &E) {
        ACon->Connected = false;
        ACon->KeepConnection = false;
        ShowMessage(AnsiString(E.ClassName())+ E.Message);}
        Screen->Cursor = crDefault;
} else {
        STDir = "";
        ACon->Connected = false;
        ACon->KeepConnection = false; }

...
Рейтинг: 0 / 0
Подскажите как в Builder-e открыть DBF и пробежаться по нему построчно
    #32970417
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg****Подскажите как в Builder-e 5.0 открыть DBF и пробежаться по нему построчно.
Есть три пути:
1.) Использовать ADO, BDE и т.д.
преимущества:
-можно строить SQL-запросы
недостатки:
- работает медленно.

2.) Написать свой драйвер для работы с файлами. В принципе это несложно (формат файлов DBF легко можно найте в Инете)
преимущества:
- научитесь работе с форматом DBF :)
- ускоряется построчная (позаписная) работа с данными, если, конечно, не работать с мемо-, general-, или BLOB-полями (файлов без этих типов полей примерно 90%);
недостатки:
- затраты по времени;
- невозможность полноценной обработки SQL-запросов (если вообще что-нибудь сделано в этом направлении)

3.) Использовать библиотеки сторонних разработчиков.
Ту уже ничего сказать не могу - это сильно зависит от библиотеки. У меня, например, для работы с файлами dbf используется библиотека XBase. Так вот, у нее все преимущества и недостатки, отмеченные в п.2...
...
Рейтинг: 0 / 0
Подскажите как в Builder-e открыть DBF и пробежаться по нему построчно
    #32972222
Фотография Serega128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да простит меня Всевышний, если я не понял вопроса правильно....

Я бы делал так:

Кидаю на форму компонент Table1, у которого в свойствах указываю TableName = C:\WayToDBF

А теперь собсно код:

Table1->First();
while(!Table1->eof)
{
for(int i=0; i<Table1->Fields->Count; i++)
{
// Do something with your fuckin fields, for example like this
Table1->Fields->Fields ->AsString;

}
Table1->Next();
}


Вот и усё....
...
Рейтинг: 0 / 0
Подскажите как в Builder-e открыть DBF и пробежаться по нему построчно
    #32977879
Serg****
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serega128Да простит меня Всевышний, если я не понял вопроса правильно....

Я бы делал так:

Кидаю на форму компонент Table1, у которого в свойствах указываю TableName = C:\WayToDBF

А теперь собсно код:

Table1->First();
while(!Table1->eof)
{
for(int i=0; i<Table1->Fields->Count; i++)
{
// Do something with your fuckin fields, for example like this
Table1->Fields->Fields ->AsString;

}
Table1->Next();
}


Вот и усё....
А как избавиться от диалога предлагающего ввести Логин и Пароль?
...
Рейтинг: 0 / 0
Подскажите как в Builder-e открыть DBF и пробежаться по нему построчно
    #32980358
synapse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg**** Serega128Да простит меня Всевышний, если я не понял вопроса правильно....

Я бы делал так:

...

Вот и усё....А как избавиться от диалога предлагающего ввести Логин и Пароль?
Добавить к твоему проекту компонент TSesion и обрабатывать событие onPassword();
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Подскажите как в Builder-e открыть DBF и пробежаться по нему построчно
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]