Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.66/56: Рейтинг темы: голосов - 56, средняя оценка - 4.66
3 / 0 / 0
Регистрация: 06.06.2012
Сообщений: 16

Импорт DBF в Oracle

02.10.2013, 11:10. Показов 12731. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Коллеги, добрый день.

Есть следующая задача:
создать клиент, который будет переодически грузить DBF-файл (КЛАДР), с определенного локального диска в таблицу на Oracle. Версия Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production.
На Delphi есть ODAC.

Каким иснтрументом для этих целей лучше всего воспользоваться? Какой порядок.
Таблички большие поэтому предвижу проблемы со скоростью.
Миграцией до этого особо не занимался, прошу подсказть.
Ссылки на поиск прошу не кидать.

Заранее спасибо за ответы.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.10.2013, 11:10
Ответы с готовыми решениями:

Импорт dbf в dbgrid
добрый день. имеется следующий код, ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('SELECT * FROM 5299Ì2201.dbf'); ADOQuery1.Active:=True; ...

Импорт Данных из dbf в DBGrid
Всем добрый день! Необходимо по работе написать приложение для выгрузки данных из dbf. Никогда не имел дело с базами данных - поэтому много...

Какими средствами Oracle экспортировать данные из таблицы Oracle в dbf-файл?
Здравствуйте! Не подскажите чайнику какими средствами Oracle экспортировать данные из таблицы Oracle в dbf-файл? Спасибо.

27
3 / 0 / 0
Регистрация: 06.06.2012
Сообщений: 16
07.10.2013, 15:24  [ТС]
Студворк — интернет-сервис помощи студентам
Файл приложил. Это один из файлов БД КЛАДР.
Вложения
Тип файла: zip SOCRBASE.zip (2.0 Кб, 15 просмотров)
0
3178 / 1937 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
07.10.2013, 15:35
Цитата Сообщение от SAMatyunin Посмотреть сообщение
один из файлов БД КЛАДР
Даже не глядя, можно сказать: там DOS-866 :-)

Старый DBase 3.0 - там нет указания на языковую страницу итп.
2
3178 / 1937 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
07.10.2013, 15:40
Структура
Миниатюры
Импорт DBF в Oracle  
1
3178 / 1937 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
07.10.2013, 15:50
Вот еще нашел.
Вложения
Тип файла: 7z DBFView.exe.7z (207.8 Кб, 16 просмотров)
2
 Аватар для Mawrat
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
07.10.2013, 16:15
Понятно. Тогда преобразовывать кодировки можно так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//Функция берёт строку в OEM кодировке (DOS)
//и возвращает её перевод в ANSI кодировке (Windows) в виде отдельной строки.
function StrOemToAnsi(const aStr : AnsiString) : AnsiString;
var
  Len : Integer;
begin
  Len := Length(aStr);
  SetLength(Result, Len);
  OemToAnsiBuff(PAnsiChar(aStr), PAnsiChar(Result), Len);
end;
...
var
  S : AnsiString;
  x : Integer;
begin
  S := StrOemToAnsi(ADOQuery1.Fields[x].AsString); //AsAnsiString для Delphi версии выше, чем 2007.
  ShowMessage(S);
end;
Добавлено через 22 минуты
SAMatyunin, я для эксперимента в файл записал код страницы: 65hex = 101dec "Russian MS-DOS". Можно теперь посмотреть - верно ли будет показан текст в программе. Файл приложил к сообщению.
---
Добавил 2 файла - с ID кодовых страниц: 0x26-Russian OEM и 0x65-Russian MS-DOS.
---
Я в Delphi 7 пробовал открыть исходный файл с помощью TADOQuery - у меня проблем с кодировкой не возникло.
Строку соединения использовал такую:
Code
1
Provider=Microsoft.Jet.OLEDB.4.0;Data Source="Здесь записать путь к паке, в которой лежат DBF файлы";Extended Properties=dBASE IV;Persist Security Info=False;
SQL запрос:
SQL
1
SELECT * FROM [SOCRBASE.DBF]
Вложения
Тип файла: rar SOCRBASE-IdCp-0x26-Russian OEM,0x65-Russian MS-DOS.rar (1.9 Кб, 6 просмотров)
1
3 / 0 / 0
Регистрация: 06.06.2012
Сообщений: 16
07.10.2013, 17:29  [ТС]
Цитата Сообщение от Mawrat Посмотреть сообщение
Понятно. Тогда преобразовывать кодировки можно так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//Функция берёт строку в OEM кодировке (DOS)
//и возвращает её перевод в ANSI кодировке (Windows) в виде отдельной строки.
function StrOemToAnsi(const aStr : AnsiString) : AnsiString;
var
  Len : Integer;
