Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Данные из Экселя в Acess 
:(
    Опции темы
Тутанхамец
Дата 25.9.2006, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

Репутация: 4
Всего: 6



Здравствуйте! Нужно экспортировать данные из экселя в аксесс. Искал в сети, но всё найденное как-то фрагментарно. А мне бы основные варианты решений (там же вроде много путей) и стратегию. Главные моменты. Типа сначала делаем это, потом это потом это...  Буду благодарен. 
PM MAIL   Вверх
boevik
Дата 25.9.2006, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



Программно или вручную?
Если вручную, то access напрямую открывает excel файлы, в чем проблема то? можно и просто copy-paste.


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Тутанхамец
Дата 25.9.2006, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

Репутация: 4
Всего: 6



Нет, надо вручную. Из VB, а не из VBA. Потом, возможно, надо будет перевести на VC++, но это еще далеко.

Добавлено @ 11:02 
То есть, блин, прошу прощения - ПРОГРАММНО мне надо! smile 
PM MAIL   Вверх
boevik
Дата 25.9.2006, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



Цитата(Тутанхамец @  25.9.2006,  11:01 Найти цитируемый пост)
Нет, надо вручную. Из VB, а не из VBA. Потом, возможно, надо будет перевести на VC++, но это еще далеко. 

Если на VB, то это программно, т.е. надо написать програмку, которая в качестве source возьмет excel файл и загрузит в таблицу на access.
Действительно стратегий куча, от открытия файла excel при помощи Excel object, считывания каждого поля и построения insert statment для загрузки данных в access, 
до связывания файла excel с access при помощи ADOX.

Добавлено @ 11:13 
К примеру, ADOX and excel (пример на сайте microsoft) 
Подцепить excel как таблицу, и тогда останеться перелить данные из одной таблицы в другую, при помощи 
Код

INSERT INTO Table1(..)
SELECT ... FORM Excel_Table



--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Тутанхамец
Дата 25.9.2006, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

Репутация: 4
Всего: 6



Какая-то из этих стратегий наверняка является типичной и общепринятой, а какие-то другие - извращениями. Склонен думать, что общепринятый вариант - это связывание через ADOX. Не мог бы ты дать пример такого связывания или хотя бы "общую стратегию"? 
То бишь:

1) Как делается подключение? 

2) Если через Connection, то как будет выглядеть ConnectionString?

3) Как ADO будет понимать, где таблицы, где столбцы, где ключи и всё прочее? 


PM MAIL   Вверх
boevik
Дата 25.9.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



Можно долго спорить о реализации.
Первый способ, более гибкий, полный контроль за excel файлом, не зависим в какую базу данных данные попадают.

Связывание через ADOX хорошо только для access, при переходе на дугую БД, работать не будет.

Выбирай.


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Тутанхамец
Дата 25.9.2006, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

Репутация: 4
Всего: 6



Я выбрал. Получилось следующее:
Код

Private Sub Form_Load()

    Dim rs1 As ADODB.Recordset
    Dim rs2 As ADODB.Recordset
    Dim mycon1 As New ADODB.Connection
    Dim mycon2 As New ADODB.Connection
    Dim i As Long
   
    mycon1.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=c:\Книга1.xls;Extended Properties=Excel 8.0"
    
    mycon2.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=c:\db2.mdb;"
    
    Set rs1 = mycon1.Execute("SELECT * FROM [Лист1$]", , adCmdText)
        
    
    mycon2.Execute "CREATE TABLE [ИмпортныйЛист]([Код] integer , [Имя] CHAR(20), [Фамилия] CHAR(20) )"
   
    Set rs2 = New ADODB.Recordset
    rs2.Open "SELECT * FROM [ИмпортныйЛист]", mycon2, adOpenDynamic, adLockPessimistic
    
   
    rs1.MoveFirst
    While Not rs1.EOF
        rs2.AddNew
        For i = 1 To rs1.Fields.Count
           On Error Resume Next
            rs2.Fields(i).Value = rs1.Fields(i).Value
            On Error GoTo 0
        Next
        'rs2!Код = i
        rs2.Update
    rs1.MoveNext
    Wend
    
End Sub


Однако есть проблемы:

1) как в SQL-запросе при создании таблицы определить автоувеличивающийся ключ (то, что в Аксесс поле типа "счетчик")?

2) В моем коде если убрать on error..., то вылезет еррор, что "тип поля не совпадает". Как создать таблицу с точно такими же полями, как в заданной таблице? 

3) Может есть какой-то более лаконичный способ копирования записей из таблицы в таблицу?



PM MAIL   Вверх
boevik
Дата 25.9.2006, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



При помощи sql statment можно создать новую таблицу из имеющейся
Код

select * 
into new_table
from old_table

После запуска команды, создатся новая таблица new_table с идентичной структурой, не включая PK, индексы и autonumber.
Поетому первый пункт остается открытым.


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Тутанхамец
Дата 25.9.2006, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

Репутация: 4
Всего: 6



А ничего, что эти таблицы в разных коннекшнах?
PM MAIL   Вверх
boevik
Дата 25.9.2006, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



Цитата(Тутанхамец @  25.9.2006,  12:34 Найти цитируемый пост)
А ничего, что эти таблицы в разных коннекшнах? 

Connection с access? Если с acces, то выполняется запрс и создатся таблица.
Если с excel, то нельзя.



--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Akina
Дата 25.9.2006, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



По-моему, речь шла об экспорте-импорте, а не о связывании... или, как обычно, спросил не то что хотел?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Тутанхамец
Дата 26.9.2006, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

Репутация: 4
Всего: 6



Или как обычно меня не так поняли smile 
Я знаю теперь, как создать рекордсет, связанный с экселевской таблицей. 

Теперь мне надо создать в файле mdb ТОЧНО ТАКУЮ ЖЕ таблицу и скопировать туда данные. В связи с этим два вопроса:

1) как скопировать структуру таблицы?

2) есть ли более простой (чем в моем листинге) или более правильный способ копирования данных из одной таблицы в другую точно такую же? Я не профессиональный программист и в программировании не знаю многих общепринятых вещей. Поэтому всё время думаю, не изобретаю ли велосипед.

PM MAIL   Вверх
Akina
Дата 26.9.2006, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



  • В окне Аксессовой БД переходим на вкладку "Макросы"
  • Жмем "Создать"
  • Указываем макрокоманду "ПреобразоватьЭлектроннуюТаблицу"
  • Нажимаем F1
  • Читаем до просветления



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Тутанхамец
Дата 26.9.2006, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

Репутация: 4
Всего: 6



В буддизме (не дзен) на просветление предполагается тратить не одну жизнь. А я имею дело с необходимостью сравнительно сиюминутного характера. Ты предлагаешь заюзать метод DoCmd.TransferSpreadSheet? Но нет гарантии, что на компе юзера будет Access. Забьём на второй вопрос, оставим первый - как скопировать структуру таблицы, если она неизвестна? Открытый Recordset ведь не позволяет менять набор полей. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0614 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.