2014-07-07 1 views
1

어떤 이유로이 코드는이 저장 프로 시저에서 작동하지 않습니다. 쿼리 및 다른 저장 프로 시저에서 테스트했으며 작동합니다. 어떤 이유로이 저장 프로 시저에 대한 값을을 Debug.Print하지 않으며, 오류를 반환 "항목 요청한 이름 또는 서수에 해당하는 컬렉션에서 항목을 찾을 수 없습니다"요청한 이름 또는 서수에 해당하는 컬렉션에서 항목을 찾을 수 없습니다.

Dim x As ADODB.Connection 
Set x = New ADODB.Connection 

x.ConnectionString = "Provider=a;Server=b;Database=c;Trusted_Connection=yes;" 
x.Open 

Dim y As ADODB.Recordset 
Set y = New ADODB.Recordset 
x.CommandTimeout = 0 

Set y = x.Execute("exec SP_storedprocedure 0") 
Debug.Print y(0), y(1), y(2), y(3)**--the problem is here** 

y.Close 
Set y = Nothing 
x.Close 
Set x = Nothing 
+0

'y'에 대한 감시를 추가하고 디버깅을하십시오. eror 메시지는 레코드 집합에 적어도 4 개의 필드가 없음을 나타낼 수 있습니다. –

+1

y.Fields.Count의 값은 디버그 행에 도달 할 때 무엇입니까 ?? –

+0

@ MarkBalhoff 제로 그것은 10이어야합니다 ... – user2989981

답변

0

확실히 그 저장 프로 시저를 확인 는 데이터베이스에 액세스하는 사용자의 보안 개체에 포함됩니다. 대상 : 보안 사용자 -> 사용자 -> 액세스하려는 사용자를 마우스 오른쪽 단추로 클릭하고 속성을 클릭 한 다음 보안 개체 탭을 클릭하고 저장 프로 시저가 올바른지 확인하십시오. 거기에 포함되어 있습니다. "검색"버튼을 클릭하고 "특정 객체"라디오를 선택하십시오 -> 확인을 클릭하십시오 -> 새 팝업에서 "객체 유형"버튼을 클릭하십시오 -> 저장 프로 시저 검사 확인란 -> 확인 -> 확인 저장 프로 시저가 나열되어 있는지 확인하고 확인을 클릭합니다. -> 이제 보안 개체에 나열된 후 -> 명시 적 탭에서 권한 열에서 "Excute"를 찾습니다.> 허가자 열에서 "dbo"가있는 개체를 찾아서 그랜트 체크 박스를 클릭하고 확인을 클릭하십시오.

이렇게하면 문제가 해결됩니다.

+0

위대한보세요. 그러나 나는 문제가있는 저장 프로 시저에 대한 Grantor 열에 'dbo'가 표시되지 않습니다. 어떤 충고? – Bart

0

데이터 집합이 필터링되지 않았는지 확인하십시오. 데이터 세트의 필터를 false로 설정 한 다음 닫은 다음 사용하십시오. 또는 깨끗한 데이터 세트를 사용하는 것이 좋습니다.

0

저장 프로 시저에 가능한 디버그 선택이 있습니까? 디버그 문으로 일부 변수의 값을 선택하는 중일 수 있습니다. 이것은 두 개의 테이블을 반환하는 효과가 있습니다. 당신의 데이터 집합은 달리 언급되지 않는 한 처음 것입니다.

SSMS에서이 작업을 수행하고 돌아오고 있다고 생각하는 것을 반환하는지 확인하십시오.

exec SP_storedprocedure 0 

또한 문제를 해결하려면 4 개의 debug.print 문을 작성하고 어떤 문구가 손상되는지 확인하십시오.

@MarkBalhoff에 대한 계산이 0 인 경우를 생각해 볼 때, 쿼리가 끝날 때 결과를 반환하는 것을 잊었을 가능성이 있습니다. 임시 테이블을 만들고 있습니까?

하여 SP의 마지막 (또는 마지막에 가까운) 문은 다음을 반환 잊고, 함수의 정확한 값을 계산하는

select * from #temp 

유사해야합니다.

관련 문제