示例#1
0
        private List <AsistSps.CDelete> AgregaDelete(AsistSps.CDelete cmd, Controladores_DB.IDataBase DB, bool modo)
        {
            List <AsistSps.CDelete> comandos = new List <Visor_sql_2015.AsistSps.CDelete>();

            AsistSps.CDelete Comando = new Visor_sql_2015.AsistSps.CDelete();
            //copio el comando para que por cada hijo le agrere sus porpios datos
            Comando.CpoiaComando(cmd);
            Comando.Delete  = Eliminar;
            Comando.Mensage = Mensage;
            //agrego mi propia tabla
            int nt;

            nt = Comando.AddFrom(Tabla);
            int ntp; //numero de tabla padre
            //me traigo los campos involucrados en mi llave foranea
            List <Objetos.CCampoFK> llaves;

            llaves = DB.DameCamposFK(name);
            //agrego la tabla padre para obtener su numero de tabla
            ntp = Comando.AddFrom(llaves[0].maestra);
            //ahora agrego los where
            foreach (Objetos.CCampoFK cfk in llaves)
            {
                string s = "T" + nt.ToString() + "." + cfk.columnahija + "=T" + ntp.ToString() + "." + cfk.columnaMaestra;
                Comando.AddWhere(s);
            }
            //ahora reviso si tengo hijos
            if (Hijas == null)
            {
                //no tengo, por lo que termino
                if (modo == Eliminar)
                {
                    comandos.Add(Comando);
                }
                return(comandos);
            }
            //tengo hijos, por lo que recorro cada uno para que agregen su codigo al comando
            foreach (CLLaveForanea hija in Hijas)
            {
                //que agrege los demas comandos
                List <AsistSps.CDelete> l;
                l = hija.AgregaDelete(Comando, DB, modo);
                //agrego todos los comandos a mi comando principal
                foreach (AsistSps.CDelete cd in l)
                {
                    comandos.Add(cd);
                }
            }
            //agrego mi comando al final de la lista
            if (modo == Eliminar)
            {
                comandos.Add(Comando);
            }
            return(comandos);
        }
示例#2
0
        private void FormPropFkDelete_Load(object sender, EventArgs e)
        {
            //cargo los datos para mostralos
            TNombre.Text        = FK.name;
            RBEliminar.Checked  = FK.Eliminar;
            TBExcepcion.Checked = FK.GenerarExcepcion;
            TError.Text         = FK.Mensage;
            System.Collections.Generic.List <Objetos.CCampoFK> lista = DB.DameCamposFK(FK.name);
            TTablaPadre.Text = lista[0].hija;
            FK.Tabla         = TTablaPadre.Text;
            if (FK.Hijas != null)
            {
                //muestro las llaves foraneas hijas
                foreach (Objetos.CLLaveForanea obj in FK.Hijas)
                {
                    ListaParametros.Items.Add(obj);
                }
            }
            //me traigo la lista de llaves foraneas hijas
            List <Objetos.CLLaveForanea> lista2 = DB.DameLLavesForaneasHijas(TTablaPadre.Text);

            foreach (Objetos.CLLaveForanea obj in lista2)
            {
                bool encontrado = false;
                foreach (Objetos.CLLaveForanea obj2 in ListaParametros.Items)
                {
                    if (obj.name == obj2.name)
                    {
                        encontrado = true;
                        break;
                    }
                }
                if (encontrado == false)
                {
                    ListaCampos.Items.Add(obj);
                }
            }
        }
