Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Экспорт из Excel в SQL Server
 
Здравствуйте, дорогие формумчане. Я столкнулся с проблемой и завис...
"Перевернул" просторы интернета, но может вопрос не так задаю. Стоит такая задача. Есть таблица, извлеченная из SQL Server в данную таблицу добавлен столбец, в строке которого появляется единичка, когда изменяешь что-либо в строке. Сам столбец скрыт, так как он не нуждается в переносе в ДБ. Но благодаря этому столбцу и должен совершаться экспорт в SQL Server.
 
Dmitry95, приложите файлик. И что такое ДБ? БД может?!
 
не имела дел с SQL Server
но пример использования мне видится такой как здесь (от R Dmitry 11 Мар 2012 16:50:40 )
Код
strSql = "SELECT * INTO [odbc;DRIVER=SQL Server;SERVER=ююю;DATABASE=ббб].XLImport " & _   
"FROM [nnnn$]"   
добавить критерий отбора WHERE (условие отбора) в инструкцию SQL... - и шлифовать под конкретную задачу...
видимо, как вариант
Изменено: JeyCi - 3 Апр 2015 08:55:56
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Да, БД)
 
Цитата
должен совершаться экспорт в SQL Server
Что в вашем понимании экспорт?
Обновление измененных данных?
Добавление новых?
 
Импортом пользуюсь только через параметры, во избежании не корректных вводом от пользователя, вот пример.
Если не понятно обращайтесь:
Скрытый текст
Изменено: Xapa6apga - 3 Апр 2015 16:45:55
 
Doober, в данном случае оба варианта, так как при изменении уже существующих данных, эти изменения должны вноситься в Базу. но и при добавлении новых СТРОК, они так же должны добавиться в Базу.
P.s. Ориентируясь правее единицы скрытого столбца
Изменено: Dmitry95 - 6 Апр 2015 07:21:01
 
Всей кухни не понял,но у себя сделал бы так.
Написал хранимую процедуру.
Отправлял бы ей измененные строки.пускай сама разбирается.что обновлять.что добавлять.
Если таблицы по структуре одинаковые.то хватит и одной процедуры,иначе под каждую писать надо.
Могу пример и процедуры  и макроса под ваш  файл  сделать.
 
Для того, чтобы "вернуть" запись в БД есть два варианта: либо запись новая для БД либо запись уже естьи ее надо обновить.
Если новая, то нет проблем - INSERT ... и если в БД не нарушена уникальность ключа, то все добавится, иначе ошибка ключа.
А вот если надо изменить - это уже UPDATE, а он требует для каждой записи ID - уникального ключа. Иначе БД просто не понимает что ей изменять.
В БД в обновляемой таблице есть уникальный ключ? Если это "Код_клиента", то добавьте в SQL-text "WHERE Столбец1=1"
Неизлечимых болезней нет, есть неизлечимые люди.
 
TheBestOfTheBest, в данном случае нужно делать через UpDate . и да "Код_клиента" это уникальный ключ.
Я сделал цикл, командой "бегает" по колонкам и если в скрытом столбце есть 1 то он запоминает эту строку , и теперь нужно,чтобы эти строки переносились в БД .
 
Синтаксис зависит от типа сервера, примерно так
Скрытый текст
Т.е. смысл в том, что при выполнении SELECTа при выборке вы посылали серверу текстовую команду. При UPDATE также надо сформировать и послать команду на сервер.
Неизлечимых болезней нет, есть неизлечимые люди.
 
Всем спасибо!!!!!!!!!
С горем пополам разобрался. Работает идеально), хотя и пришлось в некоторых местах искать обходные пути))
 
Может покажете результат?
Неизлечимых болезней нет, есть неизлечимые люди.
 
Ну так как у меня работает все через форму, я все установил на кнопку:
Код
Private Sub CommandButton2_Click()

    Dim cn As New ADODB.Connection
    Set cn = CreateObject("ADODB.Connection")
       
    
    cn.Provider = "SQLOLEDB.1"


    cn.ConnectionString = "Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=" + UserForm1("ComboBox1") + ";Data Source=" + UserForm1("TextBox1") + ";Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=CB901666;Use Encryption for Data=False;Tag with column collation when possible=False"
    
    
  cn.Open
  
 
  Dim nacstr As Long 'начальная строка
  nacstr = 2
  Dim pstr As Long 'конечная строка
  pstr = Cells(Rows.Count, 1).End(xlUp).row
  Dim kolnach As Long
  kolnach = 3
  Dim kolpas As Long
  kolpas = Cells(1, Columns.Count).End(xlToLeft).Column
    
    For i = nacstr To pstr
        If Cells(i, 2).Value = 1 Then
            For x = kolnach To kolpas
            Dim a As String
            a = Sheets("Лист1").Cells(1, x).Value
            Dim b As String
            b = Sheets("Лист1").Cells(i, x).Value
            Dim c As String
            c = Sheets("Лист1").Cells(1, 1)
            Dim d As String
            d = Sheets("Лист1").Cells(i, 1)
            Dim e As String
            e = UserForm1("ComboBox2").Value
            cn.Execute "update " + e + " set " + a + " = '" + b + "' Where " + c + " = '" + d + "'"
            
            Next x
            
        End If
    
    Next i
     UserForm1.Hide
End Sub
Страницы: 1
Читают тему (гостей: 1)