Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ao Fazer laço For(ASP vbScript), usei a propriedade Fields.Count para saber quantas linhas o Select me retornava, porém ao fazer um inner join não exibe todos os dados da Sintaxe, somente os 3 primeiros dados segue o código:
conexao="driver={SQL Server};" & _
"server=Maquina\SQLEXPRESS;" & _
"database=DB;" & _
"Uid=sa;" & _
"Pwd=xxxxxx;"
Function Criadatagrid
Set objConn = Server.CreateObject("ADODB.Connection")
Set objRS = Server.CreateObject("Adodb.Recordset")
objConn.Open conexao
strQuery="Select DB.dbo.Cursos.cdCurso, DB.dbo.Cursos.nmCursoEscolhido, DB.dbo.Cursos.vlCurso,DB.dbo.Categoria.nmCategoria from DB.dbo.Cursos INNER JOIN DB.dbo.Categoria on DB.dbo.Cursos.cdCategoria=DB.dbo.Categoria.cdCategoria order by nmCategoria OPTION(HASH JOIN)"
Set objRS = objConn.Execute(strQuery)
Total=objRS.Fields.count -1
For i=0 to Total
ID=objRS(0).value
Curso=objRS(1).value
Valor=objRS(2).value
Categoria=objRS(3).value
Response.write("Teste: "&ID&","&Curso&","&Valor&","&Categoria&"<br />")
objRS.movenext
next
end Function
Call Criadatagrid
No códgio **Total=objRS.Fields.count -1**, o retorno é 3, isto é, ele só me retorna o Total de linhas que contém na Tabela Categoria (dedução), o que ele deveria exibir é o total de linhas da sintaxe sql (Select/Inner Join) que no caso seria 14 linhas.
Gostaria de Saber se existe alguma maneira de contornar esse erro, ou se estou fazendo algo errado com a sintaxe sql (Select/Inner Join) e o código asp muito obrigado.
Caso venha interessar coloco abaixo o conteúdo das Tabelas:
>
Tabela DB.dbo.Cursos -> cdCurso,cdCategoria, nmCursoEscolhido, vlCurso
01 ,1 , Curso Teste 01 , 450
02 ,2 , Curso Teste 02 , 250
03 ,1 , Curso Teste 03 , 860
04 ,1 , Curso Teste 04 , 342
05 ,1 , Curso Teste 05 , 752
06 ,3 , Curso Teste 06 , 586
07 ,4 , Curso Teste 07 , 125
08 ,4 , Curso Teste 08 , 453
09 ,4 , Curso Teste 09 , 789
10 ,3 , Curso Teste 10 , 987
11 ,3 , Curso Teste 11 , 123
12 ,2 , Curso Teste 12 , 321
13 ,2 , Curso Teste 13 , 654
14 ,2 , Curso Teste 14 , 147
15 ,4 , Curso Teste 15 , 852
Tabela DB.dbo.Categoria -> cdCategoria, nmCategoria
1 , Extensão
2 , Aperfeiçoamento
3 , Graduação
4 , Pos-Graduação
Se possivel moderadores, arrumar cabeçalho do Post para:
Propriedade Fields.Count não funciona com Sintaxe SQL inner join Muito obrigado.
Valeu pela ajuda xanburzum
Vou tentar essa dica amanhã se funcionar posto aqui
Obrigado.
Post Resolvido por favor moderadores podem fechar o Post :natalbiggrin: muito obrigado.
Troquei o laço "for" por while do not Resultset.eof e funcionou muito obrigado Xan e a todos.
Fica aqui a dica para quem passar pelo mesmo problema.
dependendo da situacaun melhor usar um contatdor normal ou a clausula count do SQL, pois se o seu bd for muito grande o recordcount do objeto recordset para apresentar queda de desempenho
e para usar o RecordCount , seu cursortype tem k ser recordset.CursorType = 3 (AdOpenDynamic)
exemplo:
<%
DIM mySQL, objRS
mySQL = "SELECT * FROM myTable"
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open mySQL, objConn
' Count how many records exist
DIM iRecordCount
iRecordCount = 0
DO WHILE NOT objRS.EOF
iRecordCount = iRecordCount + 1
objRS.MoveNext
Loop
' Display result
Response.Write "(" & iRecordCount & ")"
objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
%>
SQL COUNT
<!--#INCLUDE VIRTUAL="/includes/connection.asp" -->
<%
DIM mySQL, objRS
mySQL = "SELECT Count(*) AS intTotal FROM myTable"
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open recSQL, objConn
' Display result
Response.Write objRS("intTotal")
objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
%>