У меня есть VBScript, который берет некоторые системные ресурсы и сохраняет их в переменных, и я хочу записать их в таблицу MySQL.Несоответствие типа MySQL
Когда я получаю заявление SQL Я получаю сообщение об ошибке
Type mismatch: '[string: "insert into monitor "]'
Я гугле и знаю, что он пытается передать неправильные данные в тип данных.
MySQL Таблица вывода
CREATE TABLE monitor (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
pcname VARCHAR(30),
cpu decimal(4,2),
hdd decimal(4,2),
mem decimal(4,2),
rdate TIMESTAMP
);
Пример:
+----+-------------+------+-------+-------+---------------------+ | id | pcname | cpu | hdd | mem | rdate | +----+-------------+------+-------+-------+---------------------+ | 1 | HOSTNAME-PC | 4.00 | 39.26 | 74.28 | 2016-04-21 12:16:04 | +----+-------------+------+-------+-------+---------------------+
Установить переменные
Dim Connection
Dim ConnectionString
Dim Recordset
Dim SQL
dim cpu
dim hdd
dim mem
dim host
Получить имя хоста и хранить в узле:
Set wshShell = CreateObject("WScript.Shell")
strRegValue = "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Hostname"
strHostName = wshShell.RegRead(strRegValue)
host = strHostName
Получить процессор и хранить в процессоре:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PerfFormattedData_PerfOS_Processor WHERE Name = '_Total'")
For Each objItem In colItems
cpu = objItem.PercentProcessorTime
Next
Получить место на жестком диске и хранить в НЖМД
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery(_
"SELECT * FROM Win32_LogicalDisk Where Name='C:'",,48)
For Each objItem In colItems
intFreeSpace = objItem.FreeSpace
intTotalSpace = objItem.Size
pctFreeSpace = Round((intFreeSpace/intTotalSpace)*100, 2)
hdd = pctFreeSpace
Next
Получить пространство памяти и хранить в тлф:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
GB = 1024 *1024 * 1024
For Each objItem In colItems
intTotal = Round(objItem.TotalPhysicalMemory/GB, 3)
Next
Set colItems1 = objWMIService.ExecQuery("Select * from Win32_PerfFormattedData_PerfOS_Memory",,48)
For Each objItem1 In colItems1
intAvail = Round(objItem1.AvailableBytes/GB, 3)
Next
pctFree = Round((intAvail/intTotal)*100, 2)
mem = pctFree
SQL Statement получая ошибка:
"Type mismatch: '[string: "insert into monitor "]'"
SQL = "insert into monitor (pcname,cpu,hdd,mem) values ('"+host+"','"+cpu+"','"+hdd+"','"+mem+"')"
Остальной код:
ConnString = "DRIVER={MySQL ODBC 3.51 Driver}; SERVER=servername; DATABASE=dbname; " &_
"UID=username;PASSWORD=password; OPTION=3"
Set Connection = CreateObject("ADODB.Connection")
Set Recordset = CreateObject("ADODB.Recordset")
Connection.Open ConnString
Recordset.Open SQL,Connection
If Recordset.EOF Then
Wscript.Echo("No records returned.")
Else
Do While NOT Recordset.Eof
WScript.Echo Recordset("pcname")
WScript.Echo Recordset("cpu")
WScript.Echo Recordset("hdd")
WScript.Echo Recordset("mem")
WScript.Echo "<br>"
Recordset.MoveNext
Loop
End If
Recordset.Close
Set Recordset = Nothing
Connection.Close
Set Connection = Nothing
Десятичные числа не следует указывать. –
В vbs вы можете использовать как & и + для конкатенации строк, см. Https://technet.microsoft.com/en-us/library/ee156813.aspx – Shadow
Это не решит проблему вообще (инструкция все еще пытается для вставки строк в числовые поля). –