none
VBScript. Как в строку передать значения переменных. RRS feed

  • Вопрос

  • Здравствуйте.

    У меня возникло некое затруднение следующего характера.

    Есть одномерный массив значений. Размер массива имеет переменную величину (максимальный индекс 15). Значения представляют собой числа.

    Эти значения я хочу сохранять в базу SQL.

    И выполняю для этого следующие операции:

    For i = 0 to Ubound(MyArray)

    'Присваиваем имена столбцов в таблице бызы SQL.

    CPU = "CPU" & i
    'Формируем общую строку для выполнения операции INSERT INTO
    strCPU = strCPU & "'" & CPU & "', "
    CPU = MyArray(i)
    Next

    strCPU = Left(strCPU,Len(strCPU)-2)

    CommandText = " INSERT INTO " & strTable & " Values " &_
    "('" & strDate & "', " & strCPU & ");"

    Мне бы хотелось, чтобы в сформированную строку strCPU передались значения CPU. Как это сделать ума не приложу.

     При выполнении WScript.Echo strCPU просто отображается строка 'CPU0', 'CPU1', 'CPU2', 'CPU3', 'CPU4', 'CPU5', 'CPU6', а числа вот никак не хотят заменять CPU0...CPU6.

    Заранее спасибо.

Ответы

  • Для решения проблемы все таки сделал 

    objCommand.CommandText = " INSERT INTO " & strTable & " Values " &_
    "('" & strDate & "', '" &_
    "', '" & CPU0 & "', '" & CPU1 &_
    "', '" & CPU2 & "', '" & CPU3 &_
    "', '" & CPU4 & "', '" & CPU5 &_
    "', '" & CPU6 & "', '" & CPU7 &_
    "', '" & CPU8 & "', '" & CPU9 &_
    "', '" & CPU10 & "', '" & CPU11 &_
    "', '" & CPU12 & "', '" & CPU13 &_
    "', '" & CPU14 & "', '" & CPU15 & "');"

    Если значения нет, то в столбец записывается -1.

    • Помечено в качестве ответа NewFeofan 3 июля 2012 г. 12:38
    3 июля 2012 г. 12:38

