Домашняя страница Undo Do Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Перенос данных из ячеек таблицы Excel в таблицу базы данных. - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Excel и другие приложения » Access » Перенос данных из ячеек таблицы Excel в таблицу базы данных. (Перенос данных из ячеек таблицы Excel в таблицу базы данных.)
Перенос данных из ячеек таблицы Excel в таблицу базы данных.
Dirc Дата: Четверг, 02.11.2017, 13:16 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 31
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Доброго времени суток.

Не могу сделать корректный SQL запрос на добавления новой записи, в базу данных Access из ячеек таблицы Excel.
Таблица TOV в базе данных Table.accdb имеет следующую структуру:
№ п/п = Счетчик (Ключевое поля)
Дата обработки Заявки = Дата и время
Полное название организации = Длинный текст
Кол-во техники, шт = Числовой
СУММА СЧЕТА = Денежный
Вывезли? = Логический
Код обработчика
[vba]
Код
Private Sub CommandButton1_Click()
    connectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & ActiveWorkbook.Path & "\Table.accdb; Jet OLEDB:Database;"
    Dim con As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    Dim sSql As String
    Dim sht As Worksheets
    con.Open connectionString
On Error GoTo errLabel
    
    sSql = "INSERT  TOV (*, *) values('*', '*')"

    rst.Open sSql, con
    con.Close
    Exit Sub
errLabel:
    Resume Next
End Sub
[/vba]
К сообщению приложен файл: Table1.xlsm(23Kb) · 7992843.rar(19Kb)


Сообщение отредактировал Dirc - Пятница, 03.11.2017, 12:51
 
Ответить
СообщениеДоброго времени суток.

Не могу сделать корректный SQL запрос на добавления новой записи, в базу данных Access из ячеек таблицы Excel.
Таблица TOV в базе данных Table.accdb имеет следующую структуру:
№ п/п = Счетчик (Ключевое поля)
Дата обработки Заявки = Дата и время
Полное название организации = Длинный текст
Кол-во техники, шт = Числовой
СУММА СЧЕТА = Денежный
Вывезли? = Логический
Код обработчика
[vba]
Код
Private Sub CommandButton1_Click()
    connectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & ActiveWorkbook.Path & "\Table.accdb; Jet OLEDB:Database;"
    Dim con As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    Dim sSql As String
    Dim sht As Worksheets
    con.Open connectionString
On Error GoTo errLabel
    
    sSql = "INSERT  TOV (*, *) values('*', '*')"

    rst.Open sSql, con
    con.Close
    Exit Sub
errLabel:
    Resume Next
End Sub
[/vba]

Автор - Dirc
Дата добавления - 02.11.2017 в 13:16
Pelena Дата: Пятница, 03.11.2017, 12:33 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11755
Репутация: 2596 ±
Замечаний: 0% ±

Excel 2010, 2016 & Mac Excel
Здравствуйте.
Почему нельзя заполнять форму сразу в Access?
Заархивируйте базу и приложите пример.


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеЗдравствуйте.
Почему нельзя заполнять форму сразу в Access?
Заархивируйте базу и приложите пример.

Автор - Pelena
Дата добавления - 03.11.2017 в 12:33
Dirc Дата: Пятница, 03.11.2017, 12:54 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 31
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Доброго времени суток.
Почему нельзя заполнять форму сразу в Access?

Рабочий процесс построен так, что сначала идёт расчёт в фале ексель, а результат должен быть добавлен в общею базу данных.

Заархивируйте базу и приложите пример.

Пример базы данных и форму прикрепил

Решения я уже почти нашёл, осталось только сделать правленый запрос к базе данных.
 
Ответить
СообщениеДоброго времени суток.
Почему нельзя заполнять форму сразу в Access?

Рабочий процесс построен так, что сначала идёт расчёт в фале ексель, а результат должен быть добавлен в общею базу данных.

Заархивируйте базу и приложите пример.

Пример базы данных и форму прикрепил

Решения я уже почти нашёл, осталось только сделать правленый запрос к базе данных.

Автор - Dirc
Дата добавления - 03.11.2017 в 12:54
Pelena Дата: Пятница, 03.11.2017, 14:44 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11755
Репутация: 2596 ±
Замечаний: 0% ±

