1

Тема: HTA + VBS + ActiveX

Не получается в элемент ListView добавить данные. Пишет ошибку "invalid property value"

<script language="vbscript">
Sub Window_Onload
    ListView1.font = "arial" 
    ListView1.View = 3
    ListView1.GridLines = True
    ListView1.ColumnHeaders.Add , , "ИД", 100
    ListView1.ColumnHeaders.Add , , "Название", 100
    ListView1.ColumnHeaders.Add , , "ИНН", 110
    self.Focus()
End Sub
Sub AddItem(ID, Name, INN)
    Set itmx = ListView1.ListItems.Add(, , ID)
    itmX.SubItems(1) = Name
    itmX.SubItems(2) = INN
End Sub
</script>

Далее получаем данные из внешнего источника и обращаемся к AddItem

While Not objRecordset.EOF 
        Call Additem (objRecordset.Fields(0).Value, objRecordset.Fields(4).Value,  objRecordset.Fields(2).Value)
        objRecordset.MoveNext
 Wend

Тут все и заканчивается. Из значений вствляется только 1 число первой строки.
Причем, что удивительно пример работы с ListView скопирован из работающего примера, а у меня не работает.

Автоматизирую торговлю. Не 1С

2

Re: HTA + VBS + ActiveX

Mat Skywalker пишет:

Причем, что удивительно пример работы с ListView скопирован из работающего примера, а у меня не работает.

Это уже из разряда "Раньше все работало, переустановил систему - ничего теперь не отправляется."

Пишет ошибку "invalid property value"

Где же код этой злосчастной процедуры? А что такое objRecordset?

<телепатия>
     "ADODB.Recordset"
     ошибка возникает при работе с БД.
</телепатия>

Увы, но мои экстрасенсорные способности на этом заканчиваются.

3 (изменено: Mat Skywalker, 2011-02-13 06:18:40)

Re: HTA + VBS + ActiveX

Аскет пишет:

Увы, но мои экстрасенсорные способности на этом заканчиваются.

Вы не разобрались в приведенном коде
objRecordset - набор данных, результат выполнения SQL запроса
Ошибка появляется именно при добавлении данных в ListView
Причем если вставлять все в одну колонку, то работает без ошибок.

Аскет пишет:

Где же код этой злосчастной процедуры?

Я вас не понимаю. Какой код? Если возникает вопрос о том есть ли вообще данные в objRecordset, то все проверено - данные есть.

Господин Аскет, не делайте выводов не разобравшись в вопросе.

Автоматизирую торговлю. Не 1С

4

Re: HTA + VBS + ActiveX

Mat Skywalker пишет:
Аскет пишет:

написал:

Где же код этой злосчастной процедуры?

Я вас не понимаю. Какой код?

[color=]ПРОБЛЕМНЫЙ КОД![/color] В ошибке указывается № строки и символ.

Кусок, приведённый в 1-м посте рабочий и не говорит абсолютно ни о чём: ни о передаваемых данных, ни о их типе, ни о чём либо другом.
Да там ни строчки об используемом объекте - версия, clsid, и т.д. Рыскать по реестру и на свой вкус подбирать?
Ищите ошибку в другом месте. Или приводите код всего скрипта.
--------------------------------------------------------

Как же вы не понимаете, нам кодерам приходится тратить слишком много сил и энергии на телепатические сеансы и попытки извлечения из вас необходимой информации, для решения ваших же проблем!

5 (изменено: Mat Skywalker, 2011-02-13 11:39:19)

Re: HTA + VBS + ActiveX

Вот весь скрипт

<HTML>
  <HEAD>
      <STYLE TYPE='text/css'>    
