Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2012, 06:30   #51
Kerby666
Пользователь
 
Регистрация: 10.12.2012
Сообщений: 64
По умолчанию

Цитата:
Сообщение от Slym Посмотреть сообщение
пока меня небыло ветка выросла на 3 страницы
давай проект уже, запакуй и приаттач сюда, с базой и дбфкой
а то удаленная отладка какаято

P.S.
я ведь специально что нужно сделать заранее закоментил... а ты зачем то раскоментил
препаринг немного ускоряет поиск

и еще ты ещеш в дбф или уже в мдб?
Да я в dbf еще, приаттачить не смогу, потому как нет у вас прайс чекера (железяки). Я сканирую им и пишу здесь.
Kerby666 вне форума Ответить с цитированием
Старый 13.12.2012, 06:35   #52
Kerby666
Пользователь
 
Регистрация: 10.12.2012
Сообщений: 64
По умолчанию

всем спасибо, я поехал ставить эту хрень, ехать долго, по дороге что-нибудь придумаю. Вернусь, отпишу.
Kerby666 вне форума Ответить с цитированием
Старый 14.12.2012, 15:54   #53
Kerby666
Пользователь
 
Регистрация: 10.12.2012
Сообщений: 64
По умолчанию

В общем все неплохо. Работает с базой в 2 тысячи записей, хоть и фулсканом, но быстро(1-2 секунды). Теперь хочу вернуться к тому с чего начал. Использовать mdb и индексные поля. Тестить удаленно будет сложнее, но бросать это дело не хочу. Итак я имею файл bdf c тремя полями и базу access с теми же полями. Нужно организовать импорт из dbf в access. И спасибо, что помогаете!
Kerby666 вне форума Ответить с цитированием
Старый 15.12.2012, 10:14   #54
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Цитата:
Нужно организовать импорт из dbf в access.
Открываем Аксесс.
Меню Файл -> Внешние данные -> Импорт...
Диалог. В поле "Тип файлов" выбирается dBASE 5 (dBASE IV), в поле "Имя файла" ищется нужный файл. Далее кнопка "Импорт". Всё.

Тока что таким способом импортнул из kladr.dbf лишком 208 тыс. записей.
Что характерно, Аксессу по-барабану, что в файле DOS кодировка - преобразовал самостоятельно в win1251 без вопросов и выпендрежа.
Прик вне форума Ответить с цитированием
Старый 16.12.2012, 11:11   #55
Kerby666
Пользователь
 
Регистрация: 10.12.2012
Сообщений: 64
По умолчанию

Цитата:
Сообщение от Прик Посмотреть сообщение
Открываем Аксесс.
Меню Файл -> Внешние данные -> Импорт...
Диалог. В поле "Тип файлов" выбирается dBASE 5 (dBASE IV), в поле "Имя файла" ищется нужный файл. Далее кнопка "Импорт". Всё.

Тока что таким способом импортнул из kladr.dbf лишком 208 тыс. записей.
Что характерно, Аксессу по-барабану, что в файле DOS кодировка - преобразовал самостоятельно в win1251 без вопросов и выпендрежа.
Мне нужен импорт средствами delphi.
Kerby666 вне форума Ответить с цитированием
Старый 16.12.2012, 13:05   #56
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