begin
  Len := Length(aStr);
  SetLength(Result, Len);
  OemToAnsiBuff(PAnsiChar(aStr), PAnsiChar(Result), Len);
end;
...
var
  S : AnsiString;
  x : Integer;
begin
  S := StrOemToAnsi(ADOQuery1.Fields[x].AsString); //AsAnsiString для Delphi версии выше, чем 2007.
  ShowMessage(S);
end;
Добавлено через 22 минуты
SAMatyunin, я для эксперимента в файл записал код страницы: 65hex = 101dec "Russian MS-DOS". Можно теперь посмотреть - верно ли будет показан текст в программе. Файл приложил к сообщению.
---
Добавил 2 файла - с ID кодовых страниц: 0x26-Russian OEM и 0x65-Russian MS-DOS.
---
Я в Delphi 7 пробовал открыть исходный файл с помощью TADOQuery - у меня проблем с кодировкой не возникло.
Строку соединения использовал такую:
Code
1
Provider=Microsoft.Jet.OLEDB.4.0;Data Source="Здесь записать путь к паке, в которой лежат DBF файлы";Extended Properties=dBASE IV;Persist Security Info=False;
SQL запрос:
SQL
1
SELECT * FROM [SOCRBASE.DBF]
Я делаю через Microsoft OLE DB Provider for ODBC drivers. Попробывал через JET, т.е. такую же строку как Вы указали - получаю ошибку - Read only property value was not set
0
 Аватар для Mawrat
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
08.10.2013, 09:17
Цитата Сообщение от SAMatyunin Посмотреть сообщение
Я делаю через Microsoft OLE DB Provider for ODBC drivers.
Если есть возможность, то к ODBC лучше не привязываться.
Пример с подключением через ADO, драйвер Microsoft.Jet.OLEDB.4.0.
Delphi
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    ADOQuery1: TADOQuery;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
//Кнопка "Открыть БД".
procedure TForm1.Button1Click(Sender: TObject);
var
  Path, TableName : String;
  Od : TOpenDialog;
begin
  //Диалог выбора файла.
  Od := OpenDialog1; //OpenDialog1 уже должен быть на форме.
  if Od.InitialDir = '' then
    Od.InitialDir := ExtractFilePath( ParamStr(0) );
  if not Od.Execute then Exit;
  if not FileExists(Od.FileName) then begin
    MessageBox(0, 'Файл с заданным именем не найден. Действие отменено.'
      ,'Файл не найден!', MB_YESNO + MB_ICONWARNING + MB_APPLMODAL);
  end;
 
  ADOQuery1.Close;
  //Путь к папке, в которой находится выбранный файл.
  Path := ExtractFilePath(Od.FileName);
  //Имя файла = имя таблицы.
  TableName := ExtractFileName(Od.FileName);
  Label1.Caption := 'Таблица: ' + TableName;
  //Формируем строку соединения.
  ADOQuery1.ConnectionString :=
    'Provider=Microsoft.Jet.OLEDB.4.0;'
    + 'Data Source="' + Path + '";'
    + 'Extended Properties=dBASE IV;'
    + 'Persist Security Info=False;'
    + 'Mode=Share Deny None;';
  //Формируем SQL запрос.
  ADOQuery1.SQL.Text := 'select * from [' + TableName + ']';
  ADOQuery1.Open;
end;
 
//Кнопка "Закрыть БД".
procedure TForm1.Button2Click(Sender: TObject);
begin
  ADOQuery1.Close;
end;
 
end.
Миниатюры
Импорт DBF в Oracle  
Вложения
Тип файла: rar DBaseView-01.rar (315.3 Кб, 28 просмотров)
1
 Аватар для Mawrat
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
08.10.2013, 17:09
На всякий случай ещё один проект. Там добавлена распечатка строк, взятых из DBF, в Memo. Здесь, получается, что строки, взятые через свойство TADOQuery.Fields[i].AsString (или в Delphi версии выше, чем 2007 - TADOQuery.Fields[i].AsAnsiString), уже имеют кодировку преобразованную в CP1251. Т. е., и в этом случае перекодировка (CP866 -> CP1251) выполняется автоматически.
Delphi
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
100
101
102
103
104
105
106
107
108
109
110
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Label1: TLabel;
    Memo1: TMemo;
    OpenDialog1: TOpenDialog;
    ADOQuery1: TADOQuery;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
