Форум программистов, компьютерный форум, киберфорум
Наши страницы

VBA

Войти
Регистрация
Восстановить пароль
 
 
Duff072
0 / 0 / 0
Регистрация: 31.05.2015
Сообщений: 11
#1

Получить файл из БД MS SQL server - VBA

31.05.2015, 12:12. Просмотров 1376. Ответов 23
Метки нет (Все метки)

Здравствуйте уважаемые знатоки, прошу помощи и совета - весь интернет перерыл, не нашёл похожего решения (плохо искал?).

На работе появилась необходимость немного автоматизировать рабочий процесс:
В Excel написан макрос, который анализирует подключенные к нему таблицы с SQL, находит новые нужные записи, обрабатывает их, по внутренним отчётам (другие книги excel), добывает недостающую информацию, и шлёт Email заинтересованным лицам. Прав администратора нет, поэтому сильно ограничены в действиях.

Так столкнулся с проблемой, что часть нужной информации лежит на SQL во полях blob во внутреннем неизвестном формате, и единственным местом, где что-то хоть как-то структурировано: файлик xml, который содержит всю необходимую информацию.
Находится в таблице: EDMsgXML, в которой есть столбцы EnvelopeID, Msg, Zip.
из которых:
EnvelopeID - идентификатор (достаточно легко можно найти, и загнать в переменную)
Msg - искомый файлик XML
Zip - признак архива (в архиве файл или нет).

Собственно вопрос: возможно ли средствами VBA добыть файл с SQL, сохранить на диск и, если нужно разархивировать?
Заранее благодарю за любую помощь

Добавлено через 3 часа 12 минут
Вот, пытаюсь по инструкции: http://codevb.narod.ru/db_3.html
Файл создается, но его размер 0.
Что может быть? Делаю по примерам, пытаюсь читать мануалы, но не хватает опыта и знаний
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2015, 12:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Получить файл из БД MS SQL server (VBA):

[Microsoft][ODBC SQL Server Driver][SQL Server]Login failed- User: Reason: Not defined as a valid user of a trusted SQL Server connection - C# ASP.NET
Login failed- User: Reason: Not defined as a valid user of a trusted SQL Server connection Вот такую ошибку выдает. В DSN...

Получить тип столбца из таблицы в SQL Server посредством Linq to SQL - LINQ
Как получить тип столбца из таблицы в SQL Server посредством Linq to SQL или используя любой другой способ.

Получить список таблиц из БД MS SQL Server - C#
Хочу получит список таблиц из БД но не получается. Как правильно делать ?? string connStr = @"Data Source=HOME\SQLEXPRESS; ...

Получить список пользователей(MS SQL Server, пишу на C#) - C#
Здравствуйте! Интерисует такой вопрос, как мне получить список всех пользователей определенного сервера и как получить список...

получить данные из БД SQL server по значению textbox - C#
Добрый день. Сделал програмулину которая записывает инфу с текстбоксов в бд, все нормально работает. private void...

Как настроить MS SQL Server, чтобы через Access, можно было редактировать таблицы MS SQL Server? - SQL Server
ВОПРОС: Как настроить MS SQL Server, чтобы через Access, можно было редактировать таблицы MS SQL Server? MS SQL Server...

23
Duff072
0 / 0 / 0
Регистрация: 31.05.2015
Сообщений: 11
31.05.2015, 14:16  [ТС] #2
Определенный бред удалось получить:
Файлики создает (во вложении пример), разного размера для разных записей (как и должно быть), но, странные какие-то. (может проблема в кодировке?). А может на SQL не в бинарном виде хранится? Как проверить?

Есть мысли у кого-нибудь?

Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Public Function LoadFileFromDB(FileName As String, _
    RS As Object, FieldName As String) As Boolean
    Dim iFileNum As Integer
    Dim lFileLength As Long
    Dim abBytes() As Byte
    Dim iCtr As Integer
    
    'On Error GoTo ErrorHandler
    If Not TypeOf RS Is ADODB.Recordset Then Exit Function
   iFileNum = FreeFile
    Open FileName For Binary As #iFileNum
        lFileLength = LenB(RS(FieldName))
        abBytes = RS(FieldName).GetChunk(lFileLength)
        Put #iFileNum, , abBytes()
    Close #iFileNum
    LoadFileFromDB = True
ErrorHandler:
End Function
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub sql()
Dim sConn As String
Dim oConn As New ADODB.Connection
Dim Ors As New ADODB.Recordset
uid = "'37588AA9-3998-4023-99FC-87746CC16E69'"
sConn = ("DRIVER=......")
oConn.Open sConn
Ors.Open ("SELECT Msg FROM GTD.dbo.EDMsgsXML EDMsgsXML WHERE (EnvelopeID=" & uid & ")"), oConn, adOpenKeyset, adLockOptimistic
LoadFileFromDB "C:\....zip", Ors, "Msg"
Ors.Close
End Sub
0
Вложения
Тип файла: zip 02.zip (13.1 Кб, 6 просмотров)
UBUNTU
203 / 128 / 25
Регистрация: 04.02.2015
Сообщений: 697
31.05.2015, 16:28 #3
В чем проблема сейчас?

Добавлено через 4 минуты
И вопрос, а есть ли у Вас разрешение на работу с данной таблицей это главный момент всей вашей затеи...
1
Duff072
0 / 0 / 0
Регистрация: 31.05.2015
Сообщений: 11
31.05.2015, 16:28  [ТС] #4
не могу понять, в каком виде хранятся данные. Соответственно как их сохранять?
А как проверить - незнаю. В прошлом сообщении вложил результат выгрузки как бинарные данные.
А может они в 16-м виде?
0
UBUNTU
203 / 128 / 25
Регистрация: 04.02.2015
Сообщений: 697
31.05.2015, 16:31 #5
Проверьте сколько записей в наборе после выполнения Ors.Open ("SELECT Msg FROM GTD.dbo.EDMsgsXML EDMsgsXML WHERE (EnvelopeID=" & uid & ")"), oConn, adOpenKeyset, adLockOptimistic

Добавлено через 17 секунд
И вопрос, а есть ли у Вас разрешение на работу с данной таблицей это главный момент всей вашей затеи...
0
Duff072
0 / 0 / 0
Регистрация: 31.05.2015
Сообщений: 11
31.05.2015, 16:45  [ТС] #6
Разрешение есть: если в Excel мастером добавить данные - добавляется, за исключением поля Msg. Так-же с этой таблицей работает программа, запущенная от моего имени.

А как проверить сколько записей? (полез курить учебники)

Что интересно, если выгрузить как строчки:
Кликните здесь для просмотра всего текста
Вместо
Visual Basic
1
2
3
4
5
    Open FileName For Binary As #iFileNum
        lFileLength = LenB(RS(FieldName))
        abBytes = RS(FieldName).GetChunk(lFileLength)
        Put #iFileNum, , abBytes()
    Close #iFileNum
написать
Visual Basic
1
2
3
4
5
6
    Open FileName For Output As #iFileNum
    lFileLength = LenB(RS(FieldName))
    
    abBytes = RS(FieldName).GetChunk(lFileLength)
    Print #iFileNum, abBytes()
    Close #iFileNum

ТО выгружает 7 Кб, вместо 14. - что это даёт не знаю.

P.S. В VBA можно сказать не силен. Делаю в основном по примерам, пытаюсь разобраться, методом проб и ошибок.
Голова пухнет уже .
0
UBUNTU
203 / 128 / 25
Регистрация: 04.02.2015
Сообщений: 697
31.05.2015, 17:09 #7
Visual Basic
1
MsgBox Ors.RecordCount
Добавлено через 57 секунд
Архив поврежденный.
0
Duff072
0 / 0 / 0
Регистрация: 31.05.2015
Сообщений: 11
31.05.2015, 17:26  [ТС] #8
Запись одна
(работает так: MsgBox Ors.RecordCount, по Вашему - ругается)

То что архив поврежден, я понял, а что с этим делать - х.з.

Вывожу как бинарные данные, (тогда там должен быть набор "0" и "1")?
А могут они там храниться в 16ричном виде? как их тогда вывести? (или бред несу?)
0
UBUNTU
203 / 128 / 25
Регистрация: 04.02.2015
Сообщений: 697
31.05.2015, 17:40 #9
А можно через удаленку тимвивер увидеть? Мне базу делать лень
0
Duff072
0 / 0 / 0
Регистрация: 31.05.2015
Сообщений: 11
31.05.2015, 17:48  [ТС] #10
К сожалению на работе всё порезано извне.
Шансов никаких - пробовали

В Microsoft Query эта таблица выглядит так: (вложение)
0
Миниатюры
Получить файл из БД MS SQL server  
UBUNTU
203 / 128 / 25
Регистрация: 04.02.2015
Сообщений: 697
31.05.2015, 18:32 #11
Duff072, А возможно ли, что файл шифруется? Это похоже на считай в БД файл и зашифрованный.
0
Duff072
0 / 0 / 0
Регистрация: 31.05.2015
Сообщений: 11
31.05.2015, 18:51  [ТС] #12
UBUNTU, спасибо за помощь.
На сколько есть информации на форуме разработчика - нет не шифрованный.
Задал им вопрос по поводу как от там хранится, и как его оттуда добыть - пока нет ответа.

Нашёл ещё по теме сохранения и записи:
https://support.microsoft.com/ru-ru/kb/194975
0
Duff072
0 / 0 / 0
Регистрация: 31.05.2015
Сообщений: 11
01.06.2015, 17:05  [ТС] #13
Всё-таки прошу помощи:
Со слов разработчика, там всё лежит в явном виде, и ничто не должно мешать его получить, правда и подсказать, как сделать на VBA не могут.

Во вложении 2 примера (один файл выгружен VBA, второй программой).

Есть мысли у кого-нибудь?
0
Вложения
Тип файла: zip Новая папка.zip (14.8 Кб, 8 просмотров)
UBUNTU
203 / 128 / 25
Регистрация: 04.02.2015
Сообщений: 697
02.06.2015, 05:51 #14
Чтобы вам помочь дайте мне скрипт sql этой таблицы
0
Kubuntovod
932 / 110 / 24
Регистрация: 14.01.2013
Сообщений: 520
02.06.2015, 07:52 #15
Цитата Сообщение от Duff072 Посмотреть сообщение
Со слов разработчика, там всё лежит в явном виде, и ничто не должно мешать его получить, правда и подсказать, как сделать на VBA не могут.
Пусть покажут, как сделать на любом языке. Ибо, по сути, разница только в синтаксисе.
0
02.06.2015, 07:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2015, 07:52
Привет! Вот еще темы с ответами:

Как средствами джавы реализовать просмотр базы данных Access, SQL Server, SQL Server Compact и запись в нее? - Программирование Android
---

Как можно осуществить репликацию между офисной БД (MS SQL Server) и БД в Интернете (MS SQL Server) ? - C# ASP.NET
Подскажите пожалуйста, как можно осуществить репликацию между офисной БД (MS SQL Server) и БД в Интернете (MS SQL Server) и где об этом...

Подключиться к SQL 2000. BASE_STRING = 'Driver={SQL Server};Server=(local);Database=mybase; - C# ASP.NET
Пишу поключение BASE_STRING = 'Driver={SQL Server};Server=(local);Database=mybase;', тестирую соединение в редакторе (Ultradev), все...

Как получить доступ к БД MS SQL Server с помощью IIS 4 - SQL Server
Как получить доступ БД MS SQL Server, установленную на одном компьютере (NT Server 4.0), с Internet Information Server 4.0, установленным...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru