private bool InjectCodeToAccess(string srcDir) { // get project name(s) foreach (VBProject vbp in AccApp.VBE.VBProjects) { var pjtName = vbp.Name; // get project directory var pjtDir = Directory.GetDirectories(srcDir, pjtName); // skip when not found if (pjtDir == null || pjtDir.Length == 0) { continue; } foreach (var srcFile in Directory.GetFiles(pjtDir[0], "*", SearchOption.AllDirectories)) { var fName = Path.GetFileNameWithoutExtension(srcFile); if (fName == null || fName == "") { continue; } string srcContent = null; using (var sr = new StreamReader(srcFile, Encoding.UTF8)) { srcContent = sr.ReadToEnd(); } bool isFound = false; foreach (VBComponent vbc in vbp.VBComponents) { CodeModule module = vbc.CodeModule; if (module == null) { continue; } //UPDATE module when found if (module.Name == fName) { if (vbc.Type == vbext_ComponentType.vbext_ct_Document) { AccApp.DoCmd.OpenForm(FormName: fName.Substring(5) , View: Access.AcFormView.acDesign , WindowMode: Access.AcWindowMode.acHidden); //AccApp.DoCmd.OpenForm(FormName: module.Name // , View: Access.AcFormView.acDesign // , WindowMode: Access.AcWindowMode.acHidden); } else { AccApp.DoCmd.OpenModule(module.Name); } //AccApp.DoCmd.OpenModule(module.Name); module.DeleteLines(1, module.CountOfLines); module.AddFromString(srcContent); if (vbc.Type == vbext_ComponentType.vbext_ct_Document) { AccApp.DoCmd.Save(Access.AcObjectType.acForm, fName.Substring(5)); //AccApp.DoCmd.Save(Access.AcObjectType.acForm, module.Name); } else { AccApp.DoCmd.Save(Access.AcObjectType.acModule, module.Name); } //AccApp.DoCmd.Close(Access.AcObjectType.acModule, module.Name, Access.AcCloseSave.acSaveYes); isFound = true; break; } } // INSERT module when not found if (!isFound) { //Get sub-directories //Document,StdModule,ClassModule var dir = Directory.GetParent(srcFile).Name; //var pjtName = Directory.GetParent(Directory.GetParent(srcFile).FullName).Name; vbext_ComponentType moduleType; if (Regex.IsMatch(dir, "StdModule")) { moduleType = vbext_ComponentType.vbext_ct_StdModule; } else if (Regex.IsMatch(dir, "ClassModule")) { moduleType = vbext_ComponentType.vbext_ct_ClassModule; } else { continue; // DO NOT ADD form module via interop, use MS-ACCESS Export menu instead } foreach (VBProject pjt in AccApp.VBE.VBProjects) { if (pjt.Name == pjtName) { VBComponent module = pjt.VBComponents.Add(moduleType); module.Name = fName; module.CodeModule.DeleteLines(1, module.CodeModule.CountOfLines); module.CodeModule.AddFromString(srcContent); AccApp.DoCmd.Save(Access.AcObjectType.acModule, fName); break; } } } } } return(true); }
public void AddFromString(string String) { _codeModule.AddFromString(String); }
///<summary> /// ����������� �������������, �������� ����� �� ����������, ����� ��������. ///</summary> private void getAVEAlarmObject() { try { for (int i = 1; i <= ((VBE)m_App.VBE).VBProjects.Count; i++) { VBProject bufProject = ((VBE)m_App.VBE).VBProjects.Item(i); if (bufProject.FileName.ToLower() == m_App.ActiveDisplay.Path.ToLower()) // ���� �� ��������� ����� ������ { project = bufProject; break; } } if (project == null) { MessageBox.Show("VBProject not found"); return; } List <string> listOfCase = new List <string>(); string procQueryText = ""; string procDisplayText = ""; codeModule = project.VBComponents.Item("ThisDisplay").CodeModule; //TODO: ��� ������� ����� ����� �� "�������� �������", ���� ������� AVExtension1_QueryObjectInfo. �� �������� ��������! try { string procName = "AVExtension1_QueryObjectInfo"; int procStart = codeModule.get_ProcBodyLine(procName, vbext_ProcKind.vbext_pk_Proc); int procCountLine = codeModule.get_ProcCountLines(procName, vbext_ProcKind.vbext_pk_Proc); procQueryText = codeModule.get_Lines(procStart, procCountLine); if (procQueryText.IndexOf("Select Case") > 0) { int startSelect = procQueryText.IndexOf("Select Case") + ("End Select").Length + 1; int EndSelect = procQueryText.IndexOf("End Select"); procQueryText = procQueryText.Substring(startSelect, EndSelect - startSelect); string[] sfd = procQueryText.Split(new string[] { "Case " }, StringSplitOptions.None); ListOfAVESymbol.Clear(); for (int i = 0; i < sfd.Length; i++) { if (sfd[i].IndexOf("objInfo") >= 0) { string objName = sfd[i].Split(new char[] { '"' }, StringSplitOptions.RemoveEmptyEntries)[0]; string mdbPath = sfd[i].Split(new char[] { '"' }, StringSplitOptions.RemoveEmptyEntries)[2]; Symbol symbol = getSymbolByName(objName); ListOfAVESymbol.Add(new AVEAlarmObject(objName, mdbPath, symbol)); } } } } catch { string s = string.Format(Res2.DefaultQueryProc, "AVExtension1"); codeModule.AddFromString(s); procQueryText = s; } try { string procName = "Display_Open"; int procStart = codeModule.get_ProcBodyLine(procName, vbext_ProcKind.vbext_pk_Proc); int procCountLine = codeModule.get_ProcCountLines(procName, vbext_ProcKind.vbext_pk_Proc); procDisplayText = codeModule.get_Lines(procStart, procCountLine); for (int j = procStart; j <= procCountLine; j++) { listOfCase.Add(codeModule.get_Lines(j, 1)); } procDisplayText = procDisplayText.Substring(procDisplayText.IndexOf("Initialize") + ("Initialize").Length + 1); procDisplayText = procDisplayText.Substring(0, procDisplayText.IndexOf('\n')); string[] prop = procDisplayText.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); ServerName = prop[0].Split(new char[] { '"' }, StringSplitOptions.RemoveEmptyEntries)[0]; ModuleRoot = prop[1].Split(new char[] { '"' }, StringSplitOptions.RemoveEmptyEntries)[0]; } catch { string s = string.Format(Res2.DefaultDisplyaOpen, "AVExtension1"); codeModule.AddFromString(s); procDisplayText = s; } } catch { } }