2008-10-13 2 views
3

У меня есть БД доступа, из которой я хотел бы извлечь исходный код, чтобы я мог поместить его в элемент управления Source.Извлечение исходного кода из базы данных MS Access

Я попытался извлечь данные с помощью первичных сборок (PIA), но я получаю проблемы, так как не собирает все модули и формы.

В коде есть 140 форм и модулей (не спрашивайте, это унаследованная система, которую я унаследовал), но код PIA только набирает 91 из них.

Вот код, который я использую.

using System; 
using Microsoft.Office.Interop.Access; 

namespace GetAccesSourceFiles 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      ApplicationClass appClass = new ApplicationClass(); 
      try 
      { 
       appClass.OpenCurrentDatabase("C:\\svn\\projects\\db.mdb",false,""); 

       Console.WriteLine(appClass.Version); 
       Console.WriteLine(appClass.Modules.Count.ToString()); 
       Console.WriteLine(appClass.Modules.Parent.ToString()); 

       int NumOfLines = 0; 
       for (int i = 0; i < appClass.Modules.Count; i++) 
       { 
        Console.WriteLine(appClass.Modules[i].Name + " : " + appClass.Modules[i].CountOfLines); 
        NumOfLines += appClass.Modules[i].CountOfLines; 
       } 

       Console.WriteLine("Number of Lines : " + NumOfLines); 
       Console.ReadKey(); 
      } 
      catch(Exception ex) 
      { 
       Console.WriteLine(ex.Message + "\r\n" +ex.StackTrace); 
      } 
      finally 
      { 
       appClass.CloseCurrentDatabase(); 
       appClass.Quit(AcQuitOption.acQuitSaveNone); 
      } 

     } 
    } 
} 

Любые предложения по поводу того, что этот код может отсутствовать? или на продукте/инструменте, который будет делать это для меня?

Редактировать: Следует также упомянуть, что для этого требуется сценарий на диск, интеграция с VSS не является вариантом, так как наша исходная система SVN. Благодарю.

+1

См. Также http://stackoverflow.com/questions/247292/working-with-multiple-programmers-on-ms-access – Yarik 2008-11-03 05:29:27

ответ

1

Существует лучший способ. Вы можете использовать Visual SourceSafe (и, возможно, другие кластеры с единым хранилищем) до версии кода управления и объектов на месте: увидеть это MSDN article

+0

Hi Mitch, Извините, я должен был упомянуть об этом. Наш контроль источника - это SVN внутри, я посмотрел инструмент VSS, но он действительно должен быть доступен для сценариев в папке, поэтому я могу передать его SVN. Спасибо за ответ, хотя :-) – evilhomer 2008-10-13 14:46:20

+0

В крайнем случае, не могли бы вы включить все ваши разработки Access в VSS? – 2008-10-13 14:48:46

1

Это может помочь:

Sub AllCodeToDesktop() 
     'The reference for the FileSystemObject Object is Windows Script Host Object Model 
     'but it not necessary to add the reference for this procedure. 

     Dim fs As Object 
     Dim f As Object 
     Dim strMod As String 
     Dim mdl As Object 
     Dim i As Integer 

     Set fs = CreateObject("Scripting.FileSystemObject") 

     'Set up the file. 
     Set f = fs.CreateTextFile(SpFolder("Desktop") & "\" _ 
     & Replace(CurrentProject.Name, ".", "") & ".txt") 

     'For each component in the project ... 
     For Each mdl In VBE.ActiveVBProject.VBComponents 
      'using the count of lines ... 
      i = VBE.ActiveVBProject.VBComponents(mdl.Name).CodeModule.CountOfLines 
      'put the code in a string ... 
      If VBE.ActiveVBProject.VBComponents(mdl.Name).codemodule.CountOfLines > 0 Then 
       strMod = VBE.ActiveVBProject.VBComponents(mdl.Name).codemodule.Lines(1, i) 
      End If 
      'and then write it to a file, first marking the start with 
      'some equal signs and the component name. 
      f.writeline String(15, "=") & vbCrLf & mdl.Name _ 
       & vbCrLf & String(15, "=") & vbCrLf & strMod 
     Next 

     'Close eveything 
     f.Close 
     Set fs = Nothing 
    End Sub 

    Function SpFolder(SpName As String) 
    'Special folders 
     SpFolder = CreateObject("WScript.Shell").SpecialFolders(SpName) 
    End Function 

От: http://wiki.lessthandot.com/index.php/Code_and_Code_Windows

1

Вы могли бы нам e недокументированный Application.SaveAsText и Application.LoadFromText функции. SaveAsText работает с модулями, формами и отчетами; и при сохранении формы или отчета в виде текста его код модуля появится в нижней части результирующего текстового файла.

Вы можете написать процедуру, которая сохранила бы все объекты без данных в вашем MDB (или ADP) Access в виде текста, поместила бы его в модуль и просто сохранила бы этот модуль в версии разработки вашей базы данных доступа. Затем вы можете запустить процедуру и проверить скомпилированный код в VSS.

Это, вероятно, не так элегантно, как метод Visual SourceSafe, описанный Митчем Пшеницей, но это зависит от того, что вы хотите сделать с исходным кодом. Я склонен висеть на нескольких версиях MDB и использую этот метод для сравнения исходного кода между ними с помощью инструментов diff, таких как WinMerge. Это полезно для переноса функций между ветвями разработки.

Это также полезно для поиска всех ссылок на поля или элементы управления там, где они могут быть найдены. Просмотр объектов Access в качестве текстовых определений делает поиск этих ссылок мертвым простым.

Смежные вопросы