Exemplo n.º 1
0
        /**Verificar si la clave primaria fue modificada en caso de que no se haya modificado, sobrescribir el registro en la misma
           direccion, pasar a otro procedimiento. */
        public bool actualizaRegistro(CBloque nuevo, long posN)
        {
            bool res;

            if (nuevo.ComparateTo(bloqueOriginal) == 0)
            {
                getArchivo().AbrirArchivo();
                nuevo.setSigBlo(bloqueOriginal.getSigBlo());
                getArchivo().EscribeBloque(nuevo, dirBO);
                getArchivo().CerrarArchivo();
                res = false;
            }
            else
            {
                if ((res = buscaBloqueRep(ent, bloqueOriginal, nuevo)) == false)
                {    
                    getArchivo().AbrirArchivo();
                    
                    eliminaBloque(ref indPrim, bloqueOriginal);
                    
                    if (indPrim.getCabBloques() == -1)
                        eliminaIndicePrimario(ent, indPrim);
                  
                    long posB = getArchivo().ENDF();
                    getArchivo().CerrarArchivo();

                    AltaOSI(ent, nuevo, posB);

                    List<CNodoEntidad> lR = new List<CNodoEntidad>();
                    List<CBloque> lB;

                    lR = buscaRelacionesEnt(ent);
                    if(lR.Count > 0)
                      foreach (CNodoEntidad nE in lR)
                        {
                            lB = new List<CBloque>();
                            getArchivo().AbrirArchivo();
                            dameBloquesDatos(ref lB, nE, bloqueOriginal, ent);
                            foreach (CBloque nB in lB)
                            {
                                nB.setClaveExt(bloque.dameClave());
                                getArchivo().EscribeBloque(nB, nB.getDir());
                            }

                            getArchivo().CerrarArchivo();  
                      }
                }
            }

            return (res);
        }
Exemplo n.º 2
0
        /**Inserta el bloque de datos, accediendo a la estructura de datos implementada en el archivo*/
        public int insBloque(CIndice ind, CBloque nuevo, long posB)
        {
            CBloque bAux, bAnt = null;
            long ptrAux, ptrAnt = -1; 
            int band = -1;

            ptrAux = ind.getCabBloques();
            
            while (ptrAux != -1)
            {
                bAux = getArchivo().leerBloque(ptrAux, nuevo.getTamBlo());

                if ((band = nuevo.ComparateTo(bAux)) > 0)
                {
                    ptrAnt = ptrAux;
                    bAnt = bAux;
                    bAnt.setTamBlo(nuevo.getTamBlo());
                    ptrAux = bAux.getSigBlo();
                }
                else
                    break;
            }

            if (band == 0)
                return 0;
            else
             if (ptrAux == ind.getCabBloques())
                {
                    ind.setCabBloques(posB);
                    getArchivo().EscribeIndicePrimario(ind);
                }
                else
                {
                    bAnt.setSigBlo(posB);
                    getArchivo().EscribeBloque(bAnt, ptrAnt);
                }

                nuevo.setSigBlo(ptrAux);
                getArchivo().EscribeBloque(nuevo, posB);
            
            return (band);
        }
Exemplo n.º 3
0
        private void tablaDatos_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
        {
                posReg = e.RowIndex;
                long sigB = -1;

                if (edicion == false)
                    dirBO = -1;
            
                for (int i = 0; i < tablaDatos.Rows.Count; i++)
                    if (i != e.RowIndex)
                    {
                        tablaDatos.Rows[i].ReadOnly = true;
                        for (int j = 0; j < tablaDatos.Columns.Count; j++)
                            tablaDatos.Rows[i].Cells[j].Style.BackColor = Color.Gray;
                    }

                if (tablaDatos.Rows[e.RowIndex].Cells[e.ColumnIndex].Value == null && nuevoReg != true && edicion == false)
                    nuevoReg = true;

                if (nuevoReg == false && tablaDatos.Rows[e.RowIndex].Cells[e.ColumnIndex].Value != null && edicion != true)
                {
                    bloqueOriginal = creaBloqueDatos(e.RowIndex);
                    getArchivo().buscaBloque(bloqueOriginal,indPrim.getCabBloques(), tamBloque, ref dirBO, ref sigB);
                    bloqueOriginal.setSigBlo(sigB);
                    edicion = true;
                }
        }
        private void btEditarReg_Click(object sender, EventArgs e)
        {
            DataGridViewSelectedRowCollection reg = tablaDatos.SelectedRows;
            long sigB = 0;

            if (reg.Count == 1)
            {
                tablaDatos.ReadOnly = false;
                index = reg[0].Index;
                
                for (int i = 0; i < tablaDatos.Rows.Count; i++)
                   if( i != index)
                       tablaDatos.Rows[i].ReadOnly = true;
                
                bloqueAux = creaBloqueDatos(reg[0].Index);
                getArchivo().buscaBloque(bloqueAux,ent.getApCabDatos(),tamBloque,ref dir, ref sigB);
                bloqueAux.setSigBlo(sigB);
                band = true;
                btNuevoReg.Enabled = false;
                btGurdarReg.Enabled = true;
                btEliminarReg.Enabled = false;
                btEditarReg.Enabled = false;
                btEditarReg.BackColor = Color.Gray;
                btEliminarReg.BackColor = Color.Gray;
                btGurdarReg.BackColor = Color.Turquoise;
            }
            else
                if( reg.Count > 1 )
                  MessageBox.Show(" Seleccione un solo registro","Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                else
                  MessageBox.Show(" Seleccione todo el registro para editarlo", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
       }