Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2020, 11:32   #11
Nikita085
Пользователь
 
Регистрация: 04.01.2020
Сообщений: 11
По умолчанию

Благодарю за помощь)
Nikita085 вне форума Ответить с цитированием
Старый 06.01.2020, 13:46   #12
Nikita085
Пользователь
 
Регистрация: 04.01.2020
Сообщений: 11
По умолчанию

Код:
For iCol = 1 To LastCol
             sValues = IIf(iCol > 1, sValues & ", ", "") & _
                        IIf(iCol > 3, "", "'") & _
                        IIf(.Cells(iRow, iCol).Value = 0, "Null", Replace(CStr(.Cells(iRow, iCol).Value), ",", ".")) & _
                        IIf(iCol > 3, "", "'")

С помощью вот такого кусочка создаю строку значений: первые три значения - тестовые, остальные числовые.
Как создать значение с форматом - Дата (к примеру -22)?
Что то не могу разобраться с синтаксисом SQL
Помогите пожалуйста)
Nikita085 вне форума Ответить с цитированием
Старый 06.01.2020, 15:21   #13
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от Nikita085 Посмотреть сообщение
первые три значения - тестовые.
для каких тестов?


Цитата:
Сообщение от Nikita085 Посмотреть сообщение
Что то не могу разобраться с синтаксисом SQL
И где же SQL с которым работаете?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 07.01.2020, 16:42   #14
Nikita085
Пользователь
 
