none
Разрыв в нумерации RRS feed

  • Вопрос

  • В базу данных заносят номера архивных дел. Например:
    дело А №000123
    дело Б №000124
    дело В №000126
    дело Г №000127
    дело Ж №000138
    дело Д №000139
    дело Е №000140
    Как видно между делами Б и В есть пропущено номер №000125. А между делами Г и Ж пропущено десять номеров: 128, 129, 130, 131 ... 136
    Нужно чтобы запрос Access определял:
    1 какие номера пропущено
    2 между какими именно делами пропущено номера.
    Временное решение, не удолетворяет из за трудоемкости :
    Экспортировать все записи базы данных в Ексель
    От номера следующей записи отнять предыдущий номер, например =С2-С1.
    Результат формулы: 1
    Отфильтровать результаты Условие: Не равно 1
    результат вполне удовлетворяемый:
    дело Б №000126 2
    дело Д №000139 11
    Нужен аналогический результат с помощью Access  
    2 апреля 2013 г. 7:06

Ответы

  • Извиняюсь, у меня это не таблица, а результат запроса из таблицы. Запрос создан з двумя сортировками по возрастанию ( в поле "Роки" и в поле "РеєстрКиївНОМЕРсправи"). Таблица постоянно дополняется в произвольном порядке операторами набора. Так как запрос не имеет поля id я не могу делать операцию "отнимание" с его помощью

    Результат запроса file1 адрес для скачивания dl.dropbox.com/u/50512921/file1.xlsx

    Тут есть четыре поля. Разрыв нумерации происходит в поле "РеєстрКиївНОМЕРсправи" Нумерация в каждом году("Роки") начинается с 1. 

    Я От номера следующей записи отнимаю предыдущий номер (поле "Поле для перевірки"), делаю

    Отфильтровать результаты Условие: Не равно 1

    Результат: пропавшие номера file 2  адрес для скачивания dl.dropbox.com/u/50512921/file2.xlsx

    Я написал макрос для Excel2010. Который  определяет последнею строку в таблице и проводит выше указанные операции:

    Sub Makros5()
    
        Dim lLastRow As Long
        Range("E3").Select
        ActiveCell.FormulaR1C1 = "=RC[-3]-R[-1]C[-3]"
        Range("E3").Select
        Selection.AutoFill Destination:=Range("E3:E" & lLastRow)
        Range("E3:E" & lLastRow).Select
        Range("E2").Select
        ActiveCell.FormulaR1C1 = "=RC[-3]"
        Range("E1").Select
        ActiveCell.FormulaR1C1 = "Perevirka"
        Range("E1").Select
        Selection.AutoFilter
        ActiveSheet.Range("E3:E" & lLastRow).AutoFilter Field:=5, Criteria1:= _
            "<>000001", Operator:=xlAnd
    End Sub

    К сожалению код Alexey Knyazeva 

    declare @t table ( id int identity, a char(6), b char(7) )
    insert into @t
    values ( 'дело А', '№000123' )
     , ( 'дело Б', '№000124' )
     , ( 'дело В', '№000126' )
     , ( 'дело Г', '№000127' )
     , ( 'дело Ж', '№000138' )
     , ( 'дело Д', '№000139' )
     , ( 'дело Е', '№000140' )
    
     select t1.a, t1.b, t2.a, t2.b
     , cast( right(t2.b, 6) as int ) - cast( right(t1.b, 6) as int ) diff
     from @t t1 left join @t t2
     on t1.id = t2.id - 1
     where cast( right(t2.b, 6) as int ) - cast( right(t1.b, 6) as int ) > 1

    При вставки в Access2010 (в запросе режим SQL) Не заработал.  Access2010 не распознает команд. Куда нужно вставлять этот код?

    Как эти действия можно автоматизировать в Access2010  ? Чтобы не приходилось делать експорт в Excel?



    • Изменено orso8888 4 апреля 2013 г. 19:10
    • Помечено в качестве ответа orso8888 11 апреля 2013 г. 8:55
    4 апреля 2013 г. 13:56