示例#3
0
        public override void BSiguiente()
        {
            //genera el codigo del SP
            bool primero;

            Codigo = "";
            CargaDatos();
            // primero genero el cabecero del SP
            Add("create procedure " + NombreSP);
            //veo si tiene parametros
            if (Parametros.Count > 0)
            {
                //genero lalista de parametros
                Add("(");
                primero = true;
                foreach (Objetos.CParametro parametro in Parametros)
                {
                    if (primero == false)
                    {
                        Add(",");
                    }
                    else
                    {
                        primero = false;
                    }
                    Add("@" + parametro.nombre + " " + parametro.TipoSP);
                }
                Add(")");
            }
            Add(" as\n");
            AddLine("begin");
            //veo si le pucieron comentarios
            string comentario = (string)DameValor("ComentarioNombreSP");
            string cmt = "";
            int    ni, nn;

            nn = comentario.Length;
            string s = "";

            for (ni = 0; ni < nn; ni++)
            {
                if (comentario[ni] == '\n' || comentario[ni] == '\r')
                {
                    //se encontro un comentario
                    if (cmt.Trim() != "")
                    {
                        s = "\t--" + cmt.Trim();
                        AddLine(s);
                        cmt = "";
                    }
                }
                else
                {
                    cmt = cmt + comentario[ni];
                }
            }
            if (cmt.Trim() != "")
            {
                s = "\t--" + cmt;
                AddLine(s);
            }
            //veo si hay campos que van a tener valores fijos
            if (ValoresFijos.Count > 0)
            {
                AddLine("\t--Declaración de variables que se requieren ");
                foreach (Objetos.CParametro variable in ValoresFijos)
                {
                    AddLine("\tdeclare @" + variable.nombre + " " + variable.TipoSP);
                }
            }
            if (GenerarLLave == true)
            {
                //declaro la variable que va a tener el nombre de la llave
                AddLine("\tdeclare @" + CampoLLave.nombre + " " + CampoLLave.TipoSP + " --variable utilizada para generar la llave");
            }
            //veo si le asignaron comentarios a los parametros
            if (Parametros.Count > 0)
            {
                //genero lalista de parametros
                foreach (Objetos.CParametro parametro in Parametros)
                {
                    if (parametro.Descripcion != null && parametro.Descripcion.Trim() != "")
                    {
                        Add("\t--" + parametro.nombre + " " + parametro.Descripcion + "\n");
                    }
                }
            }
            //ahora agrego validaciones a los parametros
            if (Parametros.Count > 0)
            {
                primero = true;
                foreach (Objetos.CParametro parametro in Parametros)
                {
                    if (parametro.Vacios == false)
                    {
                        if (primero == true)
                        {
                            AddLine("\t--Validando que no sean vacios");
                            primero = false;
                        }
                        AddLine("\tif(ltrim(@" + parametro.nombre + ")=\'\')");
                        AddLine("\tbegin");
                        //Version sim tiene comentarios
                        if (parametro.Descripcion.Trim() != "")
                        {
                            AddLine("\t\t--" + parametro.Descripcion);
                        }
                        AddLine("\t\tRAISERROR(\'" + parametro.ExcepcionVacios + "\', 16, 1)");
                        AddLine("\t\treturn");
                        AddLine("\tend");
                    }
                }
            }
            //ahora valido que no se repitan los campos
            if (Parametros.Count > 0)
            {
                primero = true;
                foreach (Objetos.CParametro parametro in Parametros)
                {
                    if (parametro.ValidarUnicidad == true)
                    {
                        if (primero == true)
                        {
                            AddLine("\t--Validando que no se pueden repetir");
                            primero = false;
                        }
                        AddLine("\tif exists(select * from " + Tabla + " where " + parametro.nombre + "=@" + parametro.nombre + ")");
                        AddLine("\tbegin");
                        //Version sim tiene comentarios
                        if (parametro.Descripcion.Trim() != "")
                        {
                            AddLine("\t\t--" + parametro.Descripcion);
                        }
                        AddLine("\t\tRAISERROR(\'" + parametro.ExcepcionNoRepetibles + "\', 16, 1)");
                        AddLine("\t\treturn");
                        AddLine("\tend");
                    }
                }
            }
            //ahora me traigo los valores que son fijos
            if (ValoresFijos.Count > 0)
            {
                foreach (Objetos.CParametro variable in ValoresFijos)
                {
                    if (variable.SelectedValor == true)
                    {
                        AddLine("\tselect @" + variable.nombre + "= " + variable.Valor);
                    }
                    else
                    {
                        //hay que obtenerlo desde una tabla
                        s       = "";
                        primero = true;
                        foreach (Objetos.CParametro p in variable.Filtros)
                        {
                            if (primero == true)
                            {
                                primero = false;
                            }
                            else
                            {
                                s = s + " and ";
                            }
                            s = s + p.nombre;
                            switch (p.Filtro)
                            {
                            case Visor_sql_2015.Objetos.TIPO_FILTRO.DIFERENTE:
                                s = s + "!=";
                                break;

                            case Visor_sql_2015.Objetos.TIPO_FILTRO.IGUAL:
                                s = s + "=";
                                break;

                            case Visor_sql_2015.Objetos.TIPO_FILTRO.LIKE:
                                s = s + " like ";
                                break;

                            case Visor_sql_2015.Objetos.TIPO_FILTRO.MAYOR_IGUAL:
                                s = s + ">=";
                                break;

                            case Visor_sql_2015.Objetos.TIPO_FILTRO.MAYOR_QUE:
                                s = s + ">";
                                break;

                            case Visor_sql_2015.Objetos.TIPO_FILTRO.MENOR_IGUAL:
                                s = s + "<=";
                                break;

                            case Visor_sql_2015.Objetos.TIPO_FILTRO.MENOR_QUE:
                                s = s + "<";
                                break;
                            }
                            s = s + p.Campo;
                        }
                        //veo los ordenamientos
                        string s2 = "";
                        primero = true;
                        foreach (Objetos.CParametro o in variable.Ordenamientos)
                        {
                            if (primero == true)
                            {
                                primero = false;
                                s2      = " order by ";
                            }
                            else
                            {
                                s2 = s2 + ",";
                            }
                            s2 = s2 + o.nombre;
                            if (o.Descendente == true)
                            {
                                s2 = s2 + " desc ";
                            }
                            else
                            {
                                s2 = s2 + " asc ";
                            }
                        }
                        AddLine("\tselect @" + variable.nombre + "=" + variable.Campo + " from " + variable.Tabla + " where " + s + s2);
                    }
                }
            }
            //ahora valido las llaves foraneas para impedir que truene
            if (LLavesForaneas.Count > 0)
            {
                AddLine("\t--Validando llaves foráneas");
                foreach (Objetos.CLLaveForanea fk in LLavesForaneas)
                {
                    //veo si tiene algun comentario
                    if (fk.Comentarios != null && fk.Comentarios.Trim() != "")
                    {
                        AddLine("\t--" + fk.Comentarios);
                    }
                    //me traigo los campos y la tabla de la llave
                    List <Objetos.CCampoFK> fks = DB.DameCamposFK(fk.name);
                    //genero elselect
                    s       = "";
                    primero = true;
                    foreach (Objetos.CCampoFK ofk in fks)
                    {
                        if (primero == true)
                        {
                            primero = false;
                        }
                        else
                        {
                            s = s + " and ";
                        }
                        s = s + ofk.columnaMaestra + "=@" + ofk.columnahija + " ";
                    }
                    AddLine("\tif not exists( select * from " + fks[0].maestra + " where " + s + ")");
                    AddLine("\tbegin");
                    if (fk.Mensage != null && fk.Mensage.Trim() != "")
                    {
                        AddLine("\t\tRAISERROR(\'" + fk.Mensage + "\', 16, 1)");
                    }
                    else
                    {
                        //no asignaron texto para la excepcion, por lo que genero uno automatico
                        AddLine("\t\tRAISERROR(\'No se encontró la relación con la tabla " + fks[0].maestra + "\', 16, 1)");
                    }
                    AddLine("\t\treturn");
                    AddLine("\tend");
                }
            }
            //verifico  si hay que generar una llave automaticamente
            if (GenerarLLave == true)
            {
                s       = "";
                primero = true;
                foreach (Objetos.CParametro pk in LLavesPrimarias)
                {
                    if (pk.nombre != CampoLLave.nombre)
                    {
                        if (primero == true)
                        {
                            primero = false;
                            s       = " where ";
                        }
                        else
                        {
                            s = s + " and ";
                        }
                        s = s + pk.nombre + "=@" + pk.nombre;
                    }
                }
                AddLine("\tif not exists( select * from " + Tabla + s + ")");
                AddLine("\tbegin");
                AddLine("\t\tselect @" + CampoLLave.nombre + "=1");
                AddLine("\tend");
                AddLine("\telse");
                AddLine("\tbegin");
                AddLine("\t\tselect @" + CampoLLave.nombre + "=max(" + CampoLLave.nombre + ")+1 from " + Tabla + s + " ");
                AddLine("\tend");
            }
            //ya termine de hacer todas las validaciones, por lo que procedo a hacer el insert
            List <Objetos.CParametro> lista;

            lista = new List <Visor_sql_2015.Objetos.CParametro>();
            //le agrego los parametros
            foreach (Objetos.CParametro parametro in Parametros)
            {
                lista.Add(parametro);
            }
            foreach (Objetos.CParametro parametro in ValoresFijos)
            {
                lista.Add(parametro);
            }
            if (GenerarLLave == true)
            {
                lista.Add(CampoLLave);
            }
            AddLine("\t--agregando el registro");
            primero = true;
            string ss  = "";
            string ss2 = "";

            foreach (Objetos.CParametro obj in lista)
            {
                if (DB.ExisteCampoTabla(Tabla, obj.nombre))
                {
                    if (primero == true)
                    {
                        ss      = "(";
                        ss2     = " values(";
                        primero = false;
                    }
                    else
                    {
                        ss  = ss + ",";
                        ss2 = ss2 + ",";
                    }
                    ss  = ss + obj.nombre;
                    ss2 = ss2 + "@" + obj.nombre;
                }
            }
            ss  = ss + ")";
            ss2 = ss2 + ")";
            AddLine("\tinsert into " + Tabla + ss);
            AddLine("\t " + ss2);
            AddLine("end");
//            cTextColor1.AnalizaTexto();
            CodigoSP(NombreSP, Codigo);
            CloseEvent();
        }
