Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Быстрая работа с DBF. / 9 сообщений из 9, страница 1 из 1
10.12.2003, 07:27
    #32348560
DomovoY
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая работа с DBF.
С помощью чего можно работать с dbf в c++? Задача - перегонка больших объемов данных в dbf.
Есть ли что - нибудть кроме ODBC?
...
Рейтинг: 0 / 0
10.12.2003, 08:28
    #32348589
tpg
tpg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая работа с DBF.
Вообщето, общепризнано, что с dbf-ами быстрее фокса никто не справляется. Рой в ту сторону.
...
Рейтинг: 0 / 0
10.12.2003, 13:45
    #32349129
Ой Вэй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая работа с DBF.
Вручную!
Сам это делаю. Правда с фоксом не сравнивал...
...
Рейтинг: 0 / 0
04.01.2004, 17:07
    #32368114
oz
oz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая работа с DBF.
Вручную получается ЗНАЧИТЕЛЬНО быстрее, чем у фокса. Вот пример кода, кот-й создает таблу с данными из датасэта. Все поля Character(250) (это для универсальности, если структура датасэта известна, то...) с именами N1...Nn. Писал сам, так что не ругайте за кривость.

Код: 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.
Procedure TReports.Report2DBF(OutFile:Integer);
Var
   TempStr, TempStr1:String;
   i, j:Integer;
Begin
   // заголовок
   TempStr:=Chr( 3 ); // Foxpro без мэмо - полей
   TempStr:=TempStr + Chr( 03 ) + Chr( 04 ) + Chr( 01 ); // год + месяц + число последней модификации

   //  кол-во записей
   TempStr:=TempStr + Int2Str(O_Count.Field( 0 ),  4 );

   // позиция  1 -й записи
   TempStr:=TempStr + Int2Str( 32  + O_Report.FieldCount *  32  +  1 ,  2 );

   //   длина каждой записи
   TempStr:=TempStr + Int2Str(O_Report.FieldCount *  250  +  1 ,  2 );

   // зарезервированы
   for i:= 1  to  16  do
      TempStr:=TempStr + Chr( 0 );

   // нет CDX
   TempStr:=TempStr + Chr( 0 );

   // зарезервированы
   for i:= 1  to  3  do
      TempStr:=TempStr + Chr( 0 );

   // описания полей
   For j:= 0  To O_Report.FieldCount -  1  Do Begin
      // имя
      TempStr1:='N' + IntToStr(j +  1 );
      While Length(TempStr1) <  10  Do
         TempStr1:=TempStr1 + Chr( 0 );
      // тип
      TempStr1:=TempStr1 + CHR( 0 ) + 'C';
      //положение внутри записи
      TempStr1:=TempStr1 + Int2Str(j *  250  +  1 ,  4 );
      // длина
      TempStr1:=TempStr1 + CHR( 250 );
      // зарезервированы
      While Length(TempStr1) <  32  Do
         TempStr1:=TempStr1 + Chr( 0 );
      TempStr:=TempStr + TempStr1;
   End;
   TempStr:=TempStr + Chr( 13 );

   FileWrite(OutFile, TempStr[ 1 ], Length(TempStr));
   While Not O_Report.Eof Do Begin
      ProgressBar1.Position:=ProgressBar1.Position +  1 ;
      Application.ProcessMessages;
      TempStr:=' ';
      For i:= 0  To O_Report.FieldCount -  1  Do Begin
         TempStr1:=WinToDos(O_Report.Fields[i].AsString);
         While Length(TempStr1) <  250  Do
            TempStr1:=TempStr1 + ' ';
         TempStr:=TempStr + TempStr1;
      End;
      FileWrite(OutFile, TempStr[ 1 ], Length(TempStr));
      O_Report.Next;
   End;
   TempStr:=Chr( 26 );
   FileWrite(OutFile, TempStr[ 1 ], Length(TempStr));
End;

Function TReports.Int2Str(I, Num:Integer):String;
Begin
   Result:=Chr(i mod  256 );
   Num:=Num -  1 ;
   While Num >  0  Do Begin
      i:=Round(Int((i - (i mod  256 )) /  256 ));
      Result:=Result + Chr(i mod  256 );
      Num:=Num -  1 ;
   End;
End;

ЗЫ: если нада с мэмами, то чуууть-чуть посложнее.


------------------------------------------------
Who is Fuck the Alise?
...
Рейтинг: 0 / 0
16.01.2004, 09:10
    #32377949
AlexVic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая работа с DBF.
Я в дельфи для работы с дбф использую компоненту Advantage,по скорости не хуже родного средства. Она ест-но и для си, взять можно на с сайта разработчика бесплатно.
...
Рейтинг: 0 / 0
23.01.2004, 14:09
    #32386196
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая работа с DBF.
2oz

Насколько я могу судить, работа с dbf далеко не сводится единственно к их созданию ;-)
...
Рейтинг: 0 / 0
05.02.2004, 21:38
    #32400074
oz
oz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая работа с DBF.
2Urri
Я не претендовал на звание создателя нового драйвера к фокспрошным таблицам. Ежели не ошибся, то суть темы заключалась в необходимости переместить некоторый объем данных из некоего набора в дбф. Я сталкивался с такой задачей часто. Первое действие, которое совершается перед лицом, которое ее выполняет - поиск программ типа DataPump. Перебирается множество вариантов. Большинство из них не умеют создавать мэмы, другие теряют дробную часть.... Как - то я наблюдал такую агонию и просто ради интереса набросал вышеизложенный код (на самом деле надо было выкачать лонги из Oracle, поэтому текст немного отличался). Прелесть заключается в том, что я контролирую формирование таблицы и занесение в нее данных и могу повлиять на процесс когда захочу.
Ежели не убедил, то звыняйтэ за потраченное на меня время :-)

------------------------------------------------
Who is Fuck the Alise?
...
Рейтинг: 0 / 0
10.02.2004, 18:06
    #32404684
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая работа с DBF.
Убедил, убедил! ;-)
Действительно, частные случаи, как правило, получаются вручную быстрее, естественно, при наличии серого вещества и хорошего компилятора.
...
Рейтинг: 0 / 0
11.02.2004, 15:45
    #32405897
aPT
aPT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая работа с DBF.
DisableControls ускоряет работу с наборами данных в несколько раз.
...
Рейтинг: 0 / 0
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Быстрая работа с DBF. / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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