Страницы: 1
RSS
Insert данных из excel в БД SQL
 
Добрый день при Insert столкнулась с проблемой выгрузки данных. В частности с конвертацией данных.

Вопрос, можно ли избежать конвертации данных, так как в таблице много столбцов, все разных типов...
Вот что я имею:
Код
Sub DWH_Update_12()
'Выгружаем в DWH
'Производит подключение к БД и выполняет какой-либо скрипт без подключение библиотеки ACTIVEX data ojects 6.0
'
Dim cn As Object
Dim cmd As Object
Dim strSQL As String
Dim sh1 As Worksheet
Dim iRow As Long
Dim ADOErr, r

Set cn = CreateObject("ADODB.Connection")
'cn.Provider = "Microsoft.Jet.OLEDB.4.0"
cn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=usr;Data Source=dc1-findb01\fin;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=MP1806SV;Use Encryption for Data=False;Tag with column collation when possible=False"
 
 
On Error GoTo CnErrorHandler
cn.Open
'Явно начинаем транзакцию во избежание режима AutoCommit=ON
cn.BeginTrans
 
'Создаем команду
Set cmd = CreateObject("ADODB.Command")
cmd.ActiveConnection = cn
'
Workbooks("Pushkin_card.xlsm").Activate
Set sh1 = ActiveWorkbook.Sheets("Встречи")
sh1.[A1].Select
Set r = ActiveCell.CurrentRegion
'
For iRow = 2 To r.Rows.Count

cmd.CommandText = "Insert into usr.supr.checkin_b(" _
& "kod,kod_prm,MR,OC,locality,adress,Open_PRM,number_of_windows_b,Format ,Col1,Col2,Col3,Col4,Col5,Col6,Col7,Col8,Col9,Col10,Col11,Col12,Col13,Col14,Col15, Col16, Col17, Col18, Col19, Col20, Col21, Col22, Col23, Col24, Col25, Col26, Col27, Col28, Col29, Col30, Col31, Col32" _
& ")Values (" _
& "convert(float,(replace('" & Cells(iRow, 1).Value & "',',','.')))," & "convert(float,(replace('" & Cells(iRow, 2).Value & "',',','.')))," '" & .Cells(iRow, 3) &, "'& "convert(datetime,(replace('" & Cells(iRow, 3).Value & "','dd.mm.yyyy','yyyy-mm-dd')),103)," & "convert(float,(replace('" & Cells(iRow, 5).Value & "',',','.'))))"
'
'MsgBox cmd.CommandText
'test = r.Cells(iRow, 2).Value
'MsgBox "Iter: " & iRow & " " & test
'
cmd.Execute
'
Next iRow
'
cn.CommitTrans
'
cn.Close
'
Exit Sub
'
CnErrorHandler:
For Each ADOErr In cn.Errors        'Отладчик ошибок подключения
    MsgBox "№ ошибки " & ADOErr.Number & Chr(10) & _
    "Описание: " & ADOErr.Description & Chr(10) & _
    "Источник: " & ADOErr.Source, vbCritical
    Debug.Print "№ ошибки " & ADOErr.Number & Chr(10) & _
    "Описание: " & ADOErr.Description & Chr(10) & _
    "Источник: " & ADOErr.Source
Next
cn.Close
Set cn = Nothing
'
End Sub
 
Цитата
Татьяна Басова написал:
можно ли избежать конвертации данных
ИМХО:
можно, если все данные однотипные :)
Например, при выгрузке дат из Excel в Access я пользуюсь числовым форматом а не датами, обратный порядок такой же. Нет заморочек с форматами дат в Access, а в Excel c преобразованием числа в дату нет проблем. Возможно есть и другие способы проще и надежней, но я так привык делать :)
 
:)
Цитата
Татьяна Басова написал: Добрый день при Insert
 
vikttur, Вить  это как по SMTP нужно сперва (HELO) поздороваться, а уже потом вставлять, прости господи.  :D
По вопросам из тем форума, личку не читаю.
 
Доброе время суток.
Цитата
_Igor_61 написал:
Нет заморочек с форматами дат в Access
А почему не используете ADODB.Command с параметрами для вставки? Какие тут подводные камни в Access? Для SQL Sever подобная конструкция вполне себе производительная.
Татьяна Басова, почитайте.
Изменено: Андрей VG - 08.10.2021 15:36:13
 
Андрей VG, добрый вечер! По одной простой причине - я этого не знаю :) Поэтому тупо перекидываю числа туда и обратно, и все работает :) Пользователь все равно кнопками с макросами из Excel управляет и в Access не лезет :)  
 
Цитата
_Igor_61 написал:
я этого не знаю
Спасибо, тоже улыбнуло :)
Страницы: 1
Наверх