private void timer1_Tick(object sender, EventArgs e)
        {
            switch (Estado)
            {
            case ESTADOS_BUSQUEDA.INICIANDO_BUSUQUEDA:
                cBarraProgreso1.Texto = "Extrayendo objetos de la base de datos";
                Estado = ESTADOS_BUSQUEDA.EXTRAYENDO_OBJETOS;
                break;

            case ESTADOS_BUSQUEDA.EXTRAYENDO_OBJETOS:
                BuscaObjetos();
                Estado = ESTADOS_BUSQUEDA.ANALIZANDO;
                break;

            case ESTADOS_BUSQUEDA.ANALIZANDO:
                AnalizaObjeto();
                break;

            case ESTADOS_BUSQUEDA.FIN:
                timer1.Enabled          = false;
                ComboConexiones.Enabled = true;
                ComboGrupos.Enabled     = true;
                ComboTipos.Enabled      = true;
                ComboVer.Enabled        = true;
                button2.Enabled         = true;
                break;
            }
        }
 private void button2_Click(object sender, EventArgs e)
 {
     if (ComboConexiones.SelectedIndex == -1)
     {
         System.Windows.Forms.MessageBox.Show("Seleccione una base de datos");
         return;
     }
     ListaObjetos.Items.Clear();
     button2.Enabled         = false;
     ComboConexiones.Enabled = false;
     ComboGrupos.Enabled     = false;
     ComboTipos.Enabled      = false;
     ComboVer.Enabled        = false;
     label3.Text             = "Objetos con diferencias";
     textBox1.Text           = "";
     Diferencias             = new List <Visor_sql_2015.Objetos.CDiferenciaObjeto>();
     Estado         = ESTADOS_BUSQUEDA.INICIANDO_BUSUQUEDA;
     timer1.Enabled = true;
 }
        private void AnalizaObjeto()
        {
            //se trae el primer objeto de la lista y lo busca en la base de datos
            //externa.

            /*
             * primero revisa que exista. SI no existe lo agrega a la lista
             * si existe, revisa si es un sp o una vista o una tabla
             * Si es un Sp o una vista, se tare el codigo de las dos bases
             * y los compara y si son diferentes lo agrega a la lita
             * si es una tabla checa los campos y si aguno es diferente lo agrea
             * si es una llave foranea, checa si tienen las mismas tablas y campos
             * si no coinciden, lo agrega a la lista
             * si es una llave primaria checa si son los mismos campos
             */
            if (Lista.Count == 0)
            {
                cBarraProgreso1.Texto = "Analisis terminado";
                Estado = ESTADOS_BUSQUEDA.FIN;
                return;
            }
            //me traigo el primer objeto de la lista
            Objetos.CSysObject obj = Lista[0];
            Lista.RemoveAt(0);
            System.Collections.Generic.List <Objetos.CSysObject> l;
            l = DB2.BuscaObjetos(obj.Nombre, obj.TipoObjeto);
            cBarraProgreso1.Progreso++;
            cBarraProgreso1.Texto = "Analizando " + obj.Nombre;
            if (l.Count == 0)
            {
                //no lo encontro, por lo que lo agrego a la lista
                AgregaDiferencia(obj, "No se encontró en la base de datos", 1);
                return;
            }
            Objetos.CSysObject obj2 = l[0];
            if (obj2.Nombre != obj.Nombre)
            {
                //no lo encontro, por lo que lo agrego a la lista
                AgregaDiferencia(obj, "No se encontró en la base de datos", 1);
                return;
            }
            switch (obj.TipoObjeto)
            {
            case Controladores_DB.TIPOOBJETO.TABLAX:
                ComparaTablas(obj, obj2);
                break;

            case Controladores_DB.TIPOOBJETO.STOREPROCERURE:
                ComparaCodigo(obj, obj2);
                break;

            case Controladores_DB.TIPOOBJETO.VISTA:
                ComparaCodigo(obj, obj2);
                break;

            case Controladores_DB.TIPOOBJETO.TRIGER:
                ComparaCodigo(obj, obj2);
                break;

            case Controladores_DB.TIPOOBJETO.PRIMARYKEY:
                ComparaLLavesPrimarias(obj, obj2);
                break;

            case Controladores_DB.TIPOOBJETO.FOREINGKEY:
                ComparaLLavesForaneas(obj, obj2);
                break;
            }
        }