Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Daniel1

[Resolvido] Propriedade Fields.Count não funciona com Sintaxe SQL

Recommended Posts

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.