Все ответы

  • Выполняется именно то, что вы и написали. Посмотрите, присваивание

    CPU = MyArray(i)

    нигде не используется и не участвует в формировании переменной strCPU. Исправите цикл сами или напишите, каким вы хотите видеть значение strCPU.

    Модератор
  • MyArray(i) формируется ранее. Я не правильно написал - Ubound(MyArray). Вместо Ubound(MyArray) указывается число, равное количеству ядер процессора на компьютере.

    А в переменную strCPU я хотел бы сложить числа загрузки по ядрам полученные ранее.

    Т.е. вместо 'CPU0', 'CPU1', например, '23', '12'. Это в варианте 2 ядерного процессора.

  • вместо

    strCPU = strCPU & "'" & CPU & "', "
    CPU = MyArray(i)
    сделайте
    CPU = MyArray(i)
    strCPU = strCPU & "'" & CPU & "', "

    да и вот это вообще зачем?: CPU = "CPU" & i
    • Изменено Svolotch 3 июля 2012 г. 9:45
  • CPU = "CPU" & i 

    таким образом получается

    CPU0, CPU1 и тд.

    И далее этим переменным присваиваются численные значения.

    Далее должна в зависимости от количества ядер сформироваться строка для записи данных в базу SQL.

    CommandText = " INSERT INTO " & strTable & " Values " &_
    "('" & strDate & "', " & strCPU & ");"

    3 июля 2012 г. 10:46
  • Так это можно было сделать через WMI и Foreach без каких либо усилий и массив определять не надо.
    3 июля 2012 г. 10:47
  • CommandText = " INSERT INTO " & strTable & " Values " &_
    "('" & strDate & "', " & strCPU & ");"

    В этой строке должны быть перечислены все столбцы таблицы strTable. Наименование столбцов для ядер и дет от CPU0 до CPU15.

    Можно было бы передавать в строке сразу перечисление всех столбцов.

    CommandText = " INSERT INTO " & strTable & " Values " &_
    "('" & strDate & "', '" & CPU0 & "', '" & CPU1 & "', '" & CPU2 & "', '" & CPU3 & "', '" & CPU4 & "', '" & CPU5 & "', '" & CPU6 & "' и тд );"

    Но хотелось бы формировать сразу строку с CPU реально существующими в системе.

    3 июля 2012 г. 10:55
  • Вот вам пример на PoSh:

    foreach ($proc in (gwmi Win32_PerfFormattedData_PerfOS_Processor)) {
        write-host "CPU:"$proc.Name, "Usage:"$proc.PercentProcessorTime
    }

    На VBScript всё тоже самое.
    3 июля 2012 г. 10:58
  • Данные о загрузке ядер я в скрипте получаю.

    Проблема в том, как эти данные сохранить в базе SQL. Причем каждое значение в свой столбец. При этом количество ядер всегда разное.

    3 июля 2012 г. 11:16
  • CPU = "CPU" & i 

    таким образом получается

    CPU0, CPU1 и тд.

    И далее этим переменным присваиваются численные значения.

    ээээ, чо?

    напишите пример sql запроса который вы в итоге хотите получить

    3 июля 2012 г. 11:45
  • Так как я хотел сделать не получится, потому что все равно переменная strCPU является строкой.

    To Svolotch, вместо 

    objCommand.CommandText = " INSERT INTO " & strTable & " Values " &_
    "('" & strDate & "', '" &_
    "', '" & CPU0 & "', '" & CPU1 &_
    "', '" & CPU2 & "', '" & CPU3 &_
    "', '" & CPU4 & "', '" & CPU5 &_
    "', '" & CPU6 & "', '" & CPU7 &_
    "', '" & CPU8 & "', '" & CPU9 &_
    "', '" & CPU10 & "', '" & CPU11 &_
    "', '" & CPU12 & "', '" & CPU13 &_
    "', '" & CPU14 & "', '" & CPU15 & "');"

    Хотелось написать objCommand.CommandText = " INSERT INTO " & strTable & " Values " &_
    "('" & strDate & "', " & strCPU & ");"

    3 июля 2012 г. 12:05
  • Для решения проблемы все таки сделал 

    objCommand.CommandText = " INSERT INTO " & strTable & " Values " &_
    "('" & strDate & "', '" &_
    "', '" & CPU0 & "', '" & CPU1 &_
    "', '" & CPU2 & "', '" & CPU3 &_
    "', '" & CPU4 & "', '" & CPU5 &_
    "', '" & CPU6 & "', '" & CPU7 &_
    "', '" & CPU8 & "', '" & CPU9 &_
    "', '" & CPU10 & "', '" & CPU11 &_
    "', '" & CPU12 & "', '" & CPU13 &_
    "', '" & CPU14 & "', '" & CPU15 & "');"

    Если значения нет, то в столбец записывается -1.

    • Помечено в качестве ответа NewFeofan 3 июля 2012 г. 12:38
    3 июля 2012 г. 12:38
  • и что у вас не получается то?

    strTable="my_table"
    strDate="02.07.12"
    MyArray = Array("один","2","много","cтопицот","5","100","500","e","e","e")
    
    For i = 0 to Ubound(MyArray)
    CPU = MyArray(i)
    strCPU = strCPU & "'" & CPU & "', "
    Next
    strCPU = Left(strCPU,Len(strCPU)-2)
    CommandText = " INSERT INTO " & strTable & " Values " & "('" & strDate & "', " & strCPU & ");"
    
    wscript.echo CommandText
    ----------------------

    C:\Projects\X-nya>cscript q.vbs
    Сервер сценариев Windows (Microsoft ®) версия 5.8
    © Корпорация Майкрософт (Microsoft Corp.), 1996-2001. Все права защищены.

     INSERT INTO my_table Values ('02.07.12', 'один', '2', 'много', 'cтопицот', '5', '100', '500', 'e', 'e', 'e');

    -----------------------

    вот вам запрос, вы это хотели получить или что?

    напишите пример SQL запроса который вы В ИТОГЕ хотите получить.

    3 июля 2012 г. 12:42
  • Вам повезло, что у вас не 1000 ядер :)