|
Экспорт из ADP в MDB или XSL с помощью TransferDatabase и TransferSpreadsheet
|
|||
---|---|---|---|
#18+
Hi All ! Есть .ADP проект Access как клиентская форма + MS SQL Server 2000 как БД необходимо ПРОГРАММНО из него выгружать таблицу в локальную аксесовскую БД (.mdb) или Excel-вский файл (.xls) по желанию пользователя. Подскажите как это реализовать ? DTS-пакеты не предлагать т.к. они чудесно работают у пользователя с правами админа, а когда идет речь о локальных, удаленных юзерах с минимум прав, то возникает масса проблем Я пошел другим путем пытаюсь использовать методы TransferSpreadsheet и TransferDatabase Но тут же наткнулся на грабли : Private Sub BtnExport_Click() Dim rs As New ADODB.RecordSet Dim cn As New ADODB.Connection Dim sql As String Set cn = CurrentProject.Connection Set rs = New ADODB.RecordSet sql = "SELECT * FROM [dbo].[Test]" rs.Open sql, cn, adOpenKeyset, adLockOptimistic ' Проверка что исходной таблице есть записи If rs.RecordCount > 0 Then DoCmd.TransferSpreadsheet acExport, , "Test", "D:\TestExcel.xls" DoCmd.TransferDatabase acExport, "Microsoft Access", "D:\TestAccess.mdb", acTable, "Test", "MyTest", False End If End Sub Не работает ни TransferSpreadsheet ни TransferDatabase, ругается одинаково : "Microsoft Office Access can't find the object 'Test.'" Я так понимаю что Application.DoCmd обращается наверное к какому то не тому Connection т.к. в текущем соединении таблица Test присутствует (ее явно видно среди таблиц), она не временная и не вьюха, а вполне стационарная. Впрочем я пробовал и другие таблицы результат тот же. Подскажите куда копать ? или какие-нибудь альтернативные варианты ? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2006, 17:28 |
|
Экспорт из ADP в MDB или XSL с помощью TransferDatabase и TransferSpreadsheet
|
|||
---|---|---|---|
#18+
Копать в форум Access, для начала. А про DTS-пакеты и права админа - поподробнее, плз. Никаких прав админа я своим пользователям не давал, все работает на ура. Надо, конечно, распространить несколько библиотек вместе с приложением, но не более того. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2006, 17:30 |
|
Экспорт из ADP в MDB или XSL с помощью TransferDatabase и TransferSpreadsheet
|
|||
---|---|---|---|
#18+
А про DTS-пакеты и права админа - поподробнее плз... Я так понимаю пакет который из MS SQL Server формально можно вызвать двумя способами : 1) EXEC sp_OACreate 'DTS.Package' + sp_OAMethod 'LoadFromSQLServer' и 'Execute' 2) exec xp_cmdshell dtsrun /Ffilename /Npackage_name /Mpackage_password и команды sp_*и xp_cmdshell - выполняются юзерами с правами админа БД, не меньше Да и необходимые .dll для запуска dts-пакета после копирования на конечный компьютер необходимо зарегистрировать с помощью Regsvr32.exe - что невозможно без прав админа компа (это как раз мой случай). Есть еще какие-нибудь варианта запуска DTS-пакетов ? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2006, 18:15 |
|
Экспорт из ADP в MDB или XSL с помощью TransferDatabase и TransferSpreadsheet
|
|||
---|---|---|---|
#18+
А что, установку тоже с правами админа провести не можете? Опять попытка решить организационную проблему техническими средствами. заставьте админа нормально установить нужные библиотеки. И спокойно используйте dtspkg.dll и объект DTSPackage2 для запуска пакета. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2006, 19:01 |
|
Экспорт из ADP в MDB или XSL с помощью TransferDatabase и TransferSpreadsheet
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2006, 19:05 |
|
Экспорт из ADP в MDB или XSL с помощью TransferDatabase и TransferSpreadsheet
|
|||
---|---|---|---|
#18+
А что установку тоже с правами админа провести не можете? Ну допустим я даже установлю необходимые dll. Но ведь это только решает половину проблемы. И спокойно используйте dtspkg.dll и объект DTSPackage2 для запуска пакета. Сам запуск dts-пакета возможен только юзером с правами сисадмина. Из BOL: Only members of the sysadmin fixed server role can execute sp_OACreate. А как раз этих прав я конечным юзерам давать не могу. Использованные мною TransferDatabase и т.п. этой проблемы лишены ! Необходим только доступ на чтение самой выгружаемой таблицы и не более. Так что DTS (в моем случае) тупиковая ветвь развития. Есть еще идеи ? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2006, 20:11 |
|
Экспорт из ADP в MDB или XSL с помощью TransferDatabase и TransferSpreadsheet
|
|||
---|---|---|---|
#18+
наверно таблица Test создавалась владельцом базы, а адп смотрит в базу под клиентскими правами. пробуйте вместо DoCmd.TransferSpreadsheet acExport, , "Test", "D:\TestExcel.xls" написать DoCmd.TransferSpreadsheet acExport, , "dbo.Test", "D:\TestExcel.xls" ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2006, 20:29 |
|
Экспорт из ADP в MDB или XSL с помощью TransferDatabase и TransferSpreadsheet
|
|||
---|---|---|---|
#18+
пробуйте вместо DoCmd.TransferSpreadsheet acExport "dbo.Test" "D:\TestExcel.xls" Все таблицы в БД созданы под владелцем dbo. И юзер может видеть и их структуру и данные только на чтение А в TransferSpreadsheet я пробовал указывать и так TransferSpreadsheet ... "имя_таблицы" и так "владелец.имя_таблицы" и так "имя_БД.владелец.имя_таблицы" и даже запрос " select * from имя_БД.владелец.имя_таблицы" результат одинаковый : "Microsoft Office Access can't find the object ..." ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2006, 20:57 |
|
Экспорт из ADP в MDB или XSL с помощью TransferDatabase и TransferSpreadsheet
|
|||
---|---|---|---|
#18+
А таблица Test каким образом создавалась? дела в том что ADP-к засасывает служебную инфу через друго конект и порой его надо подтолкнуть чтобы освежил инфу в коллекциях. Например если таблица созданна из кода или в рез-те какого нибудь SELECT INTO после подключения к базе то в в окне базы ее не будет и TransferDatabase ее не увидит Как вариант можно програмно создавать рядом MDB-к с линкованной таблицей и запускать экспорт из него. PS Чтобы узнать о наличии срок не нужно тащить на клиента всю таблицу Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2006, 21:29 |
|
Экспорт из ADP в MDB или XSL с помощью TransferDatabase и TransferSpreadsheet
|
|||
---|---|---|---|
#18+
только что проверил (зашел владельцем) - работает такой вариант Код: plaintext 1.
акс2002, адп ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2006, 21:30 |
|
Экспорт из ADP в MDB или XSL с помощью TransferDatabase и TransferSpreadsheet
|
|||
---|---|---|---|
#18+
только что проверил (зашел владельцем) - работает такой вариант А как вы зашли по владельцем ? У меня владелец dbo, а сисадмин другой логин, под ним и захожу но DoCmd.OutputTo acTable, "[dbo].[TEST]", "MicrosoftExcelBiff8(*.xls)", "D:\Test.mdb", True, "", 0 выдает все то же "Invalid object name 'dbo.TEST'." сам конекшин прописан на уровне ADP т.е. в меню File\Connection Может я каких то нужных модулей не включил в Tool\References ? Latuk: А таблица Test каким образом создавалась? to Latuk: Таблица создавалась средствами MS SQL Servera, как уже писал она статическая, не виртуальная и не динамическая Как вариант можно програмно создавать рядом MDB-к с линкованной таблицей и запускать экспорт из него. Как я понимаю прилинковать таблицу из MsSqlServer в mdb-файл можно только с помощью ODBC - это не удобно т.к. физический путь к базе с конечного компьютера конечный юзер знать не должен, другое дело в ADP - достаточно IP,имя базы,логин и пароль прописанные заранее в свойствах connection проекта. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2006, 22:26 |
|
Экспорт из ADP в MDB или XSL с помощью TransferDatabase и TransferSpreadsheet
|
|||
---|---|---|---|
#18+
>другое дело в ADP - достаточно IP,имя базы,логин и пароль прописанные заранее в свойствах connection проекта. Что мешает вынуть эти значения из свойств проекта и создав MDB-к создать в нем линкованную таблицу или запрос с этими параметрами? При чем здесь юзер? Все произойдет без его участия. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
закрываем нашу базу и подымаем ее как асс приложение и выполняем в ней все че надо В принципе можно создать шаблон MDB-ка хранить его в базе подсасывать с сервера потом тока таблицы в нем приязывать можно даже на морду ниче не выводить а можно веселеньких прогресбоксов напихать ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2006, 23:12 |
|
Экспорт из ADP в MDB или XSL с помощью TransferDatabase и TransferSpreadsheet
|
|||
---|---|---|---|
#18+
специально проверил еще раз под пользовательским логином работают оба варианта выгрузки - DoCmd.TransferSpreadsheet и DoCmd.OutputTo особенности такие 1) DoCmd.TransferSpreadsheet не пишет поверх существующего файла 2) под клиентским логином имя должно быть сформировано как "dbo.ИмяТаблицы" и никак иначе. 3) DoCmd.OutputTo под колиентским логином принимает варианты: "ИмяТаблицы", "dbo.ИмяТаблицы" и даже "[dbo].[ИмяТаблицы]" В последнем случае ругается уже Эксель, считая такое имя незаконным для имени страницы и самостоятельно исправляя ее. все под Офис ИксПи. У меня тоже есть вопрос: Я не знаю как обойтись с такой ситуацией: (очень прошу помочь знающих) пусть есть таблица, создана под интегрированным логином ИмяДомена\ИмяПользователя Как правильно обращаться к объектам с такими владельцами в адо, адп, mdb+odbc? Варианты вида "ИмяДомена\ИмяПользователя.ИмяТаблицы" у меня не прокатывали в адо. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2006, 00:23 |
|
Экспорт из ADP в MDB или XSL с помощью TransferDatabase и TransferSpreadsheet
|
|||
---|---|---|---|
#18+
Снова прошу помощи ... С экпортом в Excel проблема решена чудесно с помощью DoCmd.OutputTo (спасибо Guest-у) экпортирует все что угодно, даже вьюхи - то что мне и надо. Теперь тоже самое проделать бы с локальным .mdb :-( метод TransferDatabase мне уже не подходит т.к. Query он не экспортирует в MDB файл DTS - не рассматриваем Значит остается вариант типа INSERT INTO target SELECT * FROM source Ушел от ADP, сделал MDB в котором хочу прилинковать SQL Server, НО ведь по примеру от Latuk я должен через ODBC указать конкретную папку где лежит mdf моего SQL Server, так ? Но тут вопрос: экспорт будет осуществлять юзер с ограниченными правами и и видеть он будет только выгружаемую вьюху и путь к базе ему в принципе будет не доступен (из-за политики безопасности), что делать в этом случае ? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2006, 00:28 |
|
Экспорт из ADP в MDB или XSL с помощью TransferDatabase и TransferSpreadsheet
|
|||
---|---|---|---|
#18+
>через ODBC указать конкретную папку где лежит mdf моего SQL Server Ничего то ты не понял какая на папка серввера?-Имя сервера или его IP-ник точно так же как в adp Какие права есть такую вьюху и сможет увидеть никакие файлы на сервере юзер видеть не должен он открывает подключение на сервере и сервер пускает его с теми правами которые ему пропишешь ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2006, 10:08 |
|
Экспорт из ADP в MDB или XSL с помощью TransferDatabase и TransferSpreadsheet
|
|||
---|---|---|---|
#18+
iamskiv Но тут вопрос: экспорт будет осуществлять юзер с ограниченными правами и и видеть он будет только выгружаемую вьюху и путь к базе ему в принципе будет не доступен (из-за политики безопасности), что делать в этом случае ? А как насчет создать файловый DSN и через него подключаться? Пользователь в этом случае выбирает только имя DSN? не вникая в подробности... У меня тоже возникала необходимость переносить БД из SQL Server в mdb... Но возникла проблема с TranferDatebase, так как таблицу этой командой можно импортировать только в ЛОКАЛЬНУЮ mdb (без проблем), а мне нужно было в удаленную... Просто имей это в виду, когда будешь пользоваться этой командой.... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2006, 17:27 |
|
Экспорт из ADP в MDB или XSL с помощью TransferDatabase и TransferSpreadsheet
|
|||
---|---|---|---|
#18+
iamskivHi All ! DoCmd.TransferDatabase acExport, "Microsoft Access", "D:\TestAccess.mdb", acTable, "Test", "MyTest", False Это строка неправильная! Вот как делала я: DoCmd.TransferDatabase acImport, "ODBC", myConnDB, acTable, rsForm!Name, rsForm!Name, False, True где myConnDB = "ODBC;DRIVER=SQL SERVER;" & Mid(myConnect, InStr(1, myConnect, "SERVER"), myLen) rsForm!Name - имя таблицы.... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2006, 17:32 |
|
|
start [/forum/search_topic.php?author=Serg197311&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
10ms |
get forum list: |
10ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
26ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 10635ms |
total: | 10783ms |
0 / 0 |