Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / TVP и Excel / 13 сообщений из 13, страница 1 из 1
30.05.2012, 16:49
    #37818335
TVP и Excel
Никогда раньше не приходилось особо сталкиваться с макросами в Офисе, посему не знаю даже с какой стороны подойти
Есть книга Excel, нужно взять данные с одного листа(допустим, Лист2), передать их в хранимую процедуру MSSQL и результатами выполнения заполнить некую таблицу на листе1.
Хранимая процедура принимает параметром TVP(nvarchar, int, int)
Вопрос - как это сделать? Единственная мысль пока которая пришла - создать ADODB.Recordset нужной структуры, заполнить его, и передать как параметр для ADODB.Command, но как понимаю это не катит (во всяком случае, тип параметра adUserDefined не прокатывает)
Посоветуйте, в какую сторону смотреть..
...
Рейтинг: 0 / 0
30.05.2012, 16:52
    #37818344
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TVP и Excel
guest_не_люблю_vbaв какую сторону смотреть..В MSSQL есть возможность импортировать данные из файла Эксель, может туда посмотреть?
...
Рейтинг: 0 / 0
30.05.2012, 17:09
    #37818370
TVP и Excel
В MSSQL есть возможность импортировать данные из файла Эксель, может туда посмотреть?
Не, тут просто отчёт построить, в мсскл эти данные и не нужны как бы)
Проще тогда написать формочку какую нибудь, чтобы открывала книгу экселя, брала данные, сама запрашивала сервер и заполняла бы этот отчёт. Но хотелось бы сделать это прямо из самой книги, без внешних приблуд.
...
Рейтинг: 0 / 0
30.05.2012, 17:17
    #37818380
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TVP и Excel
А, прошу прощения, я неправильно прочитал задачу.

guest_не_люблю_vbaсоздать ADODB.Recordset нужной структуры, заполнить его, и передать как параметр для ADODB.Commandнет, у ADODB.Command есть коллекция Parameters - ее и нужно заполнить параметрами
...
Рейтинг: 0 / 0
30.05.2012, 17:19
    #37818385
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TVP и Excel
А можно, если не сильно привередничать просто выполнить из коннекшна команду:
Код: vbnet
1.
Conn.Execute "exec MyProc @Param1='dfdfd', @Param2=5, @Param3=9"
...
Рейтинг: 0 / 0
30.05.2012, 17:38
    #37818424
TVP и Excel
Shocker.Pro,
это если бы процедура принимала несколько скалярных параметров, а она принимает один табличный, поэтому и была мысль заполнить Recordset и попробовать засунуть его как параметр, в общем - мне надо аналог адонетовского SqlDbType.Structured)
...
Рейтинг: 0 / 0
30.05.2012, 17:42
    #37818432
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TVP и Excel
Через ADO вроде бы нельзя передать табличный параметр. Сериализация или последовательные запросы...
...
Рейтинг: 0 / 0
30.05.2012, 17:44
    #37818434
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TVP и Excel
Можно еще открыть рекордсет по записи и занести в него все на стороне клиента. Правда, по сути, это все равно превратится в последовательность запросов.
...
Рейтинг: 0 / 0
30.05.2012, 17:49
    #37818443
TVP и Excel
Жаль.. тогда похоже остаётся крайний случай - формировать XML, и сделать обёртку с помощью sp_xml_preparedocument, наверное, только так
...
Рейтинг: 0 / 0
30.05.2012, 18:33
    #37818512
TVP и Excel
guest_не_люблю_vbaЖаль.. тогда похоже остаётся крайний случай - формировать XML, и сделать обёртку с помощью sp_xml_preparedocument, наверное, только такОстается ещё случай заполнить "из excel" (временную)таблицу на сревере и скормить её процедуре в качестве параметра.
...
Рейтинг: 0 / 0
02.06.2012, 01:43
    #37822331
ElenHim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TVP и Excel
Сам недавно решал подобную проблему для своей новой системы(Excel - SQL Server). В результате продолжительных поисков и исследований, пришёл к выводу, что передачу tvp из Excel в хранимку лучше всего реализовывать через dll. Последовательность
получилась такая:

Посредством ADO подключение к книге Excel(в моём случае - открытой)
Заполнение объекта Table данными
Посредством ADO.NET подключение к SQL Server
Передача объекта Table в хранимую процедуру как параметр

Быстродействие такого решения оказалось сопоставимо с XML на уровне погрешности, а внедрение в проект - на несколько порядков проще.
...
Рейтинг: 0 / 0
02.06.2012, 11:02
    #37822423
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TVP и Excel
ElenHim,

Но необходимо наличие нетфреймворка на клиенте. Если эта программа для себя, то не страшно, но усложняется дистрибуция.
...
Рейтинг: 0 / 0
02.06.2012, 12:55
    #37822476
ElenHim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TVP и Excel
Shocker.Pro,

Это так. Но не стоит забывать, что framework бесплатен, поэтому проблема дистрибуции решается малой кровью.
В моём случае, у половины пользователей фреймворк уже был установлен, остальным - дали указание IT отделу установить.
В конечном счёте всё зависит от критичности использования tvp.

На последок, пара ссылок
Arrays and Lists in SQL Server 2008 Using Table-Valued Parameters
Arrays and Lists in SQL Server 2005 and Beyond When TVPs Do Not Cut it

PS Вообще, имхо, стоит заморочиться с фреймворком, т.к. MS активно продвигают .NET и задвигают VB.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / TVP и Excel / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]