Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 public void AddFromString(string String)
 {
     _codeModule.AddFromString(String);
 }
Esempio n. 3
0
        ///<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 { }
        }