Análise do uso de getrows e getstring de objetos de conjunto de registros em asp. Amigos que precisam podem consultar o método GetRows.
Copia vários registros de um objeto Recordset em uma matriz.
gramática
Copie o código do código da seguinte forma:
array = recordset.GetRows(Linhas, Início, Campos)
valor de retorno
Retorna uma matriz bidimensional.
parâmetro
Linhas Opcional, expressão longa especificando o número de registros a serem recuperados. O valor padrão é adGetRowsRest (-1).
Start Opcional, string ou longo, calcula o indicador do registro no início da operação GetRows. Os seguintes valores BookmarkEnum também podem ser usados.
Descrição constante
AdBookmarkCurrent começa com o registro atual.
AdBookmarkFirst começa com o primeiro registro.
AdBookmarkLast começa no último registro.
Campos é opcional, tipo variante, representando um único nome de campo, posição sequencial, matriz de nomes de campo ou número de posição sequencial. O ADO retorna apenas dados desses campos.
ilustrar
Use o método GetRows para copiar registros de um Recordset em uma matriz bidimensional. O primeiro subscrito identifica o campo e o segundo identifica o número do registro. A variável array se ajustará automaticamente ao tamanho correto quando o método GetRows retornar dados.
Se você não especificar um valor para o parâmetro Rows, o método GetRows recuperará automaticamente todos os registros no objeto Recordset. Se forem solicitados mais registros do que os disponíveis, GetRows retornará apenas o número de registros disponíveis.
Se o objeto Recordset suportar marcadores, você poderá especificar o registro no qual o método GetRows começará a recuperar dados, passando o valor da propriedade Bookmark do registro.
Para limitar os campos retornados pela chamada GetRows, você pode passar um único nome/número de campo ou um array de nomes/números de campos no parâmetro Campos.
Depois que GetRows for chamado, o próximo registro não lido se tornará o registro atual ou, se não houver mais registros, a propriedade EOF será definida como True.
Método GetString
Ao consultar o banco de dados para exibir tabelas, geralmente usamos Do While()...Loop ou For...Next loop para exibir tabelas, portanto, quando quisermos consultar uma grande quantidade de dados, será inevitavelmente mais lento. Neste momento, podemos usar o método GetString() fornecido pelo objeto recordset (o ADO deve ser atualizado para 2.0).
gramática
Copie o código do código da seguinte forma:
Str=objRecordset.GetString(formato,n,coldel,rowdel,nullexpr)
Descrição do parâmetro:
objRecordset: o objeto do conjunto de registros aberto;
formato: opcional, geralmente assume o valor padrão (o valor padrão é 2)
n: Opcional, o número de registros a serem exibidos, o valor padrão é exibir todos
coldel: opcional, delimitador de coluna
rowdel: opcional, delimitador de linha
nullexpr: opcional, este parâmetro é usado para preencher campos vazios!
Com o método GetString, podemos usar apenas um Response.Write para exibir toda a saída. É como um loop DO... LOOP que pode determinar se o Recordset é EOF.
Usando este método, você pode gerar strings automaticamente em um loop, sem ter que passar por loops while ou for, desde que o objeto RS seja criado e as operações correspondentes sejam executadas, seja retornando um ou mais registros, ou mesmo vazio. registros, getstring Funciona normalmente.
Para gerar uma tabela HTML a partir dos resultados de um Recordset, precisamos nos preocupar apenas com 3 dos 5 parâmetros do GetString: coldel (o código HTML que separa as colunas do recordset), rowdel (o código HTML que separa as linhas de o conjunto de registros) e nullexpr (código HTML que deve ser gerado quando o registro atual estiver vazio).
Copie o código do código da seguinte forma:
<Borda da TABELA=1>
<TR><TD>
<% = Response.Write rs.GetString( , , </TD><TD>, </TD></TR><TR>, ) %>
</TABELA>
O resultado HTML escrito assim é o seguinte:
Copie o código do código da seguinte forma:
<Borda da TABELA=1>
<TR>
<TD>linha1, valor do campo1</TD>
<TD>linha1, valor do campo2</TD>
</TR>
<TR>
<TD>linha2, valor do campo1</TD>
<TD>linha2, valor do campo2</TD>
</TR>
</TABELA>
Há um BUG aqui, vamos ver como gerar o menu suspenso:
Copie o código do código da seguinte forma:
<%
Definir RS = conn.Execute (Selecione o Valor, o Texto FROM selectOptionsTable ou DER BY o Texto)
optSuffix = </OPTION> & vbNewLine
valPrefix = <OPÇÃO Valor='
valSuffix = '>
opts = RS.GetString( , , valSuffix, optSuffix & valPrefix, --error-- )
' A próxima linha é a chave para isso!
opts = Esquerda( opts, Len(opts)-Len(valPrefix) )
Response.Write <Selecionar ...> & vbNewLine
Response.Write valPrefix e opções
Resposta.Escrever </Select>
%>
Se você quiser criar uma tabela correta e resolver o bug, basta fazer o seguinte:
Copie o código do código da seguinte forma:
<%
Definir RS = conn.Execute (Selecione * FROM tabela)
tdSuffix = </TD> & vbNewLine & <TD>
trPrefix = <TR> & vbNewLine & <TD>
trSuffix = </TD> & vbNewLine & </TR> & vbNewLine & <TR> & vbNewLine
opts = RS.GetString( , , tdSuffix, trSuffix & trPrefix, --error-- )
' A próxima linha é a chave para isso!
opts = Esquerda( opts, Len(opts)-Len(trPrefix) )
Response.Write <TABLE Border=1 CellPadding=5> & vbNewLine
Response.Write trPrefix e opções
Response.Write </TABLE> & vbNewLine
%>
Vamos apresentar uma abordagem completamente diferente:
Copie o código do código da seguinte forma:
<%
SQL = Selecione '<OPTION Value=''',value,'''>',text,'</OPTION>' FROM tabela orDER BY texto
Definir RS = conn.Execute(SQL)
Response.Write <Select> & vbNewLine & RS.GetString(,,,vbNewLine) & </Select>
%>
Você já usou? . .
Você viu isso? Os resultados podem ser retornados diretamente da consulta.
Indo um passo adiante, você pode fazer isso:
Copie o código do código da seguinte forma:
<%
SQL = Selecione '<OPTION Value=''' & value & '''>' & text & '</OPTION>' FROM table orDER BY text
Definir RS = conn.Execute(SQL)
Response.Write <Select> & vbNewLine & RS.GetString(,,,vbNewLine) & </Select>
%>
Aqui está um exemplo completo:
Saída do script:
711855 Quarta-feira, 23 23/03/2005 1:33:37
711856 Quarta-feira, 23 23/03/2005 1:23:00
711857 Quarta-feira, 23 23/03/2005 1:26:34
711858 Quarta-feira, 23 23/03/2005 1:33:53
711859 Quarta-feira, 23 23/03/2005 1:30:36
O código ASP completo é o seguinte:
Copie o código do código da seguinte forma:
<%
'Constantes selecionadas em adovbs.inc:
Const adClipString = 2
' Declare nossas variáveis... sempre uma boa prática!
Dim cnnGetString ' conexão ADO
Dim rstGetString ' conjunto de registros ADO
Dim strDBPath ' Caminho para nosso arquivo Access DB (*.mdb)
Dim strDBData 'String onde despejamos todos os dados
Dim strDBDataTable 'String onde despejamos todos os dados
'só que desta vez construímos uma mesa
' MapPath para o caminho físico do nosso arquivo mdb.
strDBPath = Servidor.MapPath(db_scratch.mdb)
'Cria uma conexão usando OLE DB
Definir cnnGetString = Server.CreateObject(ADODB.Connection)
'Esta linha é para o banco de dados de amostra do Access:
'cnnGetString.Open Provider=Microsoft.Jet.OLEDB.4.0;Fonte de dados= & strDBPath & ;
' Na verdade, estamos usando o SQL Server, então usamos esta linha.
' Comente esta linha e descomente o Access acima para
' brinque com o script em seu próprio servidor.
cnnGetString.Open Provider=SQLOLEDB;Fonte de dados=10.2.1.214 _;
& Catálogo inicial=amostras;ID do usuário=amostras;Senha=senha _;
& Connect Timeout=15;Biblioteca de Rede=dbmssocn;
' Executa uma consulta simples usando o objeto de conexão.
' Armazene o conjunto de registros resultante em nossa variável.
Definir rstGetString = cnnGetString.Execute (Selecione * DO zero)
'Agora é aqui que fica interessante... Normalmente faríamos
' algum tipo de loop até encontrarmos o último registro em
' no conjunto de registros. Desta vez, obteremos todos os dados.
' de uma só vez e jogue-o em uma corda para que possamos
'desconecte do banco de dados o mais rápido possível.
strDBData = rstGetString.GetString()
' Já que estou fazendo isso duas vezes para ilustração... eu reposiciono
' no início do RS antes da segunda chamada.
rstGetString.MoveFirst
' Desta vez peço tudo de volta em formato de tabela HTML:
strDBDataTable = rstGetString.GetString(adClipString, -1, _
&</td><td>, </td></tr> & vbCrLf & <tr><td>, )
'Por causa do meu desejo insaciável por HTML puro, eu na verdade
'trunca a string a seguir. Veja, GetString só tem.
'um parâmetro para o que acontece entre linhas e não um parâmetro separado
'um para o que colocar após a última linha por causa do.
'forma como as tabelas HTML são construídas, isso nos deixa com uma vantagem extra
' <tr><td> após o último registro GetString coloca o.
' todo o delimitador no final já que não tem nada
' else para colocar lá e em muitas situações isso funciona bem.
'Com HTML é um pouco estranho para a maioria dos desenvolvedores.
'feche a fila e siga em frente, mas não consegui'
deixe a linha extra... especialmente porque teria um
'número de células diferente de todas as outras.
'O que posso dizer... essas coisas tendem a me incomodar;)
strDBDataTable = Esquerda(strDBDataTable, Len(strDBDataTable) - Len(<tr><td>))
'Algumas notas sobre .GetString:
'O método na verdade leva até 5 argumentos opcionais:
' 1. StringFormat - O formato no qual retornar o
' texto do conjunto de registros. adClipString é o único.
'valor válido.
' 2. NumRows - O número de linhas a serem retornadas.
' para -1 indicando todas as linhas.
' 3. ColumnDelimiter - O texto a ser colocado entre as colunas.
'O padrão é um caractere de tabulação
' 4. RowDelimiter - O texto a ser colocado entre as linhas
'O padrão é um retorno de carro
' 5. NullExpr - Expressão a ser usada se um valor NULL for
' retornado. O padrão é uma string vazia.
' Fecha nosso conjunto de registros e conexão e descarta os objetos.
' Observe que sou capaz de fazer isso antes mesmo de nos preocuparmos
' exibindo qualquer um dos dados!
primeiroGetString.Close
Definir rstGetString = Nada
cnnGetString.Close
Definir cnnGetString = Nada
'Mostra a tabela dos dados que realmente não preciso fazer.
'qualquer formatação desde a chamada GetString fez quase tudo
' para nós em termos de construção do texto da tabela.
Response.Write <table border=1> & vbCrLf
Resposta.Write <tr><td>
Response.Write strDBDataTable
Response.Write </table> & vbCrLf
'Para sua informação: aqui está o formato de saída que você obterá se não puder GetString
' sem nenhum parâmetro:
Response.Write vbCrLf & <p>Aqui está a versão não formatada:</p> & vbCrLf
Response.Write <pre> & vbCrLf
Response.Write strDBDataResponse.Write </pre> & vbCrLf
'Isso é tudo pessoal!
%>