Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как узнать число записей в массиве? / 25 сообщений из 45, страница 1 из 2
28.11.2003, 17:17
    #32338101
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать число записей в массиве?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    Dim r As DAO.RecordSet
    Set r = Me.RecordsetClone
    Dim i As Long
    Dim j As Long
    ReDim OldValue( 1  To  2 ,  0  To r.Fields.Count,  0  To r.RecordCount) As Variant
    r.Bookmark = Me.Bookmark
    r.MoveFirst
    
    For j =  0  To r.RecordCount -  1 
        For i =  0  To r.Fields.Count -  1 
            OldValue( 1 , i, j) = r.Fields(i).Name
            OldValue( 2 , i, j) = r.Fields(i).Value
        Next i
    r.MoveNext
    Next j
    Debug.Print OldValue.Count ' Нужно что-нибудь в роде этого :)
...
Рейтинг: 0 / 0
28.11.2003, 17:25
    #32338113
Kelme
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать число записей в массиве?
Ubound(OldValue)
...
Рейтинг: 0 / 0
28.11.2003, 17:29
    #32338119
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать число записей в массиве?
Ubound(OldValue) что это такое?
Эта штука все время возвращает число 2, а строк 10
...
Рейтинг: 0 / 0
28.11.2003, 17:37
    #32338130
Kelme
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать число записей в массиве?
Ubound(OldValue,2) или Ubound(OldValue,3)

В хелпе трудно глянуть что-ли?
...
Рейтинг: 0 / 0
28.11.2003, 17:45
    #32338138
amel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать число записей в массиве?
У тебя OldValue 3-х мерный массив, так и Ubound нужно показывать ту колонку которая max, т.е. что-то такое Ubound(OldValue(,,0)) .....
...
Рейтинг: 0 / 0
28.11.2003, 17:46
    #32338139
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать число записей в массиве?
Спасибо, разобрался.
...
Рейтинг: 0 / 0
28.11.2003, 17:52
    #32338147
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать число записей в массиве?
Ну и чтобы совсем хорошо было
Код: plaintext
UBound(...) - LBound(...)

а то башка снег попадет совсем дохлый будешь.
...
Рейтинг: 0 / 0
28.11.2003, 17:53
    #32338149
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать число записей в массиве?
А как узнать порядковый номер (в рекордсете) удаляемой из рекордсета записи?
...
Рейтинг: 0 / 0
28.11.2003, 19:09
    #32338213
Pavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать число записей в массиве?
А зачем? Она же удаляется!
...
Рейтинг: 0 / 0
29.11.2003, 18:20
    #32338496
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать число записей в массиве?
А зачем? Она же удаляется!
Надо.
В массиве, указанном выше, хранятся все записи рекордсета. При удалении записи из рекордсета логично было бы удалить ее и из массива.
...
Рейтинг: 0 / 0
29.11.2003, 18:41
    #32338497
Kelme
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать число записей в массиве?
Код: plaintext
rst.AbsolutePosition -  1 



RTFM
...
Рейтинг: 0 / 0
29.11.2003, 18:45
    #32338499
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать число записей в массиве?
Спасибо.
...
Рейтинг: 0 / 0
29.11.2003, 18:51
    #32338502
Kelme
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать число записей в массиве?
Пожалуйста :)
...
Рейтинг: 0 / 0
29.11.2003, 21:58
    #32338529
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать число записей в массиве?
Нужно создать массив, который будет заполняться удаляемыми из рекордсета записями. Вот так выглядит код для одной удаляемой записи. Но, если будут удаляться несколько записей, то в массиве сохранится только последняя. Возможно ли добавлять записи в такой массив?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Private Sub Form_Delete(Cancel As Integer)
    Dim r As DAO.Recordset
    Set r = Me.RecordsetClone
    Dim i As Long
    Dim j As Long
    
    r.Bookmark = Me.Bookmark
        j = r.AbsolutePosition
        For i =  0  To r.Fields.Count -  1 
            DelValue( 1 , i, j) = r.Fields(i).Name
            DelValue( 2 , i, j) = r.Fields(i).Value
        Next i
 
    r.Close
End Sub
...
Рейтинг: 0 / 0
29.11.2003, 22:12
    #32338536
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать число записей в массиве?
Это сказал Всеволод
> Но, если будут удаляться несколько записей, то в массиве сохранится только последняя.

А вот что говорит help:
>При одновременном удалении нескольких записей событие Удаление возникает
>после удаления каждой записи. Это позволяет получить доступ к данным в
>каждой записи перед ее фактическим удалением и выборочно подтверждать или
>отменять удаление каждой из записей в макросе или процедуре обработки
>события Удаление.

Отсюда вопрос: неужели трудно нажать F1?
...
Рейтинг: 0 / 0
29.11.2003, 22:54
    #32338557
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать число записей в массиве?
Geo
Я это и сам знаю без хелпа! Я вообще не понял, что ты хотел показать своей репликой???... Ты вопрос то не забыл прочитать а?
---
Повторяю:
Возможно ли добавлять записи в такой массив?
Поясняю:
Так как при одновременном удалении нескольких записей событие Удаление возникает после удаления каждой записи , то предложенный мною код не накапливает данные в массиве, а сохраняет только последнюю из них
...
Рейтинг: 0 / 0
29.11.2003, 22:56
    #32338558
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать число записей в массиве?
Чтобы в массив можно было добавлять, надо пользоваться ReDim.
...
Рейтинг: 0 / 0
29.11.2003, 23:09
    #32338561
