Beispiel #1
0
        /// <summary>
        /// ibatrak чтение записи с проверкой
        /// </summary>
        public IrbisRecord ReadRecord(int mfn)
        {
            var xrfRecord = GetXrfRecordError(mfn, RecordStatus.PhysicallyDeleted | RecordStatus.LogicallyDeleted | RecordStatus.Absent);

            if (_codeArgs.Code != 0)
            {
                return(null);
            }
            IrbisRecord result = Mst.ReadRecord(xrfRecord.Offset);

            result.Database = Database;
            //в записи MST пишутся одни флаги, в XRF - другие
            //в результирующей записи нужно иметь комбинированный статус
            result.Status |= xrfRecord.Status;
            return(result);


            //XrfRecord xrfRecord = Xrf.ReadRecord(mfn);
            ////ibatrak если запись удалена физически, не читать
            //if (Convert.ToBoolean(xrfRecord.Status & RecordStatus.PhysicallyDeleted))
            //    return null;
            //MstRecord mstRecord = Mst.ReadRecord2(xrfRecord.Offset);
            //IrbisRecord result = mstRecord.DecodeRecord();
            //result.Database = Database;
            //return result;
        }
Beispiel #2
0
        /// <summary>
        /// ibatrak чтение записи с проверкой только на физическое удаление
        /// </summary>
        public IrbisRecord ReadExistingRecord(int mfn)
        {
            var xrfRecord = GetXrfRecordError(mfn, RecordStatus.PhysicallyDeleted | RecordStatus.Absent);

            if (_codeArgs.Code != 0)
            {
                return(null);
            }
            IrbisRecord result = Mst.ReadRecord(xrfRecord.Offset);

            result.Database = Database;
            //в записи MST пишутся одни флаги, в XRF - другие
            //в результирующей записи нужно иметь комбинированный статус
            result.Status |= xrfRecord.Status;
            return(result);
        }
Beispiel #3
0
        /// <summary>
        /// ibatrak чтение записи N шагов назад
        /// </summary>
        public IrbisRecord ReadRecord(int mfn, int stepsBack)
        {
            var version = ReadVersion(mfn);

            if (_codeArgs.Code != 0)
            {
                return(null);
            }
            if (stepsBack <= 0 || version <= stepsBack)
            {
                OnIrbis64Code(-201 /*ERR_OLDREC_ABSENT*/);
                return(null);
            }

            //здесь можно читать логически удаленные записи
            var xrfRecord = GetXrfRecordError(mfn, RecordStatus.PhysicallyDeleted | /*RecordStatus.LogicallyDeleted |*/ RecordStatus.Absent);

            if (_codeArgs.Code != 0)
            {
                return(null);
            }

            IrbisRecord rec    = null;
            var         leader = Mst.ReadRecordLeader(xrfRecord.Offset);

            for (int i = 0; i < stepsBack; i++)
            {
                if (i < stepsBack - 1)
                {
                    leader = Mst.ReadRecordLeader(leader.Previous);
                }
                else
                {
                    var result = Mst.ReadRecord(leader.Previous);
                    result.Database = Database;
                    rec             = result;
                }
            }
            rec.Database = Database;
            //в записи MST пишутся одни флаги, в XRF - другие
            //в результирующей записи нужно иметь комбинированный статус
            rec.Status |= xrfRecord.Status;
            return(rec);
        }