Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi и базы данных

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 46, средняя оценка - 4.74
zumer
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 18
#1

Импорт из Excel - Delphi БД

16.11.2011, 15:28. Просмотров 6243. Ответов 27
Метки нет (Все метки)

Добрый день. Помогите пожалуйста с решением следующей проблемы:
Получаем ответы из шести подразделений, в которые были направленны файлы-запросы (ФИО, АДРЕС, Дата рождения, Место рождения), в файл-ответ добавляются столбцы (2 столбца: "Что купил", "Когда купил"; при этом часть подразделений дает ответ на несколько покупок в одной строке: "Что купил1", "Когда купил1", "Что купил2", "Когда купил2" и т.д., остальные на каждую покупку создают новую строку)
Необходимо организовать импорт из получаемых excel файлов, я предполагаю, что необходимо организовать импорт в две таблицы (в первой хранить ключевое поле и данные о покупателе, во второй ключевое поле и ответ из подразделения, ключевое поле вида 12345/12/12/12 в основном все выборки будут производится по ключевому полю или по ФИО)
Вопросы:
1. Какую БД лучше использовать (предполагаемое количество записей от 70-100 тыс)
2. Каким образом лучше организовать импорт? Думаю через матрицы, так как придется заполнять две таблицы, то одним проходом считать в две матрицы.
3. Как лучше/быстрее перенести матрицы в БД, если в первой таблице придется проверять на уникальность по ключевому полю, а во вторую просто дописывать данные?
За ранее признателен за любую помошь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2011, 15:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Импорт из Excel (Delphi БД):

Импорт из Excel в access - Delphi БД
Добрый день. Если импортирую из XLS то выдаёт ошибку: Не удаётся найти файл С:\путь к базе mdp. Если XLSX то ишибка Внешняя таблица не...

Импорт из Excel в DBGridEh - Delphi БД
Подскажите, как импортировать данные из Excel в DBGrid с последующем добавление в БД из DBGrid? есть пример добавление из Excel в...

Импорт данных в БД из MS Excel - Delphi БД
ЗДРАВСТВУЙТЕ! СКАЖИТЕ, ПОЖАЛУЙСТА, КАК ИМПОРТИРОВАТЬ ДАННЫЕ ИЗ ТАБЛИЦЫ ИЗ MSEXEL В БАЗУ ДАННЫХ В DELPHI7? ЗАРАНЕЕ БЛАГОДАРНА!

Импорт из QuickRep в excel - Delphi БД
Отчет в QuickRep заполняется через запрос Adoquery, теперь надо что бы этот же отчет выводился в excel. Как сделать что бы таблица...

Импорт в Excel из DBGrid - Delphi БД
Как импортировать выбранные значения из DBGrid в Excel? :) Тема рядом с Вашей. Загляните!

Импорт из Excel в Access - Delphi БД
Добрый вечер. Делаю так: ADOConnection2.ConnectionString:='Provider=MSDASQL.1;Persist Security Info=False;Extended...

27
MrHitman47
35 / 35 / 3
Регистрация: 23.05.2011
Сообщений: 201
Записей в блоге: 1
16.11.2011, 18:14 #2
Сам пользуюсь MySQL, очень не плох. А вот и прога для импорта и работы с БД "Navicat Premium"

Вот форма импорта:
0
Миниатюры
Импорт из Excel  
rdama
566 / 289 / 3
Регистрация: 28.01.2011
Сообщений: 1,326
17.11.2011, 06:57 #3
Вот с кодом я надеюсь сами разберетесь.
Если я правильно понял, то что вам надо.
Excel файл лежит в папке с исходниками.
Импортируется в БД на Access.
Думаю адаптировать код под другую СУБД не составит труда.
А в ключе MySQL. Я бы предложил MariaDB (форк MySQL)/
И не платный/ворованный Navicat, а бесплатный dbForge Studio for MySQL.
1
Вложения
Тип файла: zip _tst_.zip (919.1 Кб, 229 просмотров)
MsGuns
528 / 528 / 6
Регистрация: 04.04.2011
Сообщений: 1,951
17.11.2011, 10:58 #4
ИМХО, Мускул - не лучший выбор для Вашего случая
Хотя бы потому что придется искать и устанавливать как сам мускул (скл-сервер), так и компоненты доступа + клиентскую часть (на каждый клиент).

Если база многопользовательская, то Firebird - не самый плохой выбор. Ну или MSSQL, в котором самое простое реализовать импорт из Эксель в БД

Никаких "матриц" не нужно,- Эксель-данные перегоняются в в спец.таблицы (транспортные, со структурой = книге экселя), из которых ЗАПРОСАМИ данные заносятся (добавляются, заменяются и т.д.) в таблицы рабочей БД. Реализовать можно как DTS (см. мануалы по МсСКЛ) + хранимки, реализующие перенос из временных в рабочие
0
Gulik
6 / 6 / 0
Регистрация: 06.11.2011
Сообщений: 36
17.11.2011, 23:17 #5
Цитата Сообщение от MsGuns Посмотреть сообщение
ИМХО, Мускул - не лучший выбор для Вашего случая
Хотя бы потому что придется искать и устанавливать как сам мускул (скл-сервер), так и компоненты доступа + клиентскую часть (на каждый клиент).

Если база многопользовательская, то Firebird - не самый плохой выбор. Ну или MSSQL, в котором самое простое реализовать импорт из Эксель в БД

Никаких "матриц" не нужно,- Эксель-данные перегоняются в в спец.таблицы (транспортные, со структурой = книге экселя), из которых ЗАПРОСАМИ данные заносятся (добавляются, заменяются и т.д.) в таблицы рабочей БД. Реализовать можно как DTS (см. мануалы по МсСКЛ) + хранимки, реализующие перенос из временных в рабочие
MySQL на много лучше MSSQL, и легче
0
MrHitman47
35 / 35 / 3
Регистрация: 23.05.2011
Сообщений: 201
Записей в блоге: 1
17.11.2011, 23:57 #6
Поддерживаю Gulik, ИМХО пользоваться MySQL очень удобно
0
zumer
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 18
24.11.2011, 16:03  [ТС] #7
Всем большое спасибо. После хождения по мукам решил пока остаться на Access (т.к. Access более-менее знаком). Импортирую всетаки с использованием вариантного массива, но столкнулся с проблемой при импорте: необходимо отловить исключение на вставку повторяющегося значения в индексируемом поле для обновления данных этой записи. Пробую следующим методом:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ADOQuery1.Insert;
    ADOQuery1.FieldByName('Поле1').AsString:=RangeMatrix[R,1];
    ADOQuery1.FieldByName('Поле2').AsDateTime := StrToDate(StringReplace(RangeMatrix[R,2], '''', '', [rfReplaceAll, rfIgnoreCase])); // замена апострофа
    ADOQuery1.FieldByName('Поле3').AsString:=RangeMatrix[R,3];
    ADOQuery1.FieldByName('ÑóììГ* äîëãГ*').AsCurrency :=StrToFloat(StringReplace(StringReplace(RangeMatrix[R,9], '''', '', [rfReplaceAll, rfIgnoreCase]), '.', ',', [rfReplaceAll])); // замена точки
    ADOQuery1.Active:= True;
    try                                     // пытаюсь отловить исключение
    AdoQuery1.Post;
      except
      on E : EDatabaseError
          do
          if E.Message = 'Key violation'
          then
          begin
 
          end;
          else Raise;
    end;
Подскажите пожалуйста как правильно отловить и каким образом обновить данные.
P.S. Прошу отнестись с пониманием т.к. это мой первый опыт работы с Delphi.
 Комментарий модератора 
Теги кода добавлены модератором. По правилам форума, код должен быть оформлен соответствующими тегами. Для оформления кода Delphi следует выделить этот код и на панели редактирования сообщения нажать кнопку: "DELPHI".
0
MrHitman47
35 / 35 / 3
Регистрация: 23.05.2011
Сообщений: 201
Записей в блоге: 1
24.11.2011, 16:20 #8
можно так попробывать
SQL
1
2
INSERT INTO xxx
SELECT x,y,z,q FROM xxx2 WHERE NOT EXISTS(SELECT Id FROM xxx WHERE Id=xxx2.Id)
0
zumer
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 18
24.11.2011, 17:28  [ТС] #9
Цитата Сообщение от MrHitman47 Посмотреть сообщение
можно так попробывать
SQL
1
2
INSERT INTO xxx
SELECT x,y,z,q FROM xxx2 WHERE NOT EXISTS(SELECT Id FROM xxx WHERE Id=xxx2.Id)
Спс за оперативность, но разве можно из вариантного массива достать данные селектом, или я не допонял чего то?

Добавлено через 59 минут
Таким образом:
Delphi
1
2
3
4
5
6
7
8
9
10
11
    try
    AdoQuery1.Post;
      except
      if (ADOQuery1.Connection.Errors.Count > 0)
       and (ADOQuery1.Connection.Errors[0].NativeError = Longint($F9BBF9BB))
     then
       ShowMessage('Такая запись уже существует.')
     else
       ShowMessage('Какая-то другая ошибка');
 
    end;
он отлавливает ошибку, но всеравно выдает стандартное окно об ошибке (т.е. сначало выходит стандартное окно об ошибке, а потом мое сообщение "Такая запись уже существует")
 Комментарий модератора 
Теги кода добавлены модератором. По правилам форума, код должен быть оформлен соответствующими тегами. Для оформления кода Delphi следует выделить этот код и на панели редактирования сообщения нажать кнопку: "DELPHI".
0
MrHitman47
35 / 35 / 3
Регистрация: 23.05.2011
Сообщений: 201
Записей в блоге: 1
24.11.2011, 20:43 #10
ты попробуй
Delphi
1
2
3
4
5
6
try
except 
on тип ошибки: ...
else
..
end;
0
Gulik
6 / 6 / 0
Регистрация: 06.11.2011
Сообщений: 36
25.11.2011, 00:20 #11
zumer пиши мне в асю 717-0-681 помогу делом...
0
rdama
566 / 289 / 3
Регистрация: 28.01.2011
Сообщений: 1,326
25.11.2011, 03:05 #12
Что-то или я дурак или чего-то не понимаю. Дал же рабочий исходник под вашу задачу.
0
Gulik
6 / 6 / 0
Регистрация: 06.11.2011
Сообщений: 36
25.11.2011, 21:26 #13
rdama, Не ты очень умный, без вопросов... искренне. Но я думаю тут еще много грабель будет на дороге, и я хочу отдельно с человеком поработать
0
zumer
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 18
28.11.2011, 18:10  [ТС] #14
Цитата Сообщение от rdama Посмотреть сообщение
Что-то или я дурак или чего-то не понимаю. Дал же рабочий исходник под вашу задачу.
Просто при компиляции выдает ошибку: Undeclared identifier: 'MainFormOnTaskbar' и пришел к выводу, что необходимо одно поле сделать "индексированно-уникальным" в следствии чего необходимо добавить проверку при импорте: если имеется такое значение - обновить следующие поля (сори за мой французский). За исходник отдельное спасибо, в нем много мелочей (не говоря уж про остальное) о которых я и понятия не имел.
0
Gulik
6 / 6 / 0
Регистрация: 06.11.2011
Сообщений: 36
29.11.2011, 01:10 #15
Просто закоментируй эту строку MainFormOnTaskbar или сотри.
Это добавляют версии Delphi выше 7 (если не ошибаюсь)
0
29.11.2011, 01:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2011, 01:10
Привет! Вот еще темы с ответами:

Из Excel в Delphi импорт - Delphi БД
Уважаемые форумчане! Прошу помощи, т.к. 2 день не могу решить проблему. Задача: в цикле присвоить переменным в Delphi значения из ячеек и...

MS Access Импорт данных из Delphi в Excel - Delphi БД
Подскажите плиз новичку! Нужно вывести данные из DBGrid в Excel вот моя процедура: procedure TForm1.N9Click(Sender: TObject); var ...

Импорт из Excel в SQL базу - Delphi БД
Добрый день. Есть программа на Delphi. Которая отправляет смс рассылку через get запрос. Ситуация в следующем не могу сделать что...

Импорт из Excel в Access Делфи - Delphi БД
Народ подскажите код для импорта данных из экселя в аксесс, соответсвенно в DbGrid Добавлено через 27 секунд procedure...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru