Ir para conteúdo

POWERED BY:

Arquivado

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

Daniel Ribeiro Bueno

Array bidirecional redimensionado por consulta SQL

Recommended Posts

Pessoal,

 

Meu primeiro post no fórum e já começo com uma dúvida que está tirando o sono.

Como fazer para que um array bidirecional seja dimensionado de forma qua a 1ª dimensão seja o nº de linhas de uma consulta do SQL Server?

 

Por exemplo eu tenho:

 

<%
dim  arr(100,2)	'Veja que o array está limitado a receber apenas 100 registros, e se o banco tiver mais do que isso, vai dar erro
sql =  "SELECT login, nome, cpf FROM Usuarios"
SET rs = fRecordset(sql,Con,3,3) 'fRecordset = função que envia o SELECT pro SQL Server
i = 0

do while not rs.eof
	arr(i,0) = rs("login")
	arr(i,1) = rs("nome")
	arr(i,2) = rs("cpf")
	i = i + 1		
	rs.movenext
loop
%>

Alguém tem idéia de como redimensionar o array de acordo com o nr de linhas??

Compartilhar este post


Link para o post
Compartilhar em outros sites

pesquise sobre getrows

Compartilhar este post


Link para o post
Compartilhar em outros sites

Daniel,

GetRows resolveria seu problema já que devolveria um Array de acordo com os registros.

Entretanto a solução que você busca também é possível

 

Redimensione o Array após a consulta, utilizando a propriedade ".RecordCount" do Recorset, seu código ficaria assim

 

dim  arr(0,2)
sql =  "SELECT login, nome, cpf FROM Usuarios"
SET rs = fRecordset(sql,Con,3,3) 

Redim arr(rs.RecordCount - 1,2)

i = 0

Isso irá redimensionar seu Array de acordo com a quantidade de registros retornados.

Como o Array, normalmente parte da posição Zero e o RecordCount é baseado em 1, utilize o "-1" para subtrair um número da quantidade de registros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Daniel,

GetRows resolveria seu problema já que devolveria um Array de acordo com os registros.

Entretanto a solução que você busca também é possível

 

Redimensione o Array após a consulta, utilizando a propriedade ".RecordCount" do Recorset, seu código ficaria assim

 

dim  arr(0,2)
sql =  "SELECT login, nome, cpf FROM Usuarios"
SET rs = fRecordset(sql,Con,3,3) 

Redim arr(rs.RecordCount - 1,2)

i = 0

Isso irá redimensionar seu Array de acordo com a quantidade de registros retornados.

Como o Array, normalmente parte da posição Zero e o RecordCount é baseado em 1, utilize o "-1" para subtrair um número da quantidade de registros.

Bom dia ...

Estou com um problema parecido, se não for o mesmo ...

Estou precisando criar um array, mais não queria fixar o tamanho dele, pois pode ser que encontre mais registros do que o array suporta, portanto, queria um array com tamanho variável, de acordo com o que encontrar no banco ...

 

Segue abaixo o meu código, se algum de vocês puder me ajudar ... Desde já agradecido ...

 

set rs2 = CreateObject("ADODB.Recordset") 
sqltxt2 = "Select * from KBioDados where IdPonto='"&Session("nmaquina")&"'"
rs2.open sqltxt2, conn,3,3

total = rs2.RecordCount()

if total > 0 then 

   dim scanner(total)
   dim data(total)

end if

Quando eu faço isto, ele me retorna o seguinte erro ...

 

Error Type:

Microsoft VBScript compilation (0x800A0402)

Expected integer constant

Já tentei também, converter o resultado do RecordCount para inteiro, utilizando a seguinte função...

 

total = CInt(rs2.RecordCount())

Mais o problema é o mesmo ...

 

Tentei também como vocês falaram, utilizar o método GetRows(), mais não obtive sucesso ...

 

 

Obrigado pela atenção !

 

Abraços ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

escreve isso na tela (rs2.RecordCount) antes da linha do erro para vermos o valor que possui

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.