Перенос данных из ячеек таблицы Excel в таблицу базы данных.
Dirc
Дата: Четверг, 02.11.2017, 13:16 |
Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 35
Репутация:
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]
Доброго времени суток. Не могу сделать корректный 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
Сообщение отредактировал 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
Группа: Админы
Ранг: Местный житель
Сообщений: 19409
Репутация:
4558
±
Замечаний:
±
Excel 365 & Mac Excel
Здравствуйте. Почему нельзя заполнять форму сразу в Access? Заархивируйте базу и приложите пример.
Здравствуйте. Почему нельзя заполнять форму сразу в Access? Заархивируйте базу и приложите пример. Pelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Ответить
Сообщение Здравствуйте. Почему нельзя заполнять форму сразу в Access? Заархивируйте базу и приложите пример. Автор - Pelena Дата добавления - 03.11.2017 в 12:33
Dirc
Дата: Пятница, 03.11.2017, 12:54 |
Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 35
Репутация:
0
±
Замечаний:
0% ±
Excel 2010
Доброго времени суток.Почему нельзя заполнять форму сразу в Access?
Рабочий процесс построен так, что сначала идёт расчёт в фале ексель, а результат должен быть добавлен в общею базу данных.Заархивируйте базу и приложите пример.
Пример базы данных и форму прикрепил Решения я уже почти нашёл, осталось только сделать правленый запрос к базе данных.
Доброго времени суток.Почему нельзя заполнять форму сразу в Access?
Рабочий процесс построен так, что сначала идёт расчёт в фале ексель, а результат должен быть добавлен в общею базу данных.Заархивируйте базу и приложите пример.
Пример базы данных и форму прикрепил Решения я уже почти нашёл, осталось только сделать правленый запрос к базе данных. Dirc
Ответить
Сообщение Доброго времени суток.Почему нельзя заполнять форму сразу в Access?
Рабочий процесс построен так, что сначала идёт расчёт в фале ексель, а результат должен быть добавлен в общею базу данных.Заархивируйте базу и приложите пример.
Пример базы данных и форму прикрепил Решения я уже почти нашёл, осталось только сделать правленый запрос к базе данных. Автор - Dirc Дата добавления - 03.11.2017 в 12:54
Pelena
Дата: Пятница, 03.11.2017, 14:44 |
Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 19409
Репутация:
4558
±
Замечаний:
±
Excel 365 & Mac Excel
Обязательно через Recordset? Сделала немного по-другому, посмотрите, может, подойдёт
Обязательно через Recordset? Сделала немного по-другому, посмотрите, может, подойдёт Pelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Ответить
Сообщение Обязательно через Recordset? Сделала немного по-другому, посмотрите, может, подойдёт Автор - Pelena Дата добавления - 03.11.2017 в 14:44
Dirc
Дата: Пятница, 03.11.2017, 15:06 |
Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 35
Репутация:
0
±
Замечаний:
0% ±
Excel 2010
Сделала немного по-другому, посмотрите, может, подойдёт
Большое спасибо, всё отлично работает, подходит идеально !
Сделала немного по-другому, посмотрите, может, подойдёт
Большое спасибо, всё отлично работает, подходит идеально !Dirc
Ответить
Сообщение Сделала немного по-другому, посмотрите, может, подойдёт
Большое спасибо, всё отлично работает, подходит идеально !Автор - Dirc Дата добавления - 03.11.2017 в 15:06
krosav4ig
Дата: Пятница, 03.11.2017, 16:19 |
Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация:
997
±
Замечаний:
0% ±
Excel 2007,2010,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]
вариант с 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
email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
Сообщение отредактировал 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
Группа: Пользователи
Ранг: Новичок
Сообщений: 35
Репутация:
0
±
Замечаний:
0% ±
Excel 2010
И ещё один вопрос по этой же теме. А как должен выглядеть запрос обновления строки. То есть если организация новая он добавляет её в базу, если уже есть, то заменяет информацию о ней.
И ещё один вопрос по этой же теме. А как должен выглядеть запрос обновления строки. То есть если организация новая он добавляет её в базу, если уже есть, то заменяет информацию о ней. Dirc
Сообщение отредактировал Dirc - Вторник, 07.11.2017, 09:19
Ответить
Сообщение И ещё один вопрос по этой же теме. А как должен выглядеть запрос обновления строки. То есть если организация новая он добавляет её в базу, если уже есть, то заменяет информацию о ней. Автор - Dirc Дата добавления - 07.11.2017 в 09:15
Pelena
Дата: Вторник, 07.11.2017, 10:52 |
Сообщение № 8
Группа: Админы
Ранг: Местный житель
Сообщений: 19409
Репутация:
4558
±
Замечаний:
±
Excel 365 & Mac Excel
если уже есть, то заменяет информацию о ней
Думаю, это не совсем правильно. Вы уверены, что при наличии другой даты или другой суммы надо заменять запись?
если уже есть, то заменяет информацию о ней
Думаю, это не совсем правильно. Вы уверены, что при наличии другой даты или другой суммы надо заменять запись?Pelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Ответить
Сообщение если уже есть, то заменяет информацию о ней
Думаю, это не совсем правильно. Вы уверены, что при наличии другой даты или другой суммы надо заменять запись?Автор - Pelena Дата добавления - 07.11.2017 в 10:52
Dirc
Дата: Вторник, 07.11.2017, 11:09 |
Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 35
Репутация:
0
±
Замечаний:
0% ±
Excel 2010
Думаю, это не совсем правильно. Вы уверены, что при наличии другой даты или другой суммы надо заменять запись?
Думаю вы правы.
Думаю, это не совсем правильно. Вы уверены, что при наличии другой даты или другой суммы надо заменять запись?
Думаю вы правы.Dirc
Ответить
Сообщение Думаю, это не совсем правильно. Вы уверены, что при наличии другой даты или другой суммы надо заменять запись?
Думаю вы правы.Автор - Dirc Дата добавления - 07.11.2017 в 11:09
Dirc
Дата: Четверг, 09.11.2017, 12:00 |
Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 35
Репутация:
0
±
Замечаний:
0% ±
Excel 2010
Что-то не могу додумать. Как сделать чтобы проверялись даты в базе данных и если они совпадали, то выполнялся запрос на обновления (UPDATE TOV SET .... WHERE [Дата обработки Заявки]). Если нет добавлялось новая запись (INSERT INTO TOV ([Дата обработки Заявки],[Названи...)
Что-то не могу додумать. Как сделать чтобы проверялись даты в базе данных и если они совпадали, то выполнялся запрос на обновления (UPDATE TOV SET .... WHERE [Дата обработки Заявки]). Если нет добавлялось новая запись (INSERT INTO TOV ([Дата обработки Заявки],[Названи...) Dirc
Сообщение отредактировал 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
Группа: Админы
Ранг: Местный житель
Сообщений: 19409
Репутация:
4558
±
Замечаний:
±
Excel 365 & Mac Excel
Можно попробовать так: в базе данных в таблице TOV создаём уникальный индекс из двух полей Дата и Название. Макросом сначала пытаемся добавить запись, если ошибка (а это значит, что такое сочетание Даты и Названия уже есть в таблице), то обновляем
Можно попробовать так: в базе данных в таблице TOV создаём уникальный индекс из двух полей Дата и Название. Макросом сначала пытаемся добавить запись, если ошибка (а это значит, что такое сочетание Даты и Названия уже есть в таблице), то обновляем Pelena
К сообщению приложен файл:
Dirc.rar
(42.2 Kb)
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Ответить
Сообщение Можно попробовать так: в базе данных в таблице TOV создаём уникальный индекс из двух полей Дата и Название. Макросом сначала пытаемся добавить запись, если ошибка (а это значит, что такое сочетание Даты и Названия уже есть в таблице), то обновляем Автор - Pelena Дата добавления - 09.11.2017 в 18:42
Dirc
Дата: Пятница, 10.11.2017, 09:44 |
Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 35
Репутация:
0
±
Замечаний:
0% ±
Excel 2010
Спасибо, за элегантное решения проблемы!
Спасибо, за элегантное решения проблемы! Dirc
Ответить
Сообщение Спасибо, за элегантное решения проблемы! Автор - Dirc Дата добавления - 10.11.2017 в 09:44