BODY        {background-color:  #FF9933;}     
PRE        {border: 2px; border-style: solid; font-family: Lucida Console; font-size: 14px; background-color:  #b5bcf2;}   
INPUT        {border: 2px solid olive;}     
    </STYLE>  
    </head>
    <script language="vbscript">
Sub Window_Onload
    ListView1.font = "arial" 
    ListView1.View = 3
    ListView1.GridLines = True
    ListView1.ColumnHeaders.Add , , "ИД", 100
    ListView1.ColumnHeaders.Add , , "Название", 100
    ListView1.ColumnHeaders.Add , , "ИНН", 110
    self.Focus()
End Sub
Sub AddItem(Name, ID)
msgbox Name & " " & ID ' Смотрим, что именно собираемся вставлять
    Set itmx = ListView1.ListItems.Add(, , Name)
    itmX.SubItems(1) = ID ' На этом этапе ошибка invalid property value т.е. неверное значение параметра. Не могу понять как именно вставлять данные в ListView по столбцам
End Sub
</script>    
  <BODY SCROLL="NO" style="text-align: center">
<OBJECT ID="ListView1"  WIDTH=700 HEIGHT=340 CLASSID="CLSID:BDD1F04B-858B-11D1-B16A-00C0F0283628">
 </OBJECT>
<script language="vbscript">
Set IBConn = CreateObject("ADODB.Connection")   
        Set WshShell = CreateObject("WScript.Shell") 
        Set objShell = CreateObject("Shell.Application") 
        Set objFolder = objShell.Namespace(WshShell.CurrentDirectory)
        Set objFolderItem = objFolder.Self
        Set DBConn = CreateObject("ADODB.Connection")   
        Set objFS = CreateObject("Scripting.FileSystemObject")
        Path = objFolderItem.Path + "\"
        strFilePath = Path+"fb.ini"
        Set objTS = objFS.OpenTextFile(strFilePath, 1)
        objTS.SkipLine
        objTS.SkipLine
         Udlread=objTS.Readline
         IBConn.Open(Udlread)
         strFilePath = Path+"qery.sql"
         Set SQLf = objFS.OpenTextFile(strFilePath, 1) 
         SQLstr = SQLf.ReadAll '  Читаем строку подключения из файла
         Set objRecordset = IBConn.Execute(SQLstr) ' Выполняется запрос                           
 While Not objRecordset.EOF 
    Call Additem (objRecordset.Fields(4).Value, objRecordset.Fields(0).Value) ' Заполняем таблицу данными из запроса
    objRecordset.MoveNext
 Wend                              
</script>
</body>
</html>

Тип данных, получаемых в результате выполнения запроса значения не имеет.

Автоматизирую торговлю. Не 1С

6

Re: HTA + VBS + ActiveX

Mat Skywalker, Вы про это что ль?!

<html>
    <head>
    </head>
    <script language="vbscript">
        Sub Window_Onload
            With ListView1
                .font = "arial" 
                .View = 3
                .GridLines = True
                
                With .ColumnHeaders
                    .Add , , "ИД", 100
                    .Add , , "Название", 100
                    .Add , , "ИНН", 110
                End With
            End With
        End Sub

        Sub AddItem(Name, ID, ID2)
            With ListView1.ListItems.Add(, , Name)
                With .ListSubItems
                    .Add ,, ID
                    .Add ,, ID2
                End With
            End With
        End Sub
    </script>
    <body>
        <object id="ListView1" width="700" height="340" classid="CLSID:BDD1F04B-858B-11D1-B16A-00C0F0283628">
        </object>
        <script language="vbscript">
            Additem "qww",  "asd",  "zxc"
            Additem "qww2", "asd2", "zxc2"
            Additem "qww3", "asd3", "zxc3"
        </script>
    </body>
</html>

7

Re: HTA + VBS + ActiveX

Огромное спасибо. Век живи век учись.

Автоматизирую торговлю. Не 1С

8

Re: HTA + VBS + ActiveX

Ну оно в любом случае работало:

<OBJECT ID="ListView1"  WIDTH=700 HEIGHT=340 CLASSID="CLSID:BDD1F04B-858B-11D1-B16A-00C0F0283628">
 </OBJECT>

<script language="vbscript">
Sub Window_Onload
    ListView1.font = "arial" 
    ListView1.View = 3
    ListView1.GridLines = True
    ListView1.ColumnHeaders.Add , , "ИД", 100
    ListView1.ColumnHeaders.Add , , "Название", 100
    ListView1.ColumnHeaders.Add , , "ИНН", 110
    self.Focus()
End Sub
Sub AddItem(ID, Name, INN)
    Set itmx = ListView1.ListItems.Add(, , ID)
    itmX.SubItems(1) = Name
    itmX.SubItems(2) = INN
End Sub
</script>
<BUTTON ONCLICK='AddItem 1,"name","№"'>Add</BUTTON>

Подходим к самому главному.

Mat Skywalker пишет:

Тип данных, получаемых в результате выполнения запроса значения не имеет.

Кто это вам так сказал? Всё с точностью до наоборот, и программа вам ясно об этом сообщила. 

"invalid property value"

ListItemObject.SubItems(index) [= string]  (так гласит документация)

(именно STRING, а не какой-нибудь variant из результата запроса к БД)

9

Re: HTA + VBS + ActiveX

Странно. Я побывал преобразовывать все в string, все равно не помогало. Работает именно то, что написал alexii причем безо всякого преобразования типов.

Автоматизирую торговлю. Не 1С