Exemplo n.º 1
0
        /**Escribede un objeto de la clase CIndice*/
        public void EscribeIndicePrimario(CIndice indPri)
        {
            BinaryWriter bw;

            bw = getBw();
            bw.BaseStream.Seek(indPri.getDirInd(), SeekOrigin.Begin);

            bw.Write(indPri.getTipoInd());
            bw.Write(indPri.getTamIndPri());
            bw.Write(indPri.getIndPrim());
            bw.Write(indPri.getSigInd());
            bw.Write(indPri.getCabBloques());
            bw.Write(indPri.getDirInd());
        }
Exemplo n.º 2
0
        /**Elimian un bloque del archivo implementado en la organización*/
        public  void eliminaBloque(ref CIndice ind, CBloque b)
        {
            CBloque bloAux, bloAnt;
            long ptrAux, ptrAnt;
            int tamB;

            bloAux = bloAnt = null;
            ptrAux = ptrAnt = -1;
            tamB = b.getTamBlo();
            ptrAux = ind.getCabBloques();

            while (ptrAux != -1)//Se ubica el registro en el archivo
            {
                bloAux = getArchivo().leerBloque(ptrAux, tamB);

                if (b.ComparateTo(bloAux) != 0)
                {
                    ptrAnt = ptrAux;
                    bloAnt = bloAux;
                    bloAnt.setTamBlo(tamB);
                    ptrAux = bloAux.getSigBlo();
                }
                else
                    break;
            }

            if (ptrAux == ind.getCabBloques())//Se actualiza la cabecera de datos de la entidad en caso de que sea el primero
            {
                ind.setCabBloques( bloAux.getSigBlo());
                getArchivo().EscribeIndicePrimario(ind);
            }
            else
            {
                bloAnt.setSigBlo(bloAux.getSigBlo());
                bloAnt.setTamBlo(tamB);
                getArchivo().EscribeBloque(bloAnt, ptrAnt);
            }
        }
Exemplo n.º 3
0
        private void btEliminarReg_Click(object sender, EventArgs e)
        {
            DataGridViewSelectedRowCollection reg = tablaDatos.SelectedRows;
            CBloque bloqueAux;
            long posInd;
            
            getArchivo().AbrirArchivo();
            
            for (int i = 0; i < reg.Count; i++)
            {
               
                bloqueAux = creaBloqueDatos(reg[i].Index);
                BajaOSIRec(ent, bloqueAux);
                eliminaOSI(ent, bloqueAux);
            }

            getArchivo().CerrarArchivo();

            if (reg.Count > 0)
            {
                getArchivo().AbrirArchivo();
                indPrim = getArchivo().LeerIndicePrimario(indPrim.getDirInd());
                getArchivo().CerrarArchivo();

                if (indPrim.getCabBloques() == -1)
                {
                    listaIP.Items.Clear();
                    ImprimeIndices(ent.getApCabDatos());
                    if (ent.getApCabDatos() != -1)
                        listaIP.SelectedIndex = 0;
                }
                imprimeTablaDatos(indPrim.getCabBloques());
            }
        }
Exemplo n.º 4
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);
        }