Все ответы

  • declare @t table ( id int identity, a char(6), b char(7) )
    insert into @t
    values ( 'дело А', '№000123' )
     , ( 'дело Б', '№000124' )
     , ( 'дело В', '№000126' )
     , ( 'дело Г', '№000127' )
     , ( 'дело Ж', '№000138' )
     , ( 'дело Д', '№000139' )
     , ( 'дело Е', '№000140' )
    
     select t1.a, t1.b, t2.a, t2.b
     , cast( right(t2.b, 6) as int ) - cast( right(t1.b, 6) as int ) diff
     from @t t1 left join @t t2
     on t1.id = t2.id - 1
     where cast( right(t2.b, 6) as int ) - cast( right(t1.b, 6) as int ) > 1


    http://www.t-sql.ru

    • Помечено в качестве ответа orso8888 2 апреля 2013 г. 12:23
    • Снята пометка об ответе orso8888 4 апреля 2013 г. 19:10
    2 апреля 2013 г. 10:17
    Модератор
  • Как ето можно использовать в Access 2010?

    Access не знает про функцию diff

    • Изменено orso8888 2 апреля 2013 г. 13:24
    2 апреля 2013 г. 13:18
  • Как ето можно использовать в Access 2010?

    Access не знает про функцию diff


    diff - это я так назвал результирующее поле

    http://www.t-sql.ru

    2 апреля 2013 г. 17:18
    Модератор
  • Извиняюсь, у меня это не таблица, а результат запроса из таблицы. Запрос создан з двумя сортировками по возрастанию ( в поле "Роки" и в поле "РеєстрКиївНОМЕРсправи"). Таблица постоянно дополняется в произвольном порядке операторами набора. Так как запрос не имеет поля id я не могу делать операцию "отнимание" с его помощью

    Результат запроса file1 адрес для скачивания dl.dropbox.com/u/50512921/file1.xlsx

    Тут есть четыре поля. Разрыв нумерации происходит в поле "РеєстрКиївНОМЕРсправи" Нумерация в каждом году("Роки") начинается с 1. 

    Я От номера следующей записи отнимаю предыдущий номер (поле "Поле для перевірки"), делаю

    Отфильтровать результаты Условие: Не равно 1

    Результат: пропавшие номера file 2  адрес для скачивания dl.dropbox.com/u/50512921/file2.xlsx

    Я написал макрос для Excel2010. Который  определяет последнею строку в таблице и проводит выше указанные операции:

    Sub Makros5()
    
        Dim lLastRow As Long
        Range("E3").Select
        ActiveCell.FormulaR1C1 = "=RC[-3]-R[-1]C[-3]"
        Range("E3").Select
        Selection.AutoFill Destination:=Range("E3:E" & lLastRow)
        Range("E3:E" & lLastRow).Select
        Range("E2").Select
        ActiveCell.FormulaR1C1 = "=RC[-3]"
        Range("E1").Select
        ActiveCell.FormulaR1C1 = "Perevirka"
        Range("E1").Select
        Selection.AutoFilter
        ActiveSheet.Range("E3:E" & lLastRow).AutoFilter Field:=5, Criteria1:= _
            "<>000001", Operator:=xlAnd
    End Sub

    К сожалению код Alexey Knyazeva 

    declare @t table ( id int identity, a char(6), b char(7) )
    insert into @t
    values ( 'дело А', '№000123' )
     , ( 'дело Б', '№000124' )
     , ( 'дело В', '№000126' )
     , ( 'дело Г', '№000127' )
     , ( 'дело Ж', '№000138' )
     , ( 'дело Д', '№000139' )
     , ( 'дело Е', '№000140' )
    
     select t1.a, t1.b, t2.a, t2.b
     , cast( right(t2.b, 6) as int ) - cast( right(t1.b, 6) as int ) diff
     from @t t1 left join @t t2
     on t1.id = t2.id - 1
     where cast( right(t2.b, 6) as int ) - cast( right(t1.b, 6) as int ) > 1

    При вставки в Access2010 (в запросе режим SQL) Не заработал.  Access2010 не распознает команд. Куда нужно вставлять этот код?

    Как эти действия можно автоматизировать в Access2010  ? Чтобы не приходилось делать експорт в Excel?



    • Изменено orso8888 4 апреля 2013 г. 19:10
    • Помечено в качестве ответа orso8888 11 апреля 2013 г. 8:55
    4 апреля 2013 г. 13:56
  • Уважаемый пользователь!

    В вашей теме отсутствует активность в течение последних 5 дней. При отсутствии каких-либо действий в течение 2 последующих дней, тема будет переведена в разряд обсуждений. Вы можете возобновить дискуссию, просто оставив сообщение в данной теме

    9 апреля 2013 г. 6:56
    Модератор
  • Помогите пожалуйста с решением моего вопроса!
    10 апреля 2013 г. 12:52
  • Помогите пожалуйста с решением моего вопроса!

    Здравствуйте,

    Думаю что готовое решения Вам навряд ли предоставят, так как цель форума помочь в решении проблем с уже существующим вариантом.

    А как для идеи, которую Вы могли бы изменить под Вашу задачу, могу предложить посмотреть здесь:


    10 апреля 2013 г. 13:34
    Модератор