public DbFieldSelect(TableDefs aTableDefs)
        {
            InitializeComponent();

            for (int i = 0; i < aTableDefs.Count; i++)
            {
                TableDef aTable = aTableDefs[i];

                if (aTable.Attributes == 0)
                {
                    TreeNode node    = this.treeViewTablesFields.Nodes.Add(aTable.Name);
                    Fields   aFields = aTable.Fields;
                    for (int j = 0; j < aFields.Count; j++)
                    {
                        Field aField = aFields[j];
                        node.Nodes.Add(aField.Name);

                        OfficeApp.ReleaseComObject(aField); // needed or Access stays running after exit
                    }
                    OfficeApp.ReleaseComObject(aFields);
                }
                OfficeApp.ReleaseComObject(aTable);
            }
        }
        public void ConvertTableFieldDialog_Click(Office.IRibbonControl control)
        {
#if DEBUG
            MessageBox.Show("ConvertTableFieldDialog_Click");
#endif

            Database aDb = Application.CurrentDb();
            if (aDb == null)
            {
                return;
            }

            TableDefs aTableDefs = null;
            TableDef  aTableDef  = null;
            Recordset aRecordSet = null;
            try
            {
                aTableDefs = aDb.TableDefs;
                DbFieldSelect dlg = new DbFieldSelect(aTableDefs);
                if (dlg.ShowDialog() == DialogResult.OK)
                {
                    aTableDef  = aTableDefs[dlg.TableName];
                    aRecordSet = aTableDef.OpenRecordset(RecordsetTypeEnum.dbOpenTable, 0);
                    // dao.RecordsetOptionEnum.);

                    if (!aRecordSet.Updatable)
                    {
                        throw new ApplicationException("Can't edit this table? Is it opened? If so, then close it and try again.");
                    }

                    string        strTitle = String.Format("Select the Converter for the {0}.{1} field", dlg.TableName, dlg.FieldName);
                    EncConverters aECs     = GetEncConverters;
                    if (aECs != null)
                    {
                        IEncConverter           aIEC            = aECs.AutoSelectWithTitle(ConvType.Unknown, strTitle);
                        FontConverter           aFC             = new FontConverter(new DirectableEncConverter(aIEC));
                        OfficeDocumentProcessor aTableProcessor = new OfficeDocumentProcessor(aFC, new SILConverterProcessorForm());
                        AccessDocument          rsDoc           = new AccessDocument(aRecordSet, dlg.FieldName);

                        // do a transaction just in case we throw an exception trying to update and the user
                        //  wants to rollback.
                        aDb.BeginTrans();
                        rsDoc.ProcessWordByWord(aTableProcessor);
                        aDb.CommitTrans((int)CommitTransOptionsEnum.dbForceOSFlush);
                    }
                }
            }
            catch (Exception ex)
            {
                DisplayException(ex);
                if (ex.Message != cstrAbortMessage)
                {
                    if (MessageBox.Show("Would you like to rollback the transaction?", OfficeApp.cstrCaption, MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        aDb.Rollback();
                    }
                    else
                    {
                        aDb.CommitTrans((int)CommitTransOptionsEnum.dbForceOSFlush);
                    }
                }
            }
            finally
            {
                if (aRecordSet != null)
                {
                    aRecordSet.Close();
                }
                ReleaseComObject(aRecordSet);
                ReleaseComObject(aTableDef);
                ReleaseComObject(aTableDefs);
                ReleaseComObject(aDb);
            }
        }