Excel 2010, 2016 & Mac Excel
Обязательно через Recordset?
Сделала немного по-другому, посмотрите, может, подойдёт
К сообщению приложен файл: 9078438.xlsm(26Kb)


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеОбязательно через Recordset?
Сделала немного по-другому, посмотрите, может, подойдёт

Автор - Pelena
Дата добавления - 03.11.2017 в 14:44
Dirc Дата: Пятница, 03.11.2017, 15:06 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 31
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Сделала немного по-другому, посмотрите, может, подойдёт

Большое спасибо, всё отлично работает, подходит идеально ^_^ !
 
Ответить
Сообщение
Сделала немного по-другому, посмотрите, может, подойдёт

Большое спасибо, всё отлично работает, подходит идеально ^_^ !

Автор - Dirc
Дата добавления - 03.11.2017 в 15:06
krosav4ig Дата: Пятница, 03.11.2017, 16:19 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1480
Репутация: 599 ±
Замечаний: 0% ±

Excel 2007, 2013
вариант с recordset (с небольшой махинацией :) )
[vba]
Код
Private Sub CommandButton1_Click()
      Dim path$, DbPath$, fieldnames$, values$, connStr$, sql$
10  On Error GoTo CommandButton1_Click_Error
    
20    path = ThisWorkbook.path: DbPath = path & "\Table.accdb"
30    fieldnames = "[Дата обработки Заявки], [Название организации], [Кол-во техники, шт], [СУММА СЧЕТА], [Вывезли?]"
40    values = Join(Array(Format(Me.[B3], "\#yyyy-MM-dd#"), "'" & [B2] & "'", [B4], [B5], [B6] = "Да"), ",")
50    connStr = "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Mode=Read;Extended Properties=text;Data Source=" & path
60    sql = "insert into TOV (" & fieldnames & ") IN '" & DbPath & "' values (" & values & ")"
70    CreateObject("adodb.recordset").Open sql, connStr
        Debug.Print Application.VBE.ActiveCodePane.CodeModule.Name
80  On Error GoTo 0
90    Exit Sub
    
CommandButton1_Click_Error:
      With Application.VBE.ActiveCodePane
          MsgBox "Ошибка " & Err.Number & " (" & Err.Description & _
              ") в процедуре " & .CodeModule.ProcOfLine(.TopLine, 0) & _
              " модуля " & .CodeModule.Name & " на строке " & Erl
      End With
End Sub
[/vba]
К сообщению приложен файл: 5735043.xlsm(20Kb)


(_)Õvõ(_)

Сообщение отредактировал krosav4ig - Суббота, 04.11.2017, 15:10
 
Ответить
Сообщениевариант с recordset (с небольшой махинацией :) )
[vba]
Код
Private Sub CommandButton1_Click()
      Dim path$, DbPath$, fieldnames$, values$, connStr$, sql$
10  On Error GoTo CommandButton1_Click_Error
    
20    path = ThisWorkbook.path: DbPath = path & "\Table.accdb"
30    fieldnames = "[Дата обработки Заявки], [Название организации], [Кол-во техники, шт], [СУММА СЧЕТА], [Вывезли?]"
40    values = Join(Array(Format(Me.[B3], "\#yyyy-MM-dd#"), "'" & [B2] & "'", [B4], [B5], [B6] = "Да"), ",")
50    connStr = "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Mode=Read;Extended Properties=text;Data Source=" & path
60    sql = "insert into TOV (" & fieldnames & ") IN '" & DbPath & "' values (" & values & ")"
70    CreateObject("adodb.recordset").Open sql, connStr
        Debug.Print Application.VBE.ActiveCodePane.CodeModule.Name
80  On Error GoTo 0
90    Exit Sub
    
CommandButton1_Click_Error:
      With Application.VBE.ActiveCodePane
          MsgBox "Ошибка " & Err.Number & " (" & Err.Description & _
              ") в процедуре " & .CodeModule.ProcOfLine(.TopLine, 0) & _
              " модуля " & .CodeModule.Name & " на строке " & Erl
      End With
End Sub
[/vba]

