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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2009, 09:12   #1
Lyubov1990
Пользователь
 
Аватар для Lyubov1990
 
Регистрация: 06.04.2009
Сообщений: 34
По умолчанию VBA и SQL SERVER

Здравствуйте! Подскажите пожалуйста как можно с помощью VBA подключиться к БД SQL SERVER? И производить резервное копирование и восстановление БД SQL SERVER с помощью VBA?
Lyubov1990 вне форума Ответить с цитированием
Старый 23.04.2009, 11:19   #2
Юнлинг
Форумчанин
 
Регистрация: 17.10.2008
Сообщений: 239
По умолчанию

Цитата:
Сообщение от Lyubov1990 Посмотреть сообщение
Здравствуйте! Подскажите пожалуйста как можно с помощью VBA подключиться к БД SQL SERVER? И производить резервное копирование и восстановление БД SQL SERVER с помощью VBA?
Вопрос не совсем правильный.
Для резервирования данных SQL сервера существует огромное количество программ которые входят и в комплект самого сервера так и в разные утилиты для него. К примеру если взять MS SQL - то в нем есть средства BackUp vis Restore, в то же время подобная прога есть и в ReskIt - в которой есть более глубокие средства резервирования, позволяющие сохранять не только данные, но и образы (формулы, изображения и прочее). Именно ее я и предпочитаю. что же касается вызова этих программ из VBA, то здесь есть достаточные сложности - вы должны быть зарегистрированны на сервере как SQL-вский супервайзер, а любой даже мало знакомый администратор ни когда не передаст эти права на другой кроме сервера компьютер, даже на свой.

Если вы хотите сохранять на своем компьютере обычные данные используя Excel, не сохраняя образы, то Первое для нормально созданных систем необходимо знать два имени и пароля. Первый - чтение всех данных, второй - запись всех данных. Знание супервайзеровского пароля здесь не поможет - так как он может не иметь право на запись, а Rootовский пароль, мало того что он принципально при генерации SQL сервера разный, спрятан так далеко, что взломать его до сих пор не удалось. Система ображается к нему крайне редко. Второе Вам необходимо знать какую таблицу вы собираетесь резервировать. Здесь тоже есть некоторые нюансы. Некоторые таблицу имеет переадресацию на другие по определенному признаку. По этому если вы напрямую обратитесь к таблице которая имеет точку входа из другой то у Вас просто зависнет компьютер и Сервер, так что спасет только RESET. Третье - когда специальные программы занимаються резервированием, они сохраняют только новые данные, автоматически определяя последную сохраненную дату.
Четвертое, что необходмо знать это тип и название файла, в котором вы будете сохранять данные.
Только когда вы будете знать все эти нюансы то можно приступить к написанию проги резервирования.
для простоты кода я задам некоторые условия
первое имя чтения - ima1, пароль - ima1; имя записи - zap1, пароль- zap2
второе имя таблицы - tab, кол-во полей - 7, первое поле - время записи - имя - vrzap, записывать за предыдущие сутки
четвертое - приемник - сам файл - excel1
адрес в сети - 192.172.0.1
код чтения
Код:
private sub чтение()
dim i as integer
dim j as long
Dim sh1 As Worksheet
Dim Conn As ADODB.Connection
Dim oRes As ADODB.Recordset
Dim oCmd As ADODB.Command
Set Conn = CreateObject("ADODB.Connection")
Set oRes = CreateObject("ADODB.Recordset")
Set oCmd = CreateObject("adodb.command")

sh1= "Лист1"
Conn.Open "Provider=SQLOLEDB.1;Password=ima1;Persist Security 
Info=True;User ID=ima1;Initial Catalog=tab;Data Source=192.172.0.1"
; mode= share deny read
oCmd.ActiveConnection = Conn
str = "tab @cmd='List', @vrzap>'" & date(now()-1) & " 0:00' ,
@vrzap='" & date(now()-1) & " 23:59'"
oCmd.CommandText = str
oCmd.Execute
st = "select * from tab"
oRes.Open st, Conn
j=1
if not oRes.eof then
   do while not oRes.eof
        for i=1 to 7
           sh1.cells(j,i)=oRes.Fields(i-1).value
        next
        j=j+1
        oRes.movenext
   loop
end if
end sub
код для записи
Код:
private sub запись()
dim j as long
Dim sh1 As Worksheet
Dim Conn As ADODB.Connection
Dim oRes As ADODB.Recordset
Dim oCmd As ADODB.Command
Set Conn = CreateObject("ADODB.Connection")
Set oRes = CreateObject("ADODB.Recordset")
Set oCmd = CreateObject("adodb.command")

sh1= "Лист1"
Conn.Open "Provider=SQLOLEDB.1;Password=zap1;Persist Security 
Info=True;User ID=zap1;Initial Catalog=tab;Data Source=192.172.0.1"
; mode= share deny write
oCmd.ActiveConnection = Conn
str = "tab @cmd='List', @vrzap>'" & date(now()-1) & " 0:00' ,
@vrzap='" & date(now()-1) & " 23:59'"
oCmd.CommandText = str
oCmd.Execute
st = "select * from tab
oRes.Open st, Conn
j=1
if isnull(sh1.cells(j,1)
   do while not isnull(sh1.cells(j,1)
        st = "select fields(0)=" cdate(str(sh1.cells(j,1))) .... &"from tab
'каждому пол. добавлять соответствующее значение из таблицы в
'соответствующем формате
        oRes.Add st, Conn
        j=j+1
   loop
end if
end sub
в коде записи отсутствует проверка на наличие такой же записи
Юнлинг вне форума Ответить с цитированием
Старый 06.04.2011, 00:35   #3
Hom_1985
 
Регистрация: 03.04.2011
Сообщений: 5
По умолчанию

Уважаемый ЮНЛИНГ

Не могли бы Вы подсказать с какой книги начать изучение MS SQL 2005? Я работаю в сфере АСУ. Наша SKADA система использует 2005 SQL. Программисты сидят в Индии, что делает очень затруднительным общение с ними. Я прочел книгу Джона Уокенбаха "Профессиональное программирование на vba в Excel 2003". Я уже написал несколько макросов, которые существенно облегчили процесс создание конфигурации базы для SCADA(база создается в EXCEL а потом загружается в SQL). Теперь бы я хотел изучить технологию ADO и научиться с помощью EXCEL вытягивать из SQL разные параметры системы. Это бы сделало меня в моем коллективе джидаем и более конкурентоспособным на рынке специалистов SCADA систем в будущем.
Спасибо

Последний раз редактировалось Hom_1985; 06.04.2011 в 00:40.
Hom_1985 вне форума Ответить с цитированием
Старый 06.04.2011, 17:11   #4
Алексей Трошкин
Пользователь
 
Регистрация: 02.05.2010
Сообщений: 26
По умолчанию

Маленькое добавление к ответу ЮНЛИНГ.
Перед тем как работать с ADO необходимо его отметить галочкой в VBA> Tools>References> выбираем галочкой в списке Microsoft Activex Data Objects 2.0 Libaru и Microsoft Activex Data Objects Recordset 2.0 Library
далее Ok и сохраняем, иначе VBA не видит обьекты ADO.
Алексей Трошкин вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Re:Обмен с SQL Server Lexx_forum Microsoft Office Excel 1 16.02.2009 14:30
Доступ к БД (SQL server) в ОС Windows server 2003 Mann SQL, базы данных 2 07.12.2008 19:15
C# + SQl server kommunist Общие вопросы .NET 0 24.07.2008 21:09
MS SQL Server AlexDoul БД в Delphi 3 22.11.2007 09:33