Форумы HiProg.com - MS ACCESS, VBA, VB

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

ник: Lukas
Спасибо, Анатолий.
Что хранят переменные типа Object, String и Variant я примерно догадываюсь.

Пример, на основе вашего:

Sub TestCopyArrays3()
Dim Arr1(1 To 2) As Variant
Dim Arr3(1 To 2, 1 To 2) As Variant

Arr3(1, 1) = "Первый элемент первой размерности массива"
Arr3(1, 2) = "Второй элемент первой размерности массива"
Arr3(2, 1) = "Первый элемент второй размерности массива"
Arr3(2, 2) = "Второй элемент второй размерности массива"

    Call CopyMemory(lpvDest:=Arr1(1), lpvSource:=Arr3(1, 1), cbCopy:=UBound(Arr1) * 16)
Debug.Print Arr1(1)
Debug.Print Arr1(2)
End Sub

Дает результат:

Первый элемент первой размерности массива
Первый элемент второй размерности массива

То есть, мне возвращаются значения "построчно", а не "по столбцу" как мне требуется.

Однако, для массива (0, n) это не будет иметь значения.

Sub TestCopyArrays2()

Dim Arr3(0, 1 To 2) As Variant
Dim Arr1() As Variant
ReDim Arr1(1 To 2)

Arr3(0, 1) = "Первый элемент первой размерности массива"
Arr3(0, 2) = "Второй элемент первой размерности массива"

    Call CopyMemory(lpvDest:=Arr1(1), lpvSource:=Arr3(0, 1), cbCopy:=UBound(Arr1) * 16)
Debug.Print Arr1(1)
Debug.Print Arr1(2)
End Sub

Результат:

Первый элемент первой размерности массива
Второй элемент первой размерности массива

То есть, в принципе, то что мне нужно.

Вот то, над чем я веселюсь:

Public Function Test5()
    Dim varArr() As Variant, strArr() As Variant
    
    With CurrentDb.OpenRecordset("SELECT Item From tbl21 WHERE ID<7", dbOpenSnapshot)'6 записей
        .MoveLast: .MoveFirst
        varArr = .GetRows(.recordCount)
        ReDim strArr(1 To .recordCount)
        .Close
    End With
    CopyMemory strArr(1), varArr(0, 0), 16 * UBound(strArr)
    
    Debug.Print strArr(1); strArr(2); strArr(3); strArr(4); strArr(5); strArr(6)
End Function

Примерный результат =>
Причем, при первом вызове всегда дает правильный результат,
а на последующих либо врет - либо вылет в аут всего Access-а.
(на 2 вызов, на третий... всегда по-разному)


Ваше имя:

Пароль:

Цитировать: [quote][/quote] Код: [code][/code]
Жирный: [b][/b] Наклонный: [i][/i]
URL: [url][/url] 

Сообщение:

 Размер файла не более 50 Кбт. Большие файлы можно размещать на www.slil.ru

Прикрепить:

 

Для вставки смайлов в текст щелкните по значку.