Здравствуйте boa, воспользовался Вашим макросом для переноса данных написаным для rtv206, в результате выполнения выскакивает ошибка: Run-time error -2147217900 (80040e14) Ошибка синтаксиса (пропущен оператор) в выражении запроса Подскажите как исправить?
Здравствуйте boa, воспользовался Вашим макросом для переноса данных написаным для rtv206, в результате выполнения выскакивает ошибка: Run-time error -2147217900 (80040e14) Ошибка синтаксиса (пропущен оператор) в выражении запроса Подскажите как исправить?Nikita085
Здравствуйте, Nikita085, Это частный случай. Для того чтобы не было ошибок надо передавать данные в соответствующем формате. а увас TestTimeDate в таблице Access числовое поле, а в Excel "04.11.2019 00:30:16" и таких несоответствий... в Access поле "F2" имеет формат Long Integer, a в Excel - "Анулирован" Форматы данных, во-первых должны совпадать, а во-вторых, в SQL-запросе, надо тоже соблюдать синтаксис. число, текст и дата передаются по разному
Здравствуйте, Nikita085, Это частный случай. Для того чтобы не было ошибок надо передавать данные в соответствующем формате. а увас TestTimeDate в таблице Access числовое поле, а в Excel "04.11.2019 00:30:16" и таких несоответствий... в Access поле "F2" имеет формат Long Integer, a в Excel - "Анулирован" Форматы данных, во-первых должны совпадать, а во-вторых, в SQL-запросе, надо тоже соблюдать синтаксис. число, текст и дата передаются по разномуboa
Сообщение отредактировал boa - Суббота, 04.01.2020, 15:56
Nikita085, Даже не знаю чем вам помочь... сделать все за вас? - мне это не интересно А объяснять основы языка запросов - дык, я ж не препад Из того примера, что вы приложили, можно сделать вывод, что и в базах данных вы тоже не разбираетесь Попробуйте в Access сделать нужную таблицу, создайте в конструкторе запрос на добавление данных и посмотрите синтаксис в SQL-пердставлении. Может это вам поможет...
Nikita085, Даже не знаю чем вам помочь... сделать все за вас? - мне это не интересно А объяснять основы языка запросов - дык, я ж не препад Из того примера, что вы приложили, можно сделать вывод, что и в базах данных вы тоже не разбираетесь Попробуйте в Access сделать нужную таблицу, создайте в конструкторе запрос на добавление данных и посмотрите синтаксис в SQL-пердставлении. Может это вам поможет...boa
Коли дело дошло до курсовой, то значит материал вам все же давали а то, что вы его не выучили, так что ж ... есть ветка "фриланса", обратитесь туда. За вознаграждение кто-то возьмется
Коли дело дошло до курсовой, то значит материал вам все же давали а то, что вы его не выучили, так что ж ... есть ветка "фриланса", обратитесь туда. За вознаграждение кто-то возьметсяboa
Nikita085, в чём Ваша задача? Вы вклинились в чужую тему, что уже против Правил форума. Если Вам надо просто импортировать данные из Excel в Access, зачем вообще макрос? Используйте встроенное средство Access (вкладка Внешние данные -- Импорт -- Excel) Если у вас другая задача, создайте свою тему и опишите её (задачу).
Nikita085, в чём Ваша задача? Вы вклинились в чужую тему, что уже против Правил форума. Если Вам надо просто импортировать данные из Excel в Access, зачем вообще макрос? Используйте встроенное средство Access (вкладка Внешние данные -- Импорт -- Excel) Если у вас другая задача, создайте свою тему и опишите её (задачу).Pelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
boa, не подскажите как сделать если ошибка при переносе, то выдавать сообщение с текстом "Данные не перенесено. Попробовать еще раз", и после этого запустить макрос переноса еще раз на выполнение, у меня выдает ошибку. Использую такой код. [vba]
Код
Sub Insert2Access() Dim CON As Object: Set CON = CreateObject("ADODB.Connection") Dim iRow&, iCol&, LastRow&, LastCol& Dim sFields$, sValues$, sSQL$
For iCol = 1 To LastCol ' создаем строку с названиями полей sFields = IIf(iCol > 1, sFields & ", ", "") & "[" & .Cells(1, iCol).Value & "]" Next iCol
For iRow = LastRow To LastRow ' создаем строку значений For iCol = 1 To LastCol sValues = IIf(iCol > 1, sValues & ", ", "") & _ IIf(iCol > 22, "", "'") & _ IIf(.Cells(iRow, iCol).Value = 0, "Null", Replace(CStr(.Cells(iRow, iCol).Value), ",", ".")) & _ IIf(iCol > 22, "", "'") Next iCol sSQL = "INSERT INTO [" & "table" & "] (" & sFields & ") VALUES (" & sValues & ");" 'Debug.Print sSQL 'Заполняем таблицу данными CON.Execute sSQL Next iRow End With CON.Close If Err > 0 MsgBox("Данные не перенесено. Попробовать еще раз", vbYesNo, "111") = vbYes Then Insert2Access End If
End Sub
[/vba]
boa, не подскажите как сделать если ошибка при переносе, то выдавать сообщение с текстом "Данные не перенесено. Попробовать еще раз", и после этого запустить макрос переноса еще раз на выполнение, у меня выдает ошибку. Использую такой код. [vba]
Код
Sub Insert2Access() Dim CON As Object: Set CON = CreateObject("ADODB.Connection") Dim iRow&, iCol&, LastRow&, LastCol& Dim sFields$, sValues$, sSQL$
Здравствуйте, rtv206, во первых у вас до строки "If Err > 0 ..." не дойдет, т.к. у вас нет обработчика ошибок в коде. Код просто остановится на месте ошибки. во-вторых без файлов нельзя понять где ошибка. и в третьих, если у вас ошибка произойдет после частичного импорта, вы опять все данные будете импортировать с начала?
Здравствуйте, rtv206, во первых у вас до строки "If Err > 0 ..." не дойдет, т.к. у вас нет обработчика ошибок в коде. Код просто остановится на месте ошибки. во-вторых без файлов нельзя понять где ошибка. и в третьих, если у вас ошибка произойдет после частичного импорта, вы опять все данные будете импортировать с начала?boa
Сообщение отредактировал boa - Воскресенье, 12.04.2020, 23:43
если у вас ошибка произойдет после частичного импорта
Используя макрос написаный Вами частичного импорта не приходилось встречать. Были ошибки при переносе данных когда не соответствовали названия столбцов, ошибка с типом поля - текст, цифра, и ошибка при открытии файла по сети другими пользователями
если у вас ошибка произойдет после частичного импорта
Используя макрос написаный Вами частичного импорта не приходилось встречать. Были ошибки при переносе данных когда не соответствовали названия столбцов, ошибка с типом поля - текст, цифра, и ошибка при открытии файла по сети другими пользователямиrtv206
а в инете, при желании, найдете множество решений.
Ну а под скрепкой ваш макрос с оператором "On Error Resume Next"
[vba]
Код
Sub Insert2Access() Dim CON As Object: Set CON = CreateObject("ADODB.Connection") Dim iRow&, iCol&, LastRow&, LastCol& Dim sFields$, sValues$, sSQL$ Dim ErrHandler As Label
On Error Resume Next ' если в макросе произойдет ошибка, то макрос не остановится и пойдет дальше. _ Не самое лучшее решение но позволит дойти до проверки If Err.Number <> 0 Then
а в инете, при желании, найдете множество решений.
Ну а под скрепкой ваш макрос с оператором "On Error Resume Next"
[vba]
Код
Sub Insert2Access() Dim CON As Object: Set CON = CreateObject("ADODB.Connection") Dim iRow&, iCol&, LastRow&, LastCol& Dim sFields$, sValues$, sSQL$ Dim ErrHandler As Label
On Error Resume Next ' если в макросе произойдет ошибка, то макрос не остановится и пойдет дальше. _ Не самое лучшее решение но позволит дойти до проверки If Err.Number <> 0 Then
boa, добрый вечер) В очередной раз обращаюсь к Вам за помощью: При переносе данных в Access, если ячейка в Excel пустая то в Access переносится Null. Как прописать макрос так что бы при пустой ячейке в Excel в Access переносилось тоже пустое поле?
boa, добрый вечер) В очередной раз обращаюсь к Вам за помощью: При переносе данных в Access, если ячейка в Excel пустая то в Access переносится Null. Как прописать макрос так что бы при пустой ячейке в Excel в Access переносилось тоже пустое поле?rtv206
rtv206, Здравствуйте, NULL - это и есть пустота. не путайте с "0" когда в ячейке пустота, то для VBA кода это действительно "0" и синтаксис SQL-запроса будет выглядеть как "Inser into ... value(..., 0, ...);" а что бы в Access таблицу записалось пустое значение, заменить "0" на "Null", т.е. "Inser into ... value(..., Null, ...);" , без обрамляющих кавычек.
rtv206, Здравствуйте, NULL - это и есть пустота. не путайте с "0" когда в ячейке пустота, то для VBA кода это действительно "0" и синтаксис SQL-запроса будет выглядеть как "Inser into ... value(..., 0, ...);" а что бы в Access таблицу записалось пустое значение, заменить "0" на "Null", т.е. "Inser into ... value(..., Null, ...);" , без обрамляющих кавычек.boa
Сообщение отредактировал boa - Понедельник, 04.05.2020, 21:44