2016-10-14 15 views
-1

これは、私が持っているエラーを持っている小さなコードです。エラーがあるDoループでエラーを取得する

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

アイテムが対応するコレクションで見つけることができませんbegginningで SQLステートメントは、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" 


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 

です要求された名前または序数。

OK]をクリックして何とか私は今ラインでエラーを取得する新しい私も触れていないコードの1行に1つ...

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'のうちの1つがあなたの問い合わせに含まれていないか、または間違っています。 – JNevill

+0

また、2行目は実際には 'DO'ループのすべての行です。これは最後に '_'をつけて複数の行にまたがる大きな行です。だから、失われた/誤って綴られた/太っている部分のいずれかになる可能性があります。 SQL文を確認し、一致することを確認してください。ここで質問にSQLステートメントを追加することができます。おそらく、不一致がどこにあるか把握するのに役立ちます。 – JNevill

+0

ループの前に1つのステートメントだけでなく、より多くのコンテキストを提供する必要があります。あなたの質問を更新するには、[編集]リンクを使用してください。 –

答えて

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ループにあなたはHostname, bit_size, and memoryがあなたのクエリに存在しないことをここComputer, Hostname, Room_Num, Cpu_Type, Speed, Num_CPUs, Bit_Size, OS_Type, Memory, HDD_Size

通告を取得しよう。クエリセットに含まれていないため、レコードセットに含まれていないため、レコードセットからそれらのレコードセットを要求することはできません。試してみてください:

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. 

最初の 'missing link'は「HostName」です。あなたが慎重に見れば、より多くを見つけるでしょう。クエリで

+0

そのエラーは、固定されたが、現在の設定objConnection =のCreateObject( "ADODB.Connectionの") objConnection.OpenのdataSource 設定objRecordSet =のCreateObject( "ADODB.Recordsetの") objRecordSet.Open sqlStr、objConnection で新しいものを持ってしまったいくつかの方法objRecordSet.MoveFirst – Mouseman

+0

の形式でコードを区切ります。これは最初の投稿にあります。 – Mouseman

+0

Doループと関係がない質問がある場合は、新しい質問をしてください。 –

関連する問題