示例#4
0
        private void ValidaLLaveForanea(Objetos.CLLaveForanea fk, string tabs)
        {
            string s       = "";
            bool   primero = true;
            string tab2    = tabs + "\t";
            string tab3    = tab2 + "\t";
            //me traigo los campos y la tabla de la llave
            List <Objetos.CCampoFK>   fks = DB.DameCamposFK(fk.name);
            List <Objetos.CParametro> campos;

            AddLine(tabs + "--Genero unbucle para recorrer todos los registros de la tabla");
            AddLine(tabs + "declare @" + fk.name + " int");
            AddLine(tabs + "select @" + fk.name + " =1");
            AddLine(tabs + "while(@" + fk.name + " =1)");
            AddLine(tabs + "begin");
            AddLine(tab2 + "--vero si existen registros en la tabla " + fks[0].hija);
            s = "if exists(select * from " + fks[0].hija + " where ";
            foreach (Objetos.CCampoFK obj in fks)
            {
                if (primero == true)
                {
                    primero = false;
                }
                else
                {
                    s = s + " and ";
                }
                s = s + obj.columnahija + "=@" + obj.columnaMaestra;
            }
            AddLine(tab2 + s + ")");
            AddLine(tab2 + "begin");
            //veo si hay que generar una excepcion
            if (fk.GenerarExcepcion == true)
            {
                //como hay que generar una excepcion, ya no valido las tablas hijas
                //agrego el codigo para generar dicha excepcion
                if (fk.Mensage != null && fk.Mensage.Trim() != "")
                {
                    AddLine(tab3 + "RAISERROR(\'" + fk.Mensage + "\', 16, 1)");
                }
                else
                {
                    AddLine(tab3 + "RAISERROR(\'No se puede eliminar el registro de la tabla " + fks[0].maestra + " porque la tabla " + fks[0].hija + " contiene información\', 16, 1)");
                }
                AddLine(tab3 + "return");
            }
            else
            {
                //me traigo el primer registro encontrado con la llave foranea
                //me traigo los campos de lllave primaria que no esten dentro de la llave foranea
                campos = DB.DameCamposTabla(fks[0].hija);
                bool tienecampos = false;
                s       = "select top 1 ";
                primero = true;
                foreach (Objetos.CParametro campo in campos)
                {
                    if (campo.LLavePrimaria == true)
                    {
                        //veo si no esta dentro de los campos de llave foranea
                        bool encontrado = false;
                        foreach (Objetos.CCampoFK objfk in fks)
                        {
                            if (objfk.columnahija == campo.nombre)
                            {
                                encontrado = true;
                                break;
                            }
                        }
                        if (encontrado == false)
                        {
                            tienecampos = true;
                            if (primero == true)
                            {
                                primero = false;
                            }
                            else
                            {
                                s = s + ",";
                            }
                            s = s + "@" + campo.nombre + "=" + campo.nombre;
                        }
                    }
                }
                s       = s + " from " + fks[0].hija + " where ";
                primero = true;
                foreach (Objetos.CCampoFK obj in fks)
                {
                    if (primero == true)
                    {
                        primero = false;
                    }
                    else
                    {
                        s = s + " and ";
                    }
                    s = s + obj.columnahija + "=@" + obj.columnaMaestra;
                }
                if (tienecampos == true)
                {
                    AddLine(tab3 + s);
                }
                //hay que borar en cascada
                if (fk.Hijas != null)
                {
                    foreach (Objetos.CLLaveForanea obj in fk.Hijas)
                    {
                        ValidaLLaveForanea(obj, tab3);
                    }
                }
                //ahora borro mi registro
                //ahora borro el olos registros hijos
                primero = true;
                s       = "delete " + fks[0].hija + " where ";
                foreach (Objetos.CParametro campo in campos)
                {
                    if (campo.LLavePrimaria == true)
                    {
                        if (primero == true)
                        {
                            primero = false;
                        }
                        else
                        {
                            s = s + " and ";
                        }
                        s = s + campo.nombre + "=@" + campo.nombre;
                    }
                }
                AddLine(tab3 + s);
            }
            AddLine(tab2 + "end");
            AddLine(tab2 + "else");
            AddLine(tab2 + "begin");
            AddLine(tab3 + "break");
            AddLine(tab2 + "end");
            AddLine(tabs + "end");
        }