в этой ветке ответ дан уже не раз...
импорт можно делать 2 способами
1 импорт через sql http://www.programmersforum.ru/showp...9&postcount=12
2. полный проход по dbf датасету и вставка в мдб построчно
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 16.12.2012, 20:00   #57
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Есть еще третий способ. Можно сказать, "мгновенный". Этим способом я загружаю в акесс более 200 тыс записей из dbf за 3 секунды. Собственно, это и есть тот самый способ (пост #54), только средствами Дельфи.
Код:
uses ComObj, AccessXP;

var
  Acc : TAccessApplication;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Acc := TAccessApplication.Create(Self);
  Acc.Connect;
  Acc.OpenCurrentDatabase('В:\pdb.mdb' , true, '');
  Acc.Visible := True; //а вот посмотрим чего там происходит

  Acc.DoCmd.TransferDatabase(acImport, 'dBase IV',
                             'D:\WORK\KLADR2012', acTable,
                             'KLADR.DBF',  //откуда
                             'KLADR',    //имя НОВОЙ таблицы в БД
                             false, false);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Acc.Free;
end;
Если нужно импорт делать не раз, то придется решить несложную задачу убивать прежде созданную таблицу. Иначе они будут плодится с тем же именем, но с присоединенными справа номерами.

Хм. Рекомендую. Протестировано на Д7.
Прик вне форума Ответить с цитированием
Старый 17.12.2012, 11:20   #58
Kerby666
Пользователь
 
Регистрация: 10.12.2012
Сообщений: 64
По умолчанию

Цитата:
Сообщение от Прик Посмотреть сообщение
Есть еще третий способ. Можно сказать, "мгновенный". Этим способом я загружаю в акесс более 200 тыс записей из dbf за 3 секунды. Собственно, это и есть тот самый способ (пост #54), только средствами Дельфи.
Код:
uses ComObj, AccessXP;

var
  Acc : TAccessApplication;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Acc := TAccessApplication.Create(Self);
  Acc.Connect;
  Acc.OpenCurrentDatabase('В:\pdb.mdb' , true, '');
  Acc.Visible := True; //а вот посмотрим чего там происходит

  Acc.DoCmd.TransferDatabase(acImport, 'dBase IV',
                             'D:\WORK\KLADR2012', acTable,
                             'KLADR.DBF',  //откуда
                             'KLADR',    //имя НОВОЙ таблицы в БД
                             false, false);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Acc.Free;
end;
Если нужно импорт делать не раз, то придется решить несложную задачу убивать прежде созданную таблицу. Иначе они будут плодится с тем же именем, но с присоединенными справа номерами.

Хм. Рекомендую. Протестировано на Д7.
У меня открывается access.Приходится внутри окна access жать "открыть", чтоб дальше дело пошло. Как-то не айс, хотя и очень быстро действительно.
Kerby666 вне форума Ответить с цитированием
Старый 17.12.2012, 11:37   #59
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

"Жать открыть" - это из-за установки системы безопасности макросов:
меню Сервис - Макрос - Безопасность..., в окне закладка "Уровень безопасности", пункт "Низкая".

Чтобы Аксесс еще и не открывался, немного изменить в коде Дельфи:
Код:
uses ComObj, AccessXP;

procedure TForm1.Button1Click(Sender: TObject);
var
  Acc : TAccessApplication;
begin
  Acc := TAccessApplication.Create(Self);
  Acc.Connect;
  Acc.OpenCurrentDatabase('В:\pdb.mdb' , true, '');
  Acc.DoCmd.TransferDatabase(acImport, 'dBase IV',
                             'D:\WORK\KLADR2012', acTable,
                             'KLADR.DBF',  //откуда
                             'KLADR',    //имя НОВОЙ таблицы в БД
                             false, false);
  Acc.Quit(acQuitSaveAll);
  Acc.Free;
end;
Прик вне форума Ответить с цитированием
Старый 17.12.2012, 11:54   #60
Kerby666
Пользователь
 
Регистрация: 10.12.2012
Сообщений: 64
По умолчанию

Цитата:
Сообщение от Прик Посмотреть сообщение
"Жать открыть" - это из-за установки системы безопасности макросов:
меню Сервис - Макрос - Безопасность..., в окне закладка "Уровень безопасности", пункт "Низкая".

Чтобы Аксесс еще и не открывался, немного изменить в коде Дельфи:
Код:
uses ComObj, AccessXP;

procedure TForm1.Button1Click(Sender: TObject);
var
  Acc : TAccessApplication;
begin
  Acc := TAccessApplication.Create(Self);
  Acc.Connect;
  Acc.OpenCurrentDatabase('В:\pdb.mdb' , true, '');
  Acc.DoCmd.TransferDatabase(acImport, 'dBase IV',
                             'D:\WORK\KLADR2012', acTable,
                             'KLADR.DBF',  //откуда
                             'KLADR',    //имя НОВОЙ таблицы в БД
                             false, false);
  Acc.Quit(acQuitSaveAll);
  Acc.Free;
end;
С этим понятно. Все работает! Вопрос теперь такой. Не создается ключевое поле в создаваемой при экспорте таблице. Это не то чтобы принципиально, но повлияет ли это на целостность структуры базы access? Отразится ли на скорости поиска?
Еще кодировка получается меняется. В dbf по-умолчанию стоит windows. А в access получается dos становится!!!

Последний раз редактировалось Kerby666; 17.12.2012 в 11:59.
Kerby666 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Экспорт данных из Access в Word, C# Miaka Помощь студентам 0 09.05.2012 17:32
Импорт-экспорт данных Excel-Access, и из Access-Excel Людвиг Microsoft Office Access 3 27.10.2011 14:38
экспорт данных из access в существующие файлы word и excel Margaret Microsoft Office Access 4 10.12.2010 15:44
Экспорт данных из SQL Server в Access Daniar БД в Delphi 0 02.12.2010 17:56