Нуф-нуф
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать число записей в массиве?
Всеволод, ты, ИМХО, сам запутался и распутывать нет ни сил, ни желания :(
Ты же сам сказал, что знаешь, что процедура будет вызываться для каждой удаленной строки, так какая разница, будет ли она вызываться при удалении лишь одной записи или при удалении сразу всех?

На несколько "ляпов" в данном коде могу указать:

1. Массив трех размерностей здесь не нужен. Достаточно двух: DelValue(Строка, Поле). И вообще не понятно, что ты хотел сказать циферками 1 и 2 в первой размерности;
2. Позицию записи (r.AbsolutePosition) нельзя указывать в качестве индекса массива. Представь, что первая удаляемая запись будет расположена в самом конце 100 000 набора записей. У тебя что, будет выделен ПУСТОЙ массив на 100000 записей, чтобы сохранить данные в стотысячную строку массива? Система загнется... Позицию записи (если она вообще имеет смысл, в чем я сомневаюсь) следует сохранять так же в массиве, а индекс массива формировать на базе счетчика - значение счетчика равно количеству удаленных записей + 1;
3. Перебор полей лучше осуществлять через For ... Each ...;
4. Массив должен быть динамическим и при каждом добавлении в него строк должен быть изменен его размер через ReDim Preserv ...
5. Нафик ты открываешь и закрываешь клон набора записей, если вполне можешь использовать оригинал?;
6. А я пошел спать...
...
Рейтинг: 0 / 0
29.11.2003, 23:23
    #32338562
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать число записей в массиве?
ReDim есть - просто здесь его забыл.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Private Sub Form_Delete(Cancel As Integer)
    Dim r As DAO.Recordset
    Set r = Me.RecordsetClone
    Dim i As Long
    Dim j As Long
    ReDim DelValue( 1  To  2 ,  0  To r.Fields.Count,  0  To r.RecordCount) As Variant
    r.Bookmark = Me.Bookmark
    r.MoveFirst
    
    j = r.AbsolutePosition
        For i =  0  To r.Fields.Count -  1 
            DelValue( 1 , i, j) = r.Fields(i).Name
            DelValue( 2 , i, j) = r.Fields(i).Value
        Next i

    r.Close
End Sub

Всеволод, ты, ИМХО, сам запутался и распутывать нет ни сил, ни желания :(
Я ни в чем не запутался и четко знаю, что мне нужно. И если бы не было не сил ни желания, то я бы сейчас пиво пил.

что ты хотел сказать циферками 1 и 2 в первой размерности;
Код: plaintext
1.
OldValue( 1 , i, j) = r.Fields(i).Name
OldValue( 2 , i, j) = r.Fields(i).Value

циферка 1 - это идентификатор имени поля
циферка 2 - его значения

Позицию записи (если она вообще имеет смысл, в чем я сомневаюсь) следует сохранять так же в массиве, а индекс массива формировать на базе счетчика - значение счетчика равно количеству удаленных записей + 1;
Смысл имеет.
Как мне узнать количество удаляемых записей?
...
Рейтинг: 0 / 0
29.11.2003, 23:31
    #32338563
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать число записей в массиве?
автор писал:ReDim DelValue(1 To 2, 0 To r.Fields.Count, 0 To r.RecordCount) As Variant
1. Без волшебного слова Preserve старые значения будут стираться.
2. RecordCount - это не то, потому что по мере удаления записей оно будет уменьшаться, а массив должен расти.
3. r.Fields.Count - наверно, все-таки r.Fields.Count-1.
...
Рейтинг: 0 / 0
29.11.2003, 23:33
    #32338564
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать число записей в массиве?
автор писал:Как мне узнать количество удаляемых записей?
Из хелпа, процитированного Geo, следует, что при каждом входе в обработчик события такая запись одна.
...
Рейтинг: 0 / 0
29.11.2003, 23:42
    #32338565
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать число записей в массиве?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Private Sub Form_Delete(Cancel As Integer)
    Dim r As DAO.Recordset
    Set r = Me.RecordsetClone
    Dim i As Long
    Dim j As Long
    ReDim Preserve DelValue( 1  To  2 ,  0  To r.Fields.Count -  1 ,  0  To  10 ) As Variant
    r.Bookmark = Me.Bookmark
    r.MoveFirst
    
    j = r.AbsolutePosition
        For i =  0  To r.Fields.Count -  1 
            DelValue( 1 , i, j) = r.Fields(i).Name
            DelValue( 2 , i, j) = r.Fields(i).Value
        Next i

    r.Close
End Sub

Удаляю две записи. После отработки кода в массиве только первая.

И, кстати, я так и не понял что использовать вместо r.AbsolutePosition?
...
Рейтинг: 0 / 0
30.11.2003, 00:14
    #32338572
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать число записей в массиве?
r.MoveFirst - это опечатка :) -->> после удаления двух записей в массиве сохраняется только последняя.
r.Close тоже убрал :)
...
Рейтинг: 0 / 0
30.11.2003, 00:25
    #32338575
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать число записей в массиве?
автор писал:что использовать вместо r.AbsolutePosition?
UBound(DelValue, 3) + 1
...
Рейтинг: 0 / 0
30.11.2003, 00:39
    #32338577
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать число записей в массиве?
хм...
На сколько я понимаю UBound(DelValue, 3) это максимальное значение в массиве.
Тогда UBound(DelValue, 3) + 1 > UBound(DelValue, 3) -> Subscript out of range
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как узнать число записей в массиве? / 25 сообщений из 45, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]