示例#5
0
        public bool raiz;                            //indica si es en nodo raiz
        public List <AsistSps.CDelete> ComandoDelete(List <Objetos.CParametro> variables, Controladores_DB.IDataBase DB, bool modo)
        {
            List <AsistSps.CDelete> comandos = new List <Visor_sql_2015.AsistSps.CDelete>();

            AsistSps.CDelete comando = new Visor_sql_2015.AsistSps.CDelete();
            comando.Delete  = Eliminar;
            comando.Mensage = Mensage;
            string tablapadre;
            //agrego la tabla al comando
            int nt;  //numero de tabla
            int ntp; //numero de tabla padre
            List <Objetos.CCampoFK> llaves;

            llaves     = DB.DameCamposFK(name);
            tablapadre = llaves[0].maestra;
            ntp        = comando.AddFrom(tablapadre);
            nt         = comando.AddFrom(llaves[0].hija);
            //ahora agrego mi seccion de where
            //como es la primer tabla,
            //me traigo mis llave primaria de la tabla padre
            foreach (Objetos.CParametro p in variables)
            {
                //veo si el campo esta en la tabla
                if (DB.ExisteCampoTabla(tablapadre, p.nombre))
                {
                    //si esta, por lo que la agrego a la lista del where
                    string cadena = "T" + ntp.ToString() + "." + p.nombre + "=@" + p.nombre;
                    comando.AddWhere(cadena);
                }
            }
            //ahora agrego la llave con la tabla padre
            //ahora agrego los where
            foreach (Objetos.CCampoFK cfk in llaves)
            {
                string s = "T" + nt.ToString() + "." + cfk.columnahija + "=T" + ntp.ToString() + "." + cfk.columnaMaestra;
                comando.AddWhere(s);
            }

            //ahora reviso si tengo hijos
            if (Hijas == null)
            {
                //no tengo, por lo que termino
                if (modo == Eliminar)
                {
                    comandos.Add(comando);
                }
                return(comandos);
            }
            //tengo hijos, por lo que recorro cada uno para que agregen su codigo al comando
            foreach (CLLaveForanea hija in Hijas)
            {
                //que agrege los demas comandos
                List <AsistSps.CDelete> l;
                l = hija.AgregaDelete(comando, DB, modo);
                //agrego todos los comandos a mi comando principal
                foreach (AsistSps.CDelete cd in l)
                {
                    comandos.Add(cd);
                }
            }
            //agrego mi comando al final de la lista
            if (modo == Eliminar)
            {
                comandos.Add(comando);
            }
            return(comandos);
        }