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

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

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

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

2) Медленный но правильный. Настроить в свойствах системы драйвер ODBC для DBF файлов. Работать с файлом как с базой данных.
...
Рейтинг: 0 / 0
21.03.2005, 04:18
    #32970393
Alexander Magnit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как в Builder-e открыть DBF и пробежаться по нему построчно
На форму бросаешь компоненты 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
21.03.2005, 06:50
    #32970417
Станислав C.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как в Builder-e открыть DBF и пробежаться по нему построчно
Serg****Подскажите как в Builder-e 5.0 открыть DBF и пробежаться по нему построчно.
Есть три пути:
1.) Использовать ADO, BDE и т.д.
преимущества:
-можно строить SQL-запросы
недостатки:
- работает медленно.

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

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

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

Кидаю на форму компонент 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
24.03.2005, 10:55
    #32977879
Serg****
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как в Builder-e открыть DBF и пробежаться по нему построчно
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
25.03.2005, 11:34
    #32980358
synapse
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как в Builder-e открыть DBF и пробежаться по нему построчно
Serg**** Serega128Да простит меня Всевышний, если я не понял вопроса правильно....

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

...

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


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