Автор - krosav4ig
Дата добавления - 03.11.2017 в 16:19
Dirc Дата: Вторник, 07.11.2017, 09:15 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 31
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
И ещё один вопрос по этой же теме. А как должен выглядеть запрос обновления строки.
То есть если организация новая он добавляет её в базу, если уже есть, то заменяет информацию о ней.


Сообщение отредактировал Dirc - Вторник, 07.11.2017, 09:19
 
Ответить
СообщениеИ ещё один вопрос по этой же теме. А как должен выглядеть запрос обновления строки.
То есть если организация новая он добавляет её в базу, если уже есть, то заменяет информацию о ней.

Автор - Dirc
Дата добавления - 07.11.2017 в 09:15
Pelena Дата: Вторник, 07.11.2017, 10:52 | Сообщение № 8
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11755
Репутация: 2596 ±
Замечаний: 0% ±

Excel 2010, 2016 & Mac Excel
если уже есть, то заменяет информацию о ней

Думаю, это не совсем правильно. Вы уверены, что при наличии другой даты или другой суммы надо заменять запись?


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
Сообщение
если уже есть, то заменяет информацию о ней

Думаю, это не совсем правильно. Вы уверены, что при наличии другой даты или другой суммы надо заменять запись?

Автор - Pelena
Дата добавления - 07.11.2017 в 10:52
Dirc Дата: Вторник, 07.11.2017, 11:09 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 31
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Думаю, это не совсем правильно. Вы уверены, что при наличии другой даты или другой суммы надо заменять запись?


Думаю вы правы.
 
Ответить
Сообщение
Думаю, это не совсем правильно. Вы уверены, что при наличии другой даты или другой суммы надо заменять запись?


Думаю вы правы.

Автор - Dirc
Дата добавления - 07.11.2017 в 11:09
Dirc Дата: Четверг, 09.11.2017, 12:00 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 31
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Что-то не могу додумать. :( Как сделать чтобы проверялись даты в базе данных и если они совпадали, то выполнялся запрос на обновления (UPDATE TOV SET .... WHERE [Дата обработки Заявки]). Если нет добавлялось новая запись (INSERT INTO TOV ([Дата обработки Заявки],[Названи...)


Сообщение отредактировал Dirc - Четверг, 09.11.2017, 12:01
 
Ответить
СообщениеЧто-то не могу додумать. :( Как сделать чтобы проверялись даты в базе данных и если они совпадали, то выполнялся запрос на обновления (UPDATE TOV SET .... WHERE [Дата обработки Заявки]). Если нет добавлялось новая запись (INSERT INTO TOV ([Дата обработки Заявки],[Названи...)

Автор - Dirc
Дата добавления - 09.11.2017 в 12:00
Pelena Дата: Четверг, 09.11.2017, 18:42 | Сообщение № 11
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11755
Репутация: 2596 ±
Замечаний: 0% ±

Excel 2010, 2016 & Mac Excel
Можно попробовать так:
в базе данных в таблице TOV создаём уникальный индекс из двух полей Дата и Название. Макросом сначала пытаемся добавить запись, если ошибка (а это значит, что такое сочетание Даты и Названия уже есть в таблице), то обновляем
К сообщению приложен файл: Dirc.rar(42Kb)


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеМожно попробовать так:
в базе данных в таблице TOV создаём уникальный индекс из двух полей Дата и Название. Макросом сначала пытаемся добавить запись, если ошибка (а это значит, что такое сочетание Даты и Названия уже есть в таблице), то обновляем

Автор - Pelena
Дата добавления - 09.11.2017 в 18:42
Dirc Дата: Пятница, 10.11.2017, 09:44 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 31
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Можно попробовать так:

Спасибо, за элегантное решения проблемы! :D closed
 
Ответить
Сообщение
Можно попробовать так:

Спасибо, за элегантное решения проблемы! :D closed

Автор - Dirc
Дата добавления - 10.11.2017 в 09:44
Мир MS Excel » Вопросы и решения » Excel и другие приложения » Access » Перенос данных из ячеек таблицы Excel в таблицу базы данных. (Перенос данных из ячеек таблицы Excel в таблицу базы данных.)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!