//Кнопка "Открыть БД".
procedure TForm1.Button1Click(Sender: TObject);
var
  Path, TableName : String;
  Od : TOpenDialog;
begin
  //Диалог выбора файла.
  Od := OpenDialog1; //OpenDialog1 уже должен быть на форме.
  if Od.InitialDir = '' then
    Od.InitialDir := ExtractFilePath( ParamStr(0) );
  if not Od.Execute then Exit;
  if not FileExists(Od.FileName) then begin
    MessageBox(0, 'Файл с заданным именем не найден. Действие отменено.'
      ,'Файл не найден!', MB_YESNO + MB_ICONWARNING + MB_APPLMODAL);
  end;
 
  ADOQuery1.Close;
  //Путь к папке, в которой находится выбранный файл.
  Path := ExtractFilePath(Od.FileName);
  //Имя файла = имя таблицы.
  TableName := ExtractFileName(Od.FileName);
  Label1.Caption := 'Таблица: ' + TableName;
  //Формируем строку соединения.
  ADOQuery1.ConnectionString :=
    'Provider=Microsoft.Jet.OLEDB.4.0;'
    + 'Data Source="' + Path + '";'
    + 'Extended Properties=dBASE IV;'
    + 'Persist Security Info=False;'
    + 'Mode=Share Deny None;';
  //Формируем SQL запрос.
  ADOQuery1.SQL.Text := 'select * from [' + TableName + ']';
  ADOQuery1.Open;
end;
 
//Кнопка "Закрыть БД".
procedure TForm1.Button2Click(Sender: TObject);
begin
  ADOQuery1.Close;
end;
 
//Кнопка "Распечатать строки".
procedure TForm1.Button3Click(Sender: TObject);
var
  i : Integer;
  Bm : TBookmark;
begin
  if not ADOQuery1.Active then begin
    MessageBox(Handle, 'Набор данных закрыт. Действие отменено.',
      'Внимание!', MB_OK + MB_ICONWARNING + MB_APPLMODAL);
    Exit;
  end;
 
  Memo1.Clear;
  Memo1.Lines.Add('Текстовое представление данных таблицы:');
  Memo1.Lines.Add('');
  Bm := ADOQuery1.GetBookmark; //Запоминаем текущую позицию в наборе данных.
  ADOQuery1.DisableControls; //Отключаем элементы отображения данных.
  try
    ADOQuery1.First;
    while not ADOQuery1.Eof do begin
      for i := 0 to ADOQuery1.Fields.Count - 1 do
        //Если версия Delphi выше, чем 2007, то следует применить: AsAnsiString.
        Memo1.Lines.Add(ADOQuery1.Fields[i].FieldName
          + ' = ' + ADOQuery1.Fields[i].AsString);
      Memo1.Lines.Add('--------------------------------------------------');
      ADOQuery1.Next;
    end;
  finally
    //Возвращаемся на прежнюю позицию в наборе данных.
    if ADOQuery1.Active then ADOQuery1.GotoBookmark(Bm);
    ADOQuery1.EnableControls; //Подключаем элементы отображения данных.
  end;
end;
 
end.
Миниатюры
Импорт DBF в Oracle  
Вложения
Тип файла: rar DBaseView-02.rar (317.9 Кб, 33 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.10.2013, 17:09

Импорт DBF файла
Ребята как мне импортировать DBF файл в Oracle9i Data Base, или где мне найти документацию по этой теме?

Импорт .dbf в PostgreSQL. C#
Здравствуйте. Возникла задача импорта dbf файла в базу данных Postgre... нашла всего несколько вопросв по данной теме в частности...

Импорт из Excel в dbf
Как на VBA сделать импорт (выборочных) данных в DBF ? Нравится как это реализовано в 1с. Хотелось бы наподобии 1) Создать файл в...

Импорт из dbf файла
имеется dbf файл reg.dbf, из него необходимо извлечь данные и поместить в таблицу sql думаю делать по след. схеме: 1. открыть...

Импорт из *.dbf в Регистр сведений
Пытаюсь написать код для импорта данных из *.dbf файла в регистр сведений &НаКлиенте Процедура ИмпортСправочника(Команда) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru