|
|
|
Как узнать число записей в массиве?
|
|||
|---|---|---|---|
|
#18+
UBound - это не значение, а максимальный индекс. Subscript out of range в команде ReDim не может быть. И кроме того: 28 ноя 03 в 17:46 автор про тот самый UBound писал:Спасибо, разобрался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2003, 00:43 |
|
||
|
Как узнать число записей в массиве?
|
|||
|---|---|---|---|
|
#18+
Subscript out of range в команде ReDim не может быть. То есть то, что у меня появляется эта ошибка это чудо? По-моему это логично, если максимальный индекс равен 10, а мы пытаемся подставить 10+1, то возникает такая ошибка... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2003, 00:54 |
|
||
|
Как узнать число записей в массиве?
|
|||
|---|---|---|---|
|
#18+
Да и вообще на самом деле мне больше интересно почему в массиве не сохраняется первая удаляемая строка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2003, 00:56 |
|
||
|
Как узнать число записей в массиве?
|
|||
|---|---|---|---|
|
#18+
Если мы пытаемся прочитать такое значение из массива, то это ошибка. Но ты-то, надеюсь, пытаешься не прочитать, а переопределить массив? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2003, 00:56 |
|
||
|
Как узнать число записей в массиве?
|
|||
|---|---|---|---|
|
#18+
А не сохраняется, наверно, потому, что программа ее затирает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2003, 00:57 |
|
||
|
Как узнать число записей в массиве?
|
|||
|---|---|---|---|
|
#18+
Что значит переопределить? :) Вот, что я делаю: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. А не сохраняется, наверно, потому, что программа ее затирает. И что с этим делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2003, 01:00 |
|
||
|
Как узнать число записей в массиве?
|
|||
|---|---|---|---|
|
#18+
ReDim Preserve DelValue(1 To 2, 0 To R.Fields.Count - 1, 0 To UBound(DelValue, 3) + 1) As Variant ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2003, 01:06 |
|
||
|
Как узнать число записей в массиве?
|
|||
|---|---|---|---|
|
#18+
Ошибка таже, только выделяется теперь эта строка: ReDim Preserve DelValue(1 To 2, 0 To R2.Fields.Count - 1, 0 To UBound(DelValue, 3) + 1) As Variant ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2003, 01:10 |
|
||
|
Как узнать число записей в массиве?
|
|||
|---|---|---|---|
|
#18+
А как массив описан? У него 3 измерения есть? Надо описать его с пустыми скобками и один раз сделать ReDim на нужное число измерений, и только тогда можно будет делать то, что мы делаем сейчас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2003, 01:26 |
|
||
|
Как узнать число записей в массиве?
|
|||
|---|---|---|---|
|
#18+
Сделал так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Этаже ошибка возникает при удалении второй записи. С первой все нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2003, 01:42 |
|
||
|
Как узнать число записей в массиве?
|
|||
|---|---|---|---|
|
#18+
А зачем описывать массив размером R2.RecordCount, если вся эта часть так и останется пустой, а значения будут добавляться только в индексы, бОльшие нынешнего UBound? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2003, 01:55 |
|
||
|
Как узнать число записей в массиве?
|
|||
|---|---|---|---|
|
#18+
Всеволод. Раз у тебя не выходит с массивами, не стОит ли посмотреть в сторну коллекций. Например: Код: 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. P.S. Еще раз внимательно прочитай пост Нуф-Нуфа ( Читать, не размышляя все равно, что есть не переваривая. (с) умный человек ). Пункт 1 - получается, что для каждой строки ты хранишь как данные, так и структуру, плюс сюда еще и пункт 2. Далее подумай сам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2003, 05:45 |
|
||
|
Как узнать число записей в массиве?
|
|||
|---|---|---|---|
|
#18+
для Всеволода: Нда... С "И вообще не понятно, что ты хотел сказать циферками 1 и 2 в первой размерности" как-то некрасиво у меня получилось, ведь из кода можно было догадаться... Исправляюсь, и предоставляю второе издание (переиздание) своего поста :) ========= Издание второе ============ Всеволод, ты, ИМХО, сам запутался и распутывать нет ни сил, ни желания ( у меня нет ни сил, ни желания ) :( Ты же сам сказал, что знаешь, (удалено, ибо уже не актуально)...? На несколько "ляпов" в данном коде могу указать: 1. Массив трех размерностей здесь не нужен. Достаточно двух: DelValue(Строка, Поле). Почему нам не нужны Nameы полей? Очень просто... Сохраняешь ты значения полей текущего рекордсета, так? При чем сохраняешь ВСЕ поля в цикле, так? Если так, то если тебе понадобится восстановить эти сохраненные поля, то ты таким же циклом проходишся по строке массива и по полям записи, т.е. Рекордсет.Фаелдс(0)=Массив(Строка, 0) Рекордсет.Фаелдс(1)=Массив(Строка, 1) Рекордсет.Фаелдс(2)=Массив(Строка, 3) и т.п. но только в цикле. Имена полей и, соответственно, третья размерность - не нужны; 2. Позицию записи (r.AbsolutePosition) нельзя указывать в качестве индекса массива. Представь, что первая удаляемая запись будет расположена в самом конце 100 000 набора записей. У тебя что, будет выделен ПУСТОЙ массив на 100000 записей, чтобы сохранить данные в стотысячную строку массива? Система загнется... Позицию записи (если она вообще имеет смысл, в чем я сомневаюсь) следует сохранять так же в массиве, а индекс массива формировать на базе счетчика - значение счетчика равно количеству удаленных записей + 1; Почему я сомневаюсь в том, что номер позиции записи не имеет смысла? Знаешь, понятие "порядковый номер" в SQL отсутствует как таковое - ведь всё зависит от сортировок и от состава набора записей. Если ты собираешься восстанавливать удаленные записи (делать "откат" удаления), то этот порядковый номер тебе ну никак не поможет - вставлять новую запись (для восстановления удаленной) ты будешь в последнюю позицию набора записей, если ориентироваться по виду формы, или вообще будешь вставлять просто в набор записей (без возможности указать позицию), если смотреть из кода (Рекордсет.Add бе-бе-бе...). Если ты собираешься отображать порядковый номер удаленной записи, то это вообще бессмыслено. представляю себе список удаленных записей, которые я хотел бы восстановить: Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. 3. Перебор полей лучше осуществлять через For ... Each ... Впрочем, по одной причине это спорно... Не буду говорить по какой, ибо она на поверхности :) 4. Массив должен быть динамическим и при (удалено, ибо уже пройдено); 5. Нафик ты открываешь и закрываешь клон набора записей, если вполне можешь использовать оригинал? То есть, я имею сказать, что можно просто выполнить DelValue(1, i, j) = Ме.Fields(i).Name и при этом не создавать клон набора записей, не синхронизировать указатели, не закрывать, не удалять его... А?; 6. Возможно действительно стоит реализовать через коллекции, как Саныч посоветовал? Вроде, попроще "низкоуровневых" манипуляций с изменением границ массива :) На самом деле лично я считаю (и вполне могу быть не прав), что такие вещи надо хранить либо во временной таблице, либо в файле, но ни как не в памяти процесса... Но, опять же, это, как бы, чистейшее ИМХО :) 7. А я пошел спать... не... Я пошел с... не, не скажу чего делать :) для Владимир Саныча: Володь, классное изречение! К стыду, никогда не слышал такого... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2003, 11:02 |
|
||
|
Как узнать число записей в массиве?
|
|||
|---|---|---|---|
|
#18+
Нуф, это был не мой пост. :^))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2003, 12:06 |
|
||
|
Как узнать число записей в массиве?
|
|||
|---|---|---|---|
|
#18+
Трррррррыыыыыыындессссссс! Все притензии к Всеволоду снимаются полностью и безоговорочно!!! Чистосердечнейшие извинения Александру Шкуренко. Чего со мной? :( Видимо еще после вчерашнего не отошел :) Третье переиздание поста: 6. Возможно действительно стоит реализовать через коллекции, как АЛЕКСАНДР посоветовал? Вроде, ... для Александра Шкуренко: Саш, классное изречение! К стыду, никогда не слышал такого... //стыдно то как, блииииииин... покраснел... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2003, 13:29 |
|
||
|
Как узнать число записей в массиве?
|
|||
|---|---|---|---|
|
#18+
Нуф писал:покраснел... А на розовом не видно. :^) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2003, 13:31 |
|
||
|
Как узнать число записей в массиве?
|
|||
|---|---|---|---|
|
#18+
Нуф-нуф номер позиции записи не имеет смысла Дело в том, что есть еще один массив, который заполняется на Form_Load. Этот массив хранит в себе "данные до изменения" (это удобно так как в форме обычно не больше 10 записей): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Если данные в форме были изменены, то отмена изменений выполняется так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Если же были удалены несколько строк, то эти строки надо удалить и из массива OldValue иначе все перепутается. А так как номер позиции записи в массиве соответствует номеру позиции этой же записи в рекордсете, то поэтому я и ввел такой идентификатор ========= Shkurenko Alexander Раз у тебя не выходит с массивами... Хотелось бы все же разобраться. Например: ... Спасибо. Попробую разобраться :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2003, 14:22 |
|
||
|
Как узнать число записей в массиве?
|
|||
|---|---|---|---|
|
#18+
И все-таки, прочитав весь тред раз 5, не пойму: ну на фига это в массив-то загонять? ИМХО, стоило бы прислушаться к этому: Нуф-нуф писал:такие вещи надо хранить либо во временной таблице, либо в файле, но ни как не в памяти процесса Гораздо проще удалить запись во вспомогательной таблице, достаточно иметь в обрабатываемом наборе записей ключ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2003, 15:38 |
|
||
|
Как узнать число записей в массиве?
|
|||
|---|---|---|---|
|
#18+
2 Всеволод. Если ты реализуешь механизм транзакций вручную, тогда бросай это занятие. Гораздо качественнее, и надежнее (ключевое слово надежней) работать с временными таблицами, каким бы сложным этот способ не казался. 2 Нуф-Нуф. ... Да ладно тебе, краснеть то. А знать всего нельзя, как бы этого не хотелось. Хотя... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2003, 09:10 |
|
||
|
Как узнать число записей в массиве?
|
|||
|---|---|---|---|
|
#18+
иногда массивы все-таки нужны, например когда на клиенте многократно используется идин и тот же массив данных для вычислений или форматирования . такой способ позволяет оптимизировать быстродействие. но изначально загонять в массив данные в цикле наверное не самое лучшее решение. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2003, 10:06 |
|
||
|
|

start [/forum/topic.php?fid=45&gotonew=1&tid=1677936]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
142ms |
get topic data: |
8ms |
get first new msg: |
5ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 469ms |

| 0 / 0 |
