2016-10-14 3 views
-1

Это небольшой код кода, который имеет ошибку, которую я имею. Заявление SQL в begginning этоПолучение ошибки в Do Loop

sqlStr = "SELECT Computer, Room_Num, Speed, Num_CPUs, OS_Type, HDD_Size 
FROM Computers WHERE Num_CPUs = 1 OR Speed < 2.1 OR HDD_Size < 300 ORDER BY Room_Num" 


Do Until objRecordSet.EOF 
    recordsStr = recordsStr & objRecordSet.Fields.Item("Computer").Value & _ 
    vbTab & pad(objRecordSet.Fields.Item("HostName").Value,12) & _ 
    vbTab & pad(objRecordSet.Fields.Item("Room_Num").Value,14) & _ 
    vbTab & objRecordSet.Fields.Item("CPU_Type").Value & _ 
    vbTab & objRecordSet.Fields.Item("Speed").Value & _ 
    vbTab & objRecordSet.Fields.Item("Num_CPUs").Value & _ 
    vbTab & objRecordSet.Fields.Item("Bit_Size").Value & _ 
    vbTab & pad(objRecordSet.Fields.Item("OS_Type").Value,12) & _ 
    vbTab & objRecordSet.Fields.Item("Memory").Value & _ 
    vbTab & objRecordSet.Fields.Item("HDD_Size").Value & vbCrLf 
objRecordSet.MoveNext 

Имея ошибку во второй строке:

recordsStr = recordsStr & objRecordSet.Fields.Item("Computer").Value & _ 

Ошибка:

элемент не может быть найден в коллекции, соответствующий запрашиваемое имя или порядковый номер.

Ok как-то я установил, что ошибка, теперь получает новую на строке кода, что я даже не трогать ...

Set objConnection = CreateObject("ADODB.Connection") 
objConnection.Open dataSource 
Set objRecordSet = CreateObject("ADODB.Recordset") 
objRecordSet.Open sqlStr , objConnection 
objRecordSet.MoveFirst 

Получение ошибки в линии

objRecordSet.Open sqlStr , objConnection 

Несоответствие типа данных в выражении критериев

+3

Это означает, что одного из ваших полей не существует. 'Computer, Hostname, Room_Num, Cpu_Type, Speed, Numb_CPUs, Bit_Size, OS_Type, Memory, HDD_Size'. Один из них не входит в ваш запрос или неправильно принят или что-то в этом роде. – JNevill

+0

Кроме того, ваша вторая строка - это все линии в вашем цикле 'DO'. Это одна большая строка, которая охватывает несколько строк с этим '_' в конце. Таким образом, это может быть любой из тех предметов, которые отсутствуют/неправильно введены/тушеные. Проверьте свою инструкцию SQL и убедитесь, что она соответствует. Вы можете добавить свой SQL-запрос здесь в вопрос, и, возможно, мы сможем выяснить, где находится несоответствие. – JNevill

+0

Вам необходимо предоставить больше контекста, чем только один оператор перед циклом. Используйте ссылку [edit], чтобы обновить свой вопрос. –

ответ

2

В запросе:

sqlStr = "SELECT Computer, Room_Num, Speed, Num_CPUs, OS_Type, HDD_Size 
FROM Computers WHERE Num_CPUs = 1 OR Speed < 2.1 OR HDD_Size < 300 ORDER BY Room_Num" 

Вы приносите с помощью следующих полей, computer, room_num, speed, num_cpus, os_type, and hdd_size Но ... в цикле Do вы пытаетесь получить Computer, Hostname, Room_Num, Cpu_Type, Speed, Num_CPUs, Bit_Size, OS_Type, Memory, HDD_Size

Обратите внимание, что здесь Hostname, bit_size, and memory нет в запросе , Вы не можете запрашивать их из своего набора записей, потому что они не находятся в вашем наборе записей, потому что их нет в вашем запросе. Попробуйте:

sqlStr = "SELECT Computer, Room_Num, Speed, Num_CPUs, OS_Type, HDD_Size, Hostname, Bit_size, memory 
FROM Computers WHERE Num_CPUs = 1 OR Speed < 2.1 OR HDD_Size < 300 ORDER BY Room_Num" 

И если предположить таковые имеются в вашем computers столе, он начнет работать.

-1

Это должно показать, что ваше сообщение об ошибке (как правило) вызвано отсутствующими именами полей с ошибкой:

>> Set cn = CreateObject("ADODB.Connection") 
>> cn.Open "DSN=AdvWork" 
>> Set r = cn.Execute("SELECT TOP 1 AddressID FROM Person.Address") 
>> WScript.Echo r("AddressID").Value 
>> WScript.Echo r("AdressID").Value 
>> 
33 
Error Number:  3265 
Error Description: Item cannot be found in the collection corresponding to the requested name or ordinal. 

Первое «недостающее звено» - «HostName»; если вы посмотрите внимательно, вы найдете больше.

+0

Некоторые, как эта ошибка была исправлена, но теперь есть новый в Set objConnection = CreateObject ("ADODB.Connection") objConnection.Open DATASOURCE Set objRecordSet = CreateObject ("ADODB.Recordset") objRecordSet.Open sqlStr, objConnection objRecordSet.MoveFirst – Mouseman

+0

в формате, разделяющем код, он находится в первом сообщении. – Mouseman

+0

Если у вас есть вопрос, который не имеет ничего общего с циклом Do, спросите новый. –