Регистрация: 04.01.2020
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
для каких тестов?
Текстовый формат) Ошибочка при наборе((((



Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
И где же SQL с которым работаете?
sSQL = "INSERT INTO [" & "DataBase" & "] (" & sFields & ") VALUES (" & sValues & ");"

Формируется массив данных sValues и потом вставляется в Access
Nikita085 вне форума Ответить с цитированием
Старый 07.01.2020, 17:26   #15
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Код:
Option Explicit

Sub GenerateSqlStatements()
    Dim rCount As Integer ' max row index
    Dim cCount As Integer ' max col index
    Dim sql As String
    Dim sqlFieldNames As String
    Dim sqlValues As String
    Dim r As Integer ' row index
    Dim c As Integer ' column index
    With Sheets(1)
        rCount = .Cells(.Rows.Count, 1).End(xlUp).Row
        cCount = .Range("T1").Column
        sqlFieldNames = "("
        For c = 1 To cCount
            sqlFieldNames = sqlFieldNames & "[" & .Cells(1, c) & "],"
        Next c
        sqlFieldNames = Left(sqlFieldNames, Len(sqlFieldNames) - 1) & ")"
'        Debug.Print sqlFieldNames
        For r = 2 To rCount
            sqlValues = vbNullString
            For c = 1 To cCount
                If c <= 3 Then
                    sqlValues = sqlValues & "'" & CStr(.Cells(r, c).Value) & "',"
                ElseIf c = 10 Or c = 17 Then ' Data fields
                    sqlValues = sqlValues & "#" & Replace(CStr(Format(.Cells(r, c).Value, "YYYY.MM.DD hh:mm:ss")), ".", "/") & "#,"
                Else
                    sqlValues = sqlValues & "" & CStr(Replace(.Cells(r, c).Value, ",", ".")) & ","
                End If
            Next c
            sqlValues = "(" & Left(sqlValues, Len(sqlValues) - 1) & ")"
            sql = "INSERT INTO [table] " & sqlFieldNames & " VALUES " & sqlValues
'            Debug.Print sql
            ' TODO // SOME CODE HERE TO EVALUATE SQL-STATEMENT
        Next r
    End With
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 07.01.2020, 21:31   #16
Nikita085
Пользователь
 
Регистрация: 04.01.2020
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
Код:
Option Explicit

Sub GenerateSqlStatements()
    Dim rCount As Integer ' max row index
    Dim cCount As Integer ' max col index
    Dim sql As String
    Dim sqlFieldNames As String
    Dim sqlValues As String
    Dim r As Integer ' row index
    Dim c As Integer ' column index
    With Sheets(1)
        rCount = .Cells(.Rows.Count, 1).End(xlUp).Row
        cCount = .Range("T1").Column
        sqlFieldNames = "("
        For c = 1 To cCount
            sqlFieldNames = sqlFieldNames & "[" & .Cells(1, c) & "],"
        Next c
        sqlFieldNames = Left(sqlFieldNames, Len(sqlFieldNames) - 1) & ")"
'        Debug.Print sqlFieldNames
        For r = 2 To rCount
            sqlValues = vbNullString
            For c = 1 To cCount
                If c <= 3 Then
                    sqlValues = sqlValues & "'" & CStr(.Cells(r, c).Value) & "',"
                ElseIf c = 10 Or c = 17 Then ' Data fields
                    sqlValues = sqlValues & "#" & Replace(CStr(Format(.Cells(r, c).Value, "YYYY.MM.DD hh:mm:ss")), ".", "/") & "#,"
                Else
                    sqlValues = sqlValues & "" & CStr(Replace(.Cells(r, c).Value, ",", ".")) & ","
                End If
            Next c
            sqlValues = "(" & Left(sqlValues, Len(sqlValues) - 1) & ")"
            sql = "INSERT INTO [table] " & sqlFieldNames & " VALUES " & sqlValues
'            Debug.Print sql
            ' TODO // SOME CODE HERE TO EVALUATE SQL-STATEMENT
        Next r
    End With
End Sub
Вставил в модуль листа - не переносит в файл Access((
Nikita085 вне форума Ответить с цитированием
Старый 07.01.2020, 23:17   #17
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от Nikita085 Посмотреть сообщение
не переносит в файл Access((
А он и не должен переносить.

Проблемы какие были ?
1)
Цитата:
Сообщение от Nikita085 Посмотреть сообщение
Что то не могу разобраться с синтаксисом SQL
2)
Цитата:
Сообщение от Nikita085 Посмотреть сообщение
Как создать значение с форматом - Дата
макрос показывает как сформировать sql строку. Как ее выполнить - ваша задача
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 11.01.2020, 09:54   #18
Nikita085
Пользователь
 
Регистрация: 04.01.2020
Сообщений: 11
По умолчанию

Aleksandr H.
Спасибо за подсказку!
Буду пробовать привинтить)
Nikita085 вне форума Ответить с цитированием
Старый 12.01.2020, 20:39   #19
Nikita085
Пользователь
 
Регистрация: 04.01.2020
Сообщений: 11
По умолчанию

Добрый вечер!
Уважаемые специалисты по VBA
Привинтил в свой макрос перенос данных из Excel в Access
Код:
Option Explicit

Sub Insert2Access()
    Dim CON As Object: Set CON = CreateObject("ADODB.Connection")
    Dim rCount As Integer ' max row index
    Dim cCount As Integer ' max col index
    Dim sql As String
    Dim sqlFieldNames As String
    Dim sqlValues As String
    Dim r As Integer ' row index
    Dim c As Integer ' column index
    Dim sSQL$
    
    CON.Open IIf(Val(Application.Version) < 12, "Provider='Microsoft.Jet.OLEDB.4.0'", "Provider='Microsoft.ACE.OLEDB.12.0'") & _
            "; Data Source=" & ThisWorkbook.Path & "\Data.accdb" & ";Mode=Share Deny None; Jet OLEDB:Database;"
        With Worksheets("Лист1")
        rCount = .Cells(.Rows.Count, 1).End(xlUp).Row
        cCount = .Range("T1").Column
        sqlFieldNames = "("
        For c = 1 To cCount
            sqlFieldNames = sqlFieldNames & "[" & .Cells(1, c) & "],"
        Next c
        sqlFieldNames = Left(sqlFieldNames, Len(sqlFieldNames) - 1) & ")"
'        Debug.Print sqlFieldNames
        For r = 2 To rCount
            sqlValues = vbNullString
            For c = 1 To cCount
                If c <= 3 Then
                    sqlValues = sqlValues & "'" & CStr(.Cells(r, c).Value) & "',"
                ElseIf c = 10 Or c = 17 Then ' Data fields
                    sqlValues = sqlValues & "#" & Replace(CStr(Format(.Cells(r, c).Value, "YYYY.MM.DD hh:mm:ss")), ".", "/") & "#,"
                Else
                    sqlValues = sqlValues & "" & CStr(Replace(.Cells(r, c).Value, ",", ".")) & ","
                End If
            Next c
            sqlValues = "(" & Left(sqlValues, Len(sqlValues) - 1) & ")"
            sql = "INSERT INTO [table] " & sqlFieldNames & " VALUES " & sqlValues
            CON.Execute sql
        Next r
    End With
    CON.Close
    If Err = 0 Then MsgBox "Перенесено" & rCount - 1 & " строк."
End Sub
:

CON.Execute sql - эта строчка выдает ошибку: Run-time error 2147217904 (80040e10):
Отсутствует значение для одного или нескольких требуемых параметров
Вложения
Тип файла: rar Архив WinRAR.rar (41.4 Кб, 1 просмотров)
Nikita085 вне форума Ответить с цитированием
Старый 12.01.2020, 22:33   #20
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

начните с того что ваше поле [F2] содержит "Анулирован", а в таблице поле F2 числовое.
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Импорт данных из Access в Excel qwertynkk Microsoft Office Access 4 30.05.2013 13:44
Импорт данных из Excel в Access alexvav БД в Delphi 2 22.06.2012 16:17
импорт данных из Excel в Access mr.kot Microsoft Office Access 3 13.11.2011 22:55
Импорт-экспорт данных Excel-Access, и из Access-Excel Людвиг Microsoft Office Access 3 27.10.2011 14:38
импорт данных из access в excel. romale_80 Microsoft Office Access 8 25.03.2010 01:26