Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft Access |
![]() ![]() |
Vakho Member Откуда: --------- Сообщений: 422 |
В MS ACCESS 2003 есть возможность вручную импортировать (Import...) и экспортировать (Export...) таблицы различного формата: dBASE (III, IV, 5), EXCEL (xls), CSV, TXT ... А как при помощи Visual Studio 2010 Ultimate можно запрограммировать эти процессы ? То есть существует некоторое десктоп приложение, созданное при помощи Visual Studio 2010 Ultimate, а также существует некоторая MS ACCESS-база данных. Щёлкнули по кнопке - импортируется, например, DBF-файл в некоторую таблицу. Другая кнопка - таблица экспортируется в DBF-файл. Спасибо. PS. Я при помощи Visual Studio 2010 Ultimate, ADO / ADOX делал присоединения (Linked Tables), а так же создавал запросы (queries). А вот импорт / экспорт ... Сообщение было отредактировано: 7 мар 21, 15:21 |
7 мар 21, 15:28 [22290907] Ответить | Цитировать Сообщить модератору |
Сергей Лалов Member Откуда: localhost SPB Сообщений: 2087 |
Vakho, Тут вам никто не ответит, потому что непонятно сформулировал вопрос. Откуда и куда импорт должен идти? PS. Выложи код линковки на C# ( на нем писал ранее?) Сообщение было отредактировано: 7 мар 21, 23:55 |
8 мар 21, 00:00 [22291011] Ответить | Цитировать Сообщить модератору |
court Member Откуда: Сообщений: 2271 |
Vakho, самый простой и "ленивый" вариант, это делать через COM-объект Access.Application и его метод DoCmd.TransferDatabase Но для этого нужно будет что бы был установлен Акс на "целевой машине" А это, наверняка, слишком "жирное" требование :) Тогда, "путь самурая" - запросы: https://stackoverflow.com/questions/11231454/copying-to-from-dbase-data-using-access INSERT INTO [dBASE III;DATABASE=z:\docs\].[dbf2.dbf] SELECT * FROM dbf1; INSERT INTO dbf1 SELECT * FROM [dBASE III;DATABASE=z:\docs\].[dbf2.dbf]; |
8 мар 21, 10:33 [22291057] Ответить | Цитировать Сообщить модератору |
Vakho Member Откуда: --------- Сообщений: 422 |
Сергей Лалов, Импорт - в базу данных на MS ACCESS. Например, у вас есть файл MyFile.DBF. Вы его можете импортировать в таблицу MyFile, которая создаётся в процессе импортирования, и в которую переносятся данные из MyFile.DBF. Экспорт - из таблицы в файл. Например, есть таблица MyTable. Я могу экспортировать её в файл, например, MyTable.DBF. Всё это можно сделать вручную средствами MS ACCESS. Всё это так же можно сделать при помощи VBA, который встроен в MS ACCESS. Но я не хочу использовать VBA при всём моём к нему уважении. Я хочу написать десктоп приложение, которое, грубо говоря, будет "подавть команды" MS ACCESS-у через штатные "соединители": либо ODBC, либо OLEDB, либо ADO / ADOX, либо ... По вашей просьбе прикрепляю архив с программами линковки. Написаны в Visual Studio 2010 ULTIMATE на Visual Basic-е в среде Windows XP SP3. Использовался MS ACCESS 2003. Перебросить их в C# наверно будет не трудно. Структура архива WinRAR: - папка MSAccessLinkedTablesManagement - работа с Linked Tables. - папка MSAccessQueriesManagement - работа с View (Query). Кроме этого отдельно высылаю: ErrorsDescriptionClasses.rar, PublicFunctionsAndSubs.rar - вспомогательные методы общего пользования. См. ниже. Для нормальной работы методов в Windows XP предварительно должен быть установлен Microsoft Data Access Components (MDAC) 2.8 Software Development Kit, загрузка которого может быть осуществлена отсюда: https://www.microsoft.com/en-us/download/details.aspx?id=21995 Классы LinkedTables и View использует - ADOX (Microsoft ActiveX Data Objects Extensions 2.8 for DDL and Security); - ADODB. Для этого должны быть установлены ссылки (Propertie / References) на следующие библиотеки: - Microsoft ActiveX Data Objects 2.8 Library (тип библиотеки - COM); - Microsoft ADO Ext. 2.8 for DDL and Security (тип библиотеки - COM). К сообщению приложен файл (WinRAR.rar - 129Kb) cкачать ![]() |
8 мар 21, 11:33 [22291085] Ответить | Цитировать Сообщить модератору |
Vakho Member Откуда: --------- Сообщений: 422 |
Сергей Лалов, Архив с архивами вспомогательных методов общего пользования. - ErrorsDescriptionClasses.rar - PublicFunctionsAndSubs.rar К сообщению приложен файл (WinRAR_2.rar - 76Kb) cкачать ![]() |
8 мар 21, 11:36 [22291086] Ответить | Цитировать Сообщить модератору |
Vakho Member Откуда: --------- Сообщений: 422 |
Сергей Лалов, Смотрите также ссылки в файле. К сообщению приложен файл (ReadMeMDAC.txt - 2Kb) cкачать ![]() |
8 мар 21, 11:57 [22291092] Ответить | Цитировать Сообщить модератору |
Сергей Лалов Member Откуда: localhost SPB Сообщений: 2087 |
я з@срал свой Vs этими файлами)) В общем смотрите, самый простой способ. Так как вы пишите в vb, вам нужно в проект импортировать библиотеки и среду исполнения ms access . Так как вы подключились ранее к аксессу там, все они у вас есть. Что вам нужно сделать, из проекта VS подключиться к возможностям VBA акссесс, библы аксесса, самого аксессовского файла и уже при помощи него (среды MS Access) выполнить простые команды типа : docmd.transferdatabase acimport или docmd.transferdatabase acexport именно они отвечают за импорт и экспорт, аналог тех функций которые вы делаете руками в самом аксессе,как писали ранее. Какой код должен работать в VS после подключения библиотек: dbFile = "С:\путь к файлу аксесс\storage.accdb" Set acApp = CreateObject("Access.Application") ' создаем объект типа акссесс acApp.OpenCurrentDatabase dbFile ' открываем его Set acDoCmd = acApp.DoCmd ' даем ему ссылку на инициализацию команды docmd 'выполняем команду импорта или экспорта acDoCmd.TransferSpreadsheet acimport' здесь после набор констант, которые более гибко позволят настроить импорт/или экспорт acApp.Quit ' закрываем объект и усё в общем то |
8 мар 21, 14:09 [22291147] Ответить | Цитировать Сообщить модератору |
Vakho Member Откуда: --------- Сообщений: 422 |
Сергей Лалов, хотя я подключил: ADO, ADOX. На всякий случай подключил OLEDB, ODBC. Что не так ? Прошу пардону, недоглядел. Сообщение было отредактировано: 8 мар 21, 15:10 |
8 мар 21, 15:14 [22291184] Ответить | Цитировать Сообщить модератору |
Сергей Лалов Member Откуда: localhost SPB Сообщений: 2087 |
Vakho, Та не могет такого быть, у вас дружественная среда vb. Вы можете в импорт библиотек напихать все что угодно. Вам не надо ODBC вообще - вы заставляете сам аксесовский файл выполнить код внутри себя. То есть используете API самого аксесовского файла и его среды. |
8 мар 21, 15:44 [22291199] Ответить | Цитировать Сообщить модератору |
Сергей Лалов Member Откуда: localhost SPB Сообщений: 2087 |
Нашел пример реализации даже :Imports Microsoft.Office.Interop Imports Microsoft.Office.Interop.Access Imports Microsoft.VisualBasic Imports System Imports System.Diagnostics Imports System.IO Imports System.Windows.Forms Dim acApp As New Microsoft.Office.Interop.Access.Application acApp.OpenCurrentDatabase("D:\S\Test\Test.mdb", False) acApp.DoCmd.TransferDatabase(Microsoft.Office.Interop.Access.AcDataTransferType.acImport, _ "dBASE III", "D:\S\Test\", Microsoft.Office.Interop.Access.AcObjectType.acTable, _ "Test.dbf", "Job") acApp.DoCmd.OpenQuery("Query1") ' Updates Data acApp.DoCmd.OpenQuery("Query2") ' Creates Table acApp.DoCmd.OpenQuery("Query3") ' Appends Data to New table acApp.DoCmd.OpenQuery("Query4") ' More updates to new table acApp.DoCmd.TransferDatabase(Microsoft.Office.Interop.Access.AcDataTransferType.acExport, "dBASE IV", _ "D:\S\Test\", Microsoft.Office.Interop.Access.AcObjectType.acTable, "NewJob", _ "NewDBF") acApp.CloseCurrentDatabase() PS. Это именно то,что вам нужно. Сообщение было отредактировано: 8 мар 21, 16:01 |
8 мар 21, 16:03 [22291203] Ответить | Цитировать Сообщить модератору |
Vakho Member Откуда: --------- Сообщений: 422 |
Сергей Лалов, Спасибо, у меня всё заработало ещё до ваших последних двух сообщений. Просто я не до конца всё проверил. Ни OLEDB, ни ODBC, ни ADO / ADOX, ничего из этого не понадобилось. Сообщение было отредактировано: 8 мар 21, 16:46 |
8 мар 21, 16:51 [22291218] Ответить | Цитировать Сообщить модератору |
Сергей Лалов Member Откуда: localhost SPB Сообщений: 2087 |
Vakho, Да, нормально, можно еще упростить затестил только что в VS (вообще не надо библиотек никаких подключать в импорт): Данный код берет таблицу из аксесс и экспортирует ее в формат excel у меня на рабочем столе. Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim dbFile As String Dim acApp As Object Dim acDoCmd As Object dbFile = "C:\Users\SL\Desktop\storage.accdb" acApp = CreateObject("Access.Application") ' создаем объект типа акссесс acApp.OpenCurrentDatabase(dbFile) ' открываем его acDoCmd = acApp.DoCmd ' даем ему ссылку на инициализацию команды docmd 'выполняем команду импорта или экспорта acDoCmd.Outputto(0, "t_test", "Excel Workbook (*.xlsx)", , True) acApp.Quit ' закрываем объект End Sub End Class Сообщение было отредактировано: 8 мар 21, 16:52 |
8 мар 21, 16:58 [22291220] Ответить | Цитировать Сообщить модератору |
court Member Откуда: Сообщений: 2271 |
я не в курсе, вдруг что ... :) |
||||
8 мар 21, 18:32 [22291237] Ответить | Цитировать Сообщить модератору |
Сергей Лалов Member Откуда: localhost SPB Сообщений: 2087 |
court, да ,крайне желательно хлопнуть, но он сам уже разберется с этим делом . |
8 мар 21, 18:39 [22291239] Ответить | Цитировать Сообщить модератору |
vmag Member Откуда: MP Сообщений: 3964 |
Сергей Лалов, мдя, студия прикольная штучка, я тут с vb-net недавно потыкался пару часов на бесплатной коммюнити 2019, впечатлило... если щёки не надувать, выбрать фрейворк 2, то после Release небольшой .exe файл, на любой машине работает без проблем, даже если на ней вообще ничего не установлено кроме ОС... Я б так сказал - студия с vb-net это следующая ступень для акцесника в своем развитии... Ну так скажем модуль в модуль закопипастил, потом максимум 5 % подшаманил, и в путь... Правда с лету не понял что там в ней с привычными отчетами и как, но можно сразу выводить в Эксель и не парится особо... |
8 мар 21, 20:41 [22291273] Ответить | Цитировать Сообщить модератору |
Сергей Лалов Member Откуда: localhost SPB Сообщений: 2087 |
vmag, Да, точно. Ну я бы не стал в VS продолжать писать в VB. VB и VBA это могилка из которой надо выбираться:) Лучше сразу в C#. У меня был кривой путь, сначала я подучил Java, а потом увидел что C# очень похож , и гораздо более дружелюбный. Собрал пару простеньких десктопных приложений на C# Windows Forms + mysql (надо сказать что там есть все , и гриды,и кнопки и многое чего другое. И можно обработать поведение вообще на любой вкус,любого контрола. И функционал побогаче чем в офисном пакете.) Отчеты там тоже есть ,они входят в большущий блок Reporting Service. Там можно их делать динамическими, с фильтрами,комбобоксами, выбором срезов. Я туда не совался. Слишком обширная тема. VS у меня живет на компе ради сборки мобильных приложений. Там есть Xamarin, где человек, который знает синтаксис Java или C++, или C# (базового уровня достаточно) сможет написать сразу приложение ,которое можно скомпилировать и под андроид и под айфон. Я поэтому за него держусь. |
8 мар 21, 22:01 [22291287] Ответить | Цитировать Сообщить модератору |
Сергей Лалов Member Откуда: localhost SPB Сообщений: 2087 |
PS и кстати VS community edition (она покрывает 99.9% потребности нашего брата формошлепа и базодела) абсолютно бесплатная в отличии от аксесса. И если писать приложения и иметь доход ваш/компании в год меньше 1млн долларов и количество разрабов <5ти, то вам не надо ничего отчислять в MS. |
8 мар 21, 22:47 [22291300] Ответить | Цитировать Сообщить модератору |
Кривцов Анатолий Member Откуда: Сообщений: 613 |
Vakho, для вашей задачи нет нужды поднимать приложение Access. Запрос вида Select... Into... с правильной строкой подключения выполнит и импорт, и экспорт. Для текстовых файлов может понадобиться спецификация в файле Schema.ini. |
9 мар 21, 16:57 [22291867] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft Access | ![]() |