powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как узнать число записей в массиве?
45 сообщений из 45, показаны все 2 страниц
Как узнать число записей в массиве?
    #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
Как узнать число записей в массиве?
    #32338113
Kelme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ubound(OldValue)
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #32338119
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ubound(OldValue) что это такое?
Эта штука все время возвращает число 2, а строк 10
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #32338130
Kelme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ubound(OldValue,2) или Ubound(OldValue,3)

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

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



RTFM
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #32338499
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо.
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #32338502
Kelme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пожалуйста :)
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #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
Как узнать число записей в массиве?
    #32338536
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это сказал Всеволод
> Но, если будут удаляться несколько записей, то в массиве сохранится только последняя.

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

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

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

1. Массив трех размерностей здесь не нужен. Достаточно двух: DelValue(Строка, Поле). И вообще не понятно, что ты хотел сказать циферками 1 и 2 в первой размерности;
2. Позицию записи (r.AbsolutePosition) нельзя указывать в качестве индекса массива. Представь, что первая удаляемая запись будет расположена в самом конце 100 000 набора записей. У тебя что, будет выделен ПУСТОЙ массив на 100000 записей, чтобы сохранить данные в стотысячную строку массива? Система загнется... Позицию записи (если она вообще имеет смысл, в чем я сомневаюсь) следует сохранять так же в массиве, а индекс массива формировать на базе счетчика - значение счетчика равно количеству удаленных записей + 1;
3. Перебор полей лучше осуществлять через For ... Each ...;
4. Массив должен быть динамическим и при каждом добавлении в него строк должен быть изменен его размер через ReDim Preserv ...
5. Нафик ты открываешь и закрываешь клон набора записей, если вполне можешь использовать оригинал?;
6. А я пошел спать...
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #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
Как узнать число записей в массиве?
    #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
Как узнать число записей в массиве?
    #32338564
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
автор писал:Как мне узнать количество удаляемых записей?
Из хелпа, процитированного Geo, следует, что при каждом входе в обработчик события такая запись одна.
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #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
Как узнать число записей в массиве?
    #32338572
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r.MoveFirst - это опечатка :) -->> после удаления двух записей в массиве сохраняется только последняя.
r.Close тоже убрал :)
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #32338575
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
автор писал:что использовать вместо r.AbsolutePosition?
UBound(DelValue, 3) + 1
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #32338577
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хм...
На сколько я понимаю UBound(DelValue, 3) это максимальное значение в массиве.
Тогда UBound(DelValue, 3) + 1 > UBound(DelValue, 3) -> Subscript out of range
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #32338580
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
UBound - это не значение, а максимальный индекс.
Subscript out of range в команде ReDim не может быть.
И кроме того:

28 ноя 03 в 17:46 автор про тот самый UBound писал:Спасибо, разобрался.
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #32338582
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Subscript out of range в команде ReDim не может быть.
То есть то, что у меня появляется эта ошибка это чудо?
По-моему это логично, если максимальный индекс равен 10, а мы пытаемся подставить 10+1, то возникает такая ошибка...
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #32338584
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и вообще на самом деле мне больше интересно почему в массиве не сохраняется первая удаляемая строка?
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #32338585
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Если мы пытаемся прочитать такое значение из массива, то это ошибка. Но ты-то, надеюсь, пытаешься не прочитать, а переопределить массив?
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #32338586
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А не сохраняется, наверно, потому, что программа ее затирает.
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #32338588
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что значит переопределить? :) Вот, что я делаю:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Private Sub Form_Delete(Cancel As Integer)
Set R = Me.Recordset
    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
    R2.Bookmark = Me.Bookmark
    
    j = UBound(DelValue,  3 ) +  1 
    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
    
End Sub

А не сохраняется, наверно, потому, что программа ее затирает.
И что с этим делать?
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #32338589
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ReDim Preserve DelValue(1 To 2, 0 To R.Fields.Count - 1, 0 To UBound(DelValue, 3) + 1) As Variant
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #32338591
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка таже, только выделяется теперь эта строка:
ReDim Preserve DelValue(1 To 2, 0 To R2.Fields.Count - 1, 0 To UBound(DelValue, 3) + 1) As Variant
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #32338592
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А как массив описан? У него 3 измерения есть? Надо описать его с пустыми скобками и один раз сделать ReDim на нужное число измерений, и только тогда можно будет делать то, что мы делаем сейчас.
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #32338594
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Option Compare Database
Dim DelValue() As Variant
Dim R2 As DAO.Recordset
Private Sub Form_Delete(Cancel As Integer)
Set R2 = Me.Recordset
    Dim i As Long
    Dim j As Long
    ReDim Preserve DelValue( 1  To  2 ,  0  To R2.Fields.Count -  1 ,  0  To UBound(DelValue,  3 ) +  1 ) As Variant
    R2.Bookmark = Me.Bookmark
    
    For i =  0  To R2.Fields.Count -  1 
        DelValue( 1 , i, j) = R2.Fields(i).Name
        DelValue( 2 , i, j) = R2.Fields(i).Value
    Next i
End Sub

Private Sub Кнопка4_Click()
    Set R2 = Me.Recordset
    ReDim DelValue( 1  To  2 ,  0  To R2.Fields.Count -  1 ,  0  To R2.RecordCount) As Variant
End Sub

Этаже ошибка возникает при удалении второй записи. С первой все нормально.
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #32338598
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А зачем описывать массив размером R2.RecordCount, если вся эта часть так и останется пустой, а значения будут добавляться только в индексы, бОльшие нынешнего UBound?
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #32338605
Shkurenko Alexander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всеволод. Раз у тебя не выходит с массивами, не стОит ли посмотреть в сторну коллекций.
Например:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
'добавление записи в коллекцию'

Private record()
Private del_records As Collection

Private Sub Add()
    Dim fld As DAO.Field
    
    Debug.Assert Not (del_records Is Nothing)
    
    Me.Recordset.Bookmark = Me.Bookmark ' Access не всегда коррректно синхронизирует'
                                        ' текущую запись формы с текущей записью Recordest'a
    For Each fld In Me.Recordset.Fields
        record(fld.OrdinalPosition) = fld.Value
    Next
    del_records.Add record,  "key"  & del_records.Count
End Sub

'инициализация переменных'
Private Sub Init(ByVal Count As Long)
    Debug.Assert Count >  0 
    ReDim record(Count)
    Set del_records = New Collection
End Sub

' Печать колллекции удаленных строк'
Private Sub Output()
    Dim a, i&, str$

    Debug.Assert Not (del_records Is Nothing)

    For Each a In del_records
        str =  ""
        For i = 0  To UBound(a)
            str = str & a(i) & ", "
        Next
        Debug.Print Left$(str, Len(str) -  2 )
    Next
End Sub

Private Sub Form_Load()
    Call Init(Me.Recordset.Fields.Count -  1 )
End Sub

Private Sub Form_Delete(Cancel As Integer)
    Call Add
Ens Sub


P.S. Еще раз внимательно прочитай пост Нуф-Нуфа ( Читать, не размышляя все равно, что есть не переваривая. (с) умный человек ).
Пункт 1 - получается, что для каждой строки ты хранишь как данные, так и структуру, плюс сюда еще и пункт 2.
Далее подумай сам.
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #32338627
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для Всеволода:
Нда... С "И вообще не понятно, что ты хотел сказать циферками 1 и 2 в первой размерности" как-то некрасиво у меня получилось, ведь из кода можно было догадаться... Исправляюсь, и предоставляю второе издание (переиздание) своего поста :)

========= Издание второе ============
Всеволод, ты, ИМХО, сам запутался и распутывать нет ни сил, ни желания ( у меня нет ни сил, ни желания ) :(
Ты же сам сказал, что знаешь, (удалено, ибо уже не актуально)...?

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

1. Массив трех размерностей здесь не нужен. Достаточно двух: DelValue(Строка, Поле). Почему нам не нужны Nameы полей? Очень просто... Сохраняешь ты значения полей текущего рекордсета, так? При чем сохраняешь ВСЕ поля в цикле, так? Если так, то если тебе понадобится восстановить эти сохраненные поля, то ты таким же циклом проходишся по строке массива и по полям записи, т.е.
Рекордсет.Фаелдс(0)=Массив(Строка, 0)
Рекордсет.Фаелдс(1)=Массив(Строка, 1)
Рекордсет.Фаелдс(2)=Массив(Строка, 3) и т.п. но только в цикле. Имена полей и, соответственно, третья размерность - не нужны;

2. Позицию записи (r.AbsolutePosition) нельзя указывать в качестве индекса массива. Представь, что первая удаляемая запись будет расположена в самом конце 100 000 набора записей. У тебя что, будет выделен ПУСТОЙ массив на 100000 записей, чтобы сохранить данные в стотысячную строку массива? Система загнется... Позицию записи (если она вообще имеет смысл, в чем я сомневаюсь) следует сохранять так же в массиве, а индекс массива формировать на базе счетчика - значение счетчика равно количеству удаленных записей + 1; Почему я сомневаюсь в том, что номер позиции записи не имеет смысла? Знаешь, понятие "порядковый номер" в SQL отсутствует как таковое - ведь всё зависит от сортировок и от состава набора записей. Если ты собираешься восстанавливать удаленные записи (делать "откат" удаления), то этот порядковый номер тебе ну никак не поможет - вставлять новую запись (для восстановления удаленной) ты будешь в последнюю позицию набора записей, если ориентироваться по виду формы, или вообще будешь вставлять просто в набор записей (без возможности указать позицию), если смотреть из кода (Рекордсет.Add бе-бе-бе...). Если ты собираешься отображать порядковый номер удаленной записи, то это вообще бессмыслено. представляю себе список удаленных записей, которые я хотел бы восстановить:
Код: plaintext
1.
2.
3.
        Запись  20 
        Запись  48 
        Запись  100   000 
Какую желаете восстановить? ;)
Пользователю должны предоставляться сами удаленные записи, чтобы он смог решить, что восстанавливать:
Код: plaintext
1.
2.
3.
        Игрушки
        Погремушки
        Баллистическая ракета (б/у:)
Какую желаете восстановить? ;)
Возможно я опять не прав, но так и не смог придумать в данной задаче какого-либо стоящего применения порядковому номеру записи в рекордсете...

3. Перебор полей лучше осуществлять через For ... Each ... Впрочем, по одной причине это спорно... Не буду говорить по какой, ибо она на поверхности :)

4. Массив должен быть динамическим и при (удалено, ибо уже пройдено);

5. Нафик ты открываешь и закрываешь клон набора записей, если вполне можешь использовать оригинал? То есть, я имею сказать, что можно просто выполнить
DelValue(1, i, j) = Ме.Fields(i).Name
и при этом не создавать клон набора записей, не синхронизировать указатели, не закрывать, не удалять его... А?;

6. Возможно действительно стоит реализовать через коллекции, как Саныч посоветовал? Вроде, попроще "низкоуровневых" манипуляций с изменением границ массива :) На самом деле лично я считаю (и вполне могу быть не прав), что такие вещи надо хранить либо во временной таблице, либо в файле, но ни как не в памяти процесса... Но, опять же, это, как бы, чистейшее ИМХО :)

7. А я пошел спать... не... Я пошел с... не, не скажу чего делать :)

для Владимир Саныча:
Володь, классное изречение! К стыду, никогда не слышал такого...
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #32338651
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Нуф, это был не мой пост. :^)))
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #32338671
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Трррррррыыыыыыындессссссс!
Все притензии к Всеволоду снимаются полностью и безоговорочно!!!

Чистосердечнейшие извинения Александру Шкуренко. Чего со мной? :( Видимо еще после вчерашнего не отошел :)

Третье переиздание поста:

6. Возможно действительно стоит реализовать через коллекции, как АЛЕКСАНДР посоветовал? Вроде, ...

для Александра Шкуренко:
Саш, классное изречение! К стыду, никогда не слышал такого...

//стыдно то как, блииииииин... покраснел...
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #32338672
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Нуф писал:покраснел...
А на розовом не видно. :^)
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #32338685
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нуф-нуф
номер позиции записи не имеет смысла
Дело в том, что есть еще один массив, который заполняется на Form_Load. Этот массив хранит в себе "данные до изменения" (это удобно так как в форме обычно не больше 10 записей):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    Set r = Me.RecordsetClone
    Dim i As Long
    Dim j As Long
    ReDim OldValue( 1  To  2 ,  0  To r.Fields.Count -  1 ,  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
    r.Close

Если данные в форме были изменены, то отмена изменений выполняется так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
    Dim r As DAO.Recordset
    Set r = Me.RecordsetClone
    Dim R2 As DAO.Recordset
    
    r.MoveFirst
    For j =  0  To r.RecordCount -  1 
    Set R2 = CurrentDb.OpenRecordset( "select * from cash where operId = "  & r!OperID & "")
        R2.Edit
            For i =  2  To R2.Fields.Count -  1 
                R2.Fields(i).Value = OldValue( 2 , i, j)
            Next i
        r.MoveNext
        R2.Update
    Next j
        Me.Requery
        r.Close
        R2.Close

Если же были удалены несколько строк, то эти строки надо удалить и из массива OldValue иначе все перепутается. А так как номер позиции записи в массиве соответствует номеру позиции этой же записи в рекордсете, то поэтому я и ввел такой идентификатор
=========

Shkurenko Alexander
Раз у тебя не выходит с массивами...
Хотелось бы все же разобраться.

Например: ...
Спасибо. Попробую разобраться :)
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #32338722
Фотография AlexJuice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И все-таки, прочитав весь тред раз 5, не пойму: ну на фига это в массив-то загонять?
ИМХО, стоило бы прислушаться к этому:
Нуф-нуф писал:такие вещи надо хранить либо во временной таблице, либо в файле, но ни как не в памяти процесса
Гораздо проще удалить запись во вспомогательной таблице, достаточно иметь в обрабатываемом наборе записей ключ.
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #32338952
Shkurenko Alexander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Всеволод.
Если ты реализуешь механизм транзакций вручную, тогда бросай это занятие. Гораздо качественнее, и надежнее (ключевое слово надежней) работать с временными таблицами, каким бы сложным этот способ не казался.

2 Нуф-Нуф.
...
Да ладно тебе, краснеть то. А знать всего нельзя, как бы этого не хотелось. Хотя...
...
Рейтинг: 0 / 0
Как узнать число записей в массиве?
    #32339027
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
иногда массивы все-таки нужны, например когда на клиенте многократно используется идин и тот же массив данных для вычислений или форматирования . такой способ позволяет оптимизировать быстродействие.

но изначально загонять в массив данные в цикле наверное не самое лучшее решение.

Код: plaintext
1.
2.
dim OLDS_RECORDS

 OLDS_RECORDS = recordset.Getrows
...
Рейтинг: 0 / 0
45 сообщений из 45, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как узнать число записей в массиве?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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