Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.04.10;
Скачать: [xml.tar.bz2];

Вниз

Error creating variant or safe array. Из-за чего?   Найти похожие ветки 

 
12 ©   (2011-01-14 12:22) [0]

Забираю из excel в stringgrid
На одном файле - все нормально, пробую другой - ошибка.

Именно, если я специально набил данные - берет нормально
Стоит открыть "левый файл", а по-идее, какая ему разница?, так ошибка.

   
ArrayData: Variant;

   BeginRow :=1;
   BeginCol := 1;
   RowCount := ExcelApp.Cells.SpecialCells(11).Row;
   ColCount := ExcelApp.Cells.SpecialCells(11).Column;
   sgView.RowCount := RowCount ;
   sgView.ColCount := ColCount ;
   if (RowCount <> 100) and (ColCount <> 9) then
     Exit;   -- именно такие размеры получаются
   ArrayData := VarArrayCreate([BeginRow, BeginCol, RowCount + 1, ColCount + 1], varOleStr); // тут - Error creating variant or safe array

// varVariant); // так раньше пробовал
// ибо тут http://forum.vingrad.ru/forum/topic-141245/0.html сказали  про varOleStr



 
12 ©   (2011-01-14 12:52) [1]

а так работает
чудеса..

   //ArrayData := VarArrayCreate([BeginRow, BeginCol, RowCount + 1, ColCount + 1], varOleStr);// varVariant);
    ArrayData := VarArrayCreate([1, 1, 150, 150], varOleStr);


 
KilkennyCat ©   (2011-01-14 13:06) [2]


> if (RowCount <> 100) and (ColCount <> 9) then
>      Exit;


не вяжется с
> RowCount := ExcelApp.Cells.SpecialCells(11).Row;
>    ColCount := ExcelApp.Cells.SpecialCells(11).Column;
>    sgView.RowCount := RowCount ;
>    sgView.ColCount := ColCount
> VarArrayCreate([BeginRow, BeginCol, RowCount + 1, ColCount
> + 1], varOleStr); // тут - Error creating variant or safe
> array
я бы так сделал


if (ExcelApp.Cells.SpecialCells(11).Row<> 100) and (ExcelApp.Cells.SpecialCells(11).Column <> 9) then Exit;
sgView.RowCount := 100;
 sgView.ColCount := 9;
  ArrayData := VarArrayCreate([1, 1, 101, 10], varOleStr);

если нет никаких планов на RowCount и пр. в дальнейшем.


 
12 ©   (2011-01-14 13:09) [3]

не работает
   if (RowCount <> 100) and (ColCount <> 9) and (BeginRow <> 1) and (BeginCol <> 1) then
     Exit;
   //ArrayData := VarArrayCreate([BeginRow, BeginCol, RowCount + 1, ColCount + 1], varOleStr);// varVariant);
    ArrayData := VarArrayCreate([1, 1, 101, 10], varOleStr);
   exit;

работает
   if (RowCount <> 100) and (ColCount <> 9) and (BeginRow <> 1) and (BeginCol <> 1) then
     Exit;
   //ArrayData := VarArrayCreate([BeginRow, BeginCol, RowCount + 1, ColCount + 1], varOleStr);// varVariant);
    ArrayData := VarArrayCreate([1, 1, 10, 101], varOleStr);
   exit;

что за глупость?
ну, ладно, пусть я ошибся (и то, возможно, ошибся с порядком аргументов), но какая ему разница, какие там числа стоят?!!


 
12 ©   (2011-01-14 13:10) [4]


> KilkennyCat ©   (14.01.11 13:06) [2]

100 и 9 - это я для вас написал, чтоб было понятно, что выхода не было, и чему они равны, следовательно.


 
RWolf ©   (2011-01-14 13:13) [5]


> 12 ©   (14.01.11 13:09) [3]


> но какая ему разница, какие там числа стоят?!!

в 1-м случае некорректные границы массива получаются.


 
Сергей М. ©   (2011-01-14 13:16) [6]

> какая ему разница, какие там числа стоят?

Как это "какая" ?)
Каждая пара значений описывает нижнюю и верхнюю границу индексов описываемой размерности)
С какой радости нижняя граница равна 101, а верхняя при этом у тебя меньше нижней ?)


 
Сергей М. ©   (2011-01-14 13:18) [7]

Если уж не хочется заморачиваться что там больше или меньше, поступи тупо но надежно: [Min(BoundIndex1, BoundIndex2), Max(BoundIndex1, BoundIndex2)]


 
KilkennyCat ©   (2011-01-14 13:20) [8]

еще нашел, что:
Функция VarArrayCreate создает массив variant с пределами, заданными параметром Bounds и типом элементов, заданным параметром VarType. Параметр Bounds должен содержать четное число значений, каждая пара которых задает пределы изменения индексов соответствующего измерения.


 
12 ©   (2011-01-14 13:25) [9]

аа..
а я всегда думал, что просто матрица создается, по размерам..
а уж как ее интерпретировать - дело второе

Спасибо


 
Сергей М. ©   (2011-01-14 13:39) [10]

> а я всегда думал

А не надо думать - надо справку читать)
Хотя и там лажа:

each pair of values specifies the upper and lower bounds of one dimension of the array.

Т.е. действуя по справке ты как раз получаешь теми самыми граблями, но оно хотя бы на мысль наведет)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.04.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.005 c
2-1294836816
пишу_курсовой
2011-01-12 15:53
2011.04.10
посоветуйте, как организовать алгоритм


15-1293022442
12
2010-12-22 15:54
2011.04.10
Черная дыра. Как она может быть такой, как пишут?


1-1251369396
ViToTiV
2009-08-27 14:36
2011.04.10
Вызов формы без деактивации текущей формы


6-1233550485
vann
2009-02-02 07:54
2011.04.10
Как задать таймаут при определении имени хоста?


2-1294837070
TKN
2011-01-12 15:57
2011.04.10
библиотека qtinf.dll при установке приложения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский