Análisis del uso de getrows y getstring de objetos de conjunto de registros en asp. Los amigos que lo necesiten pueden consultar el método GetRows.
Copia varios registros de un objeto Recordset en una matriz.
gramática
Copie el código de código de la siguiente manera:
matriz = conjunto de registros.GetRows (Filas, Inicio, Campos)
valor de retorno
Devuelve una matriz bidimensional.
parámetro
Filas Opcional, expresión larga que especifica el número de registros que se recuperarán. El valor predeterminado es adGetRowsRest (-1).
Inicio Opcional, cadena o largo, calcula el marcador del registro al inicio de la operación GetRows. También se pueden utilizar los siguientes valores de BookmarkEnum.
Descripción constante
AdBookmarkCurrent comienza con el registro actual.
AdBookmarkFirst comienza con el primer registro.
AdBookmarkLast comienza desde el último registro.
Los campos son opcionales, de tipo variante y representan un único nombre de campo, una posición secuencial, una matriz de nombres de campo o un número de posición secuencial. ADO sólo devuelve datos de estos campos.
ilustrar
Utilice el método GetRows para copiar registros de un Recordset en una matriz bidimensional. El primer subíndice identifica el campo y el segundo identifica el número de registro. La variable de matriz se ajustará automáticamente al tamaño correcto cuando el método GetRows devuelva datos.
Si no especifica un valor para el parámetro Filas, el método GetRows recuperará automáticamente todos los registros en el objeto Recordset. Si se solicitan más registros de los disponibles, GetRows devuelve solo el número de registros disponibles.
Si el objeto Recordset admite marcadores, puede especificar el registro en el que el método GetRows comenzará a recuperar datos pasando el valor de la propiedad Bookmark del registro.
Para limitar los campos devueltos por la llamada GetRows, puede pasar un único nombre/número de campo o una matriz de nombres/números de campo en el parámetro Campos.
Después de llamar a GetRows, el siguiente registro no leído se convierte en el registro actual o, si no hay más registros, la propiedad EOF se establece en True.
Método GetString
Cuando consultamos la base de datos para mostrar tablas, a menudo usamos el bucle Do While()...Loop o For...Next para mostrar tablas, por lo que cuando queremos consultar una gran cantidad de datos, inevitablemente será más lento. En este momento, podemos utilizar el método GetString() proporcionado por el objeto del conjunto de registros (ADO debe actualizarse a 2.0).
gramática
Copie el código de código de la siguiente manera:
Str=objRecordset.GetString(formato,n,coldel,rowdel,nullexpr)
Descripción del parámetro:
objRecordset: el objeto del conjunto de registros abierto;
formato: opcional, generalmente toma el valor predeterminado (el valor predeterminado es 2)
n: Opcional, el número de registros a mostrar, el valor predeterminado es mostrar todos
coldel: opcional, delimitador de columna
rowdel: opcional, delimitador de fila
nullexpr: opcional, este parámetro se usa para llenar campos vacíos.
Con el método GetString, podemos usar solo un Response.Write para mostrar todos los resultados. Es como un bucle DO... LOOP que puede determinar si el Recordset es EOF.
Con este método, puede generar cadenas automáticamente en un bucle, sin tener que pasar por los bucles while o for, siempre que se cree el objeto RS y se realicen las operaciones correspondientes, ya sea que devuelva uno o más registros, o incluso que esté vacío. registros, getstring Trabaja como de costumbre.
Para generar una tabla HTML a partir de los resultados de un Recordset, sólo debemos preocuparnos de 3 de los 5 parámetros de GetString: coldel (el código HTML que separa las columnas del recordset), rowdel (el código HTML que separa las filas de el conjunto de registros) y nullexpr (código HTML que debe generarse cuando el registro actual está vacío).
Copie el código de código de la siguiente manera:
<Borde de la TABLA=1>
<TR><TD>
<% = Respuesta.Write rs.GetString( , , </TD><TD>, </TD></TR><TR>, ) %>
</TABLA>
El resultado HTML escrito así es el siguiente:
Copie el código de código de la siguiente manera:
<Borde de la TABLA=1>
<TR>
<TD>fila1, valor del campo1</TD>
<TD>fila1, valor campo2</TD>
</TR>
<TR>
<TD>fila2, valor del campo1</TD>
<TD>fila2, valor del campo2</TD>
</TR>
</TABLA>
Hay un ERROR aquí, veamos cómo generar el menú desplegable:
Copie el código de código de la siguiente manera:
<%
Establecer RS = conn.Ejecutar (Seleccione el Valor, el Texto DE la tabla de opciones seleccionadas o ORDENAR POR el Texto)
optSuffix = </OPTION> & vbNuevaLínea
valPrefix = <Valor de OPCIÓN='
valSuffix = '>
opts = RS.GetString( , , valSuffix, optSuffix y valPrefix, --error-- )
' ¡La siguiente línea es la clave!
opciones = Izquierda(opciones, Len(opts)-Len(valPrefix) )
Respuesta.Escribir <Seleccionar...> & vbNewLine
Respuesta.Escribir valPrefix y opciones
Respuesta.Escribir </Seleccionar>
%>
Si desea crear una tabla correcta y resolver el error, simplemente haga esto:
Copie el código de código de la siguiente manera:
<%
Establecer RS = conn.Ejecutar (Seleccionar * DE la tabla)
tdSuffix = </TD> & vbNuevaLínea & <TD>
trPrefijo = <TR> & vbNuevaLínea & <TD>
trSuffix = </TD> & vbNewLine & </TR> & vbNewLine & <TR> & vbNewLine
opts = RS.GetString( , , tdSuffix, trSuffix y trPrefix, --error-- )
' ¡La siguiente línea es la clave!
opciones = Izquierda(opciones, Len(opts)-Len(trPrefix) )
Response.Write <TABLE Border=1 CellPadding=5> & vbNewLine
Respuesta.Escribir trPrefix y opciones
Respuesta.Escribir </TABLE> & vbNewLine
%>
Introduzcamos un enfoque completamente diferente:
Copie el código de código de la siguiente manera:
<%
SQL = Seleccione '<OPTION Value=''',value,'''>',text,'</OPTION>' FROM tabla ORDENAR POR texto
Establecer RS = conexión. Ejecutar (SQL)
Respuesta.Escribir <Select> & vbNewLine & RS.GetString(,,,vbNewLine) & </Select>
%>
¿Lo has usado alguna vez? . .
¿Viste eso? Los resultados se pueden devolver directamente desde la consulta.
Yendo un paso más allá, puedes hacer esto:
Copie el código de código de la siguiente manera:
<%
SQL = Seleccione '<OPTION Value=''' & valor & '''>' & texto & '</OPTION>' DE la tabla ORDENAR POR texto
Establecer RS = conexión. Ejecutar (SQL)
Respuesta.Escribir <Select> & vbNewLine & RS.GetString(,,,vbNewLine) & </Select>
%>
Aquí tienes un ejemplo completo:
Salida del guión:
711855 miércoles 23 23/03/2005 1:33:37 a.m.
711856 miércoles 23 23/03/2005 1:23:00 a.m.
711857 miércoles 23 23/03/2005 01:26:34
711858 miércoles 23 23/03/2005 1:33:53 a.m.
711859 miércoles 23 23/03/2005 1:30:36 a.m.
El código ASP completo es el siguiente:
Copie el código de código de la siguiente manera:
<%
'Constantes seleccionadas de adovbs.inc:
Cadena de clip constante = 2
' Declarar nuestras variables... ¡siempre es una buena práctica!
Dim cnnGetString ' conexión ADO
Dim rstGetString 'conjunto de registros ADO
Dim strDBPath ' Ruta a nuestro archivo Access DB (*.mdb)
Dim strDBData ' Cadena en la que volcamos todos los datos
Dim strDBDataTable ' Cadena en la que volcamos todos los datos
'solo que esta vez construimos una mesa
' MapPath a la ruta física de nuestro archivo mdb.
strDBPath = Servidor.MapPath(db_scratch.mdb)
'Crear una conexión usando OLE DB
Establecer cnnGetString = Server.CreateObject(ADODB.Connection)
' Esta línea es para la base de datos de muestra de Access:
'cnnGetString.Open Provider=Microsoft.Jet.OLEDB.4.0;Fuente de datos= & strDBPath & ;
' En realidad estamos usando SQL Server, por lo que usamos esta línea en su lugar.
' Comenta esta línea y descomenta la de Acceso de arriba a
' juega con el script en tu propio servidor.
cnnGetString.Open Provider=SQLOLEDB;Fuente de datos=10.2.1.214 _
& Catálogo inicial=muestras;Id de usuario=muestras;Contraseña=contraseña;
& Tiempo de espera de conexión=15;Biblioteca de red=dbmssocn;
' Ejecuta una consulta simple usando el objeto de conexión.
' Almacena el conjunto de registros resultante en nuestra variable.
Establecer rstGetString = cnnGetString.Execute(Seleccionar * DESDE cero)
' Ahora aquí es donde se pone interesante... Normalmente haríamos
' un bucle de algún tipo hasta que nos topamos con el último registro en
' en el conjunto de registros. Esta vez obtendremos todos los datos.
' de un solo golpe y volcarlo en una cuerda para que podamos
' desconectarse de la base de datos lo más rápido posible.
strDBData = primerGetString.GetString()
' Como estoy haciendo esto dos veces a modo de ilustración... reposiciono
' al comienzo del RS antes de la segunda llamada.
primeroGetString.MoveFirst
' Esta vez pido que todo vuelva a estar en formato de tabla HTML:
strDBDataTable = rstGetString.GetString(adClipString, -1, _
&</td><td>, </td></tr> & vbCrLf & <tr><td>, )
' Debido a mi insaciable deseo de tener HTML limpio, en realidad
' trunca la cadena a continuación. Verás, GetString solo tiene.
'un parámetro para lo que va entre filas y no un parámetro separado
' uno para saber qué colocar después de la última fila.
' forma en que se construyen las tablas HTML, esto nos deja con un extra
' <tr><td> después del último registro. GetString coloca el
'delimitador completo al final ya que no tiene nada
' más para colocar allí y en muchas situaciones esto funciona bien.
' Con HTML es un poco extraño. La mayoría de los desarrolladores simplemente.
'cierro la fila y sigo adelante, pero no me atrevía a hacerlo'
deja la fila extra... especialmente porque tendría una
'Diferente número de células que todas las demás.
' Qué puedo decir... estas cosas me suelen molestar ;)
strDBDataTable = Izquierda(strDBDataTable, Len(strDBDataTable) - Len(<tr><td>))
' Algunas notas sobre .GetString:
' El método en realidad toma hasta 5 argumentos opcionales:
' 1. StringFormat: el formato en el que devolver el
' texto del conjunto de registros. adClipString es el único
'valor válido.
' 2. NumRows: el número de filas que se devolverán.
' a -1 indicando todas las filas.
' 3. ColumnDelimiter: el texto que se colocará entre las columnas.
'El valor predeterminado es un carácter de tabulación
' 4. RowDelimiter: el texto que se colocará entre las filas.
'El valor predeterminado es un retorno de carro
' 5. NullExpr - Expresión a utilizar si se obtiene un valor NULL
' devuelto. El valor predeterminado es una cadena vacía.
'Cierre nuestro conjunto de registros y conexión y deseche los objetos.
' Observe que puedo hacer esto incluso antes de que nos preocupemos
' mostrando cualquiera de los datos!
primerGetString.Cerrar
Establecer rstGetString = Nada
cnnGetString.Cerrar
Establecer cnnGetString = Nada
'Muestra la tabla de datos que realmente no necesito hacer.
'cualquier formato desde que la llamada GetString hizo casi todo
' para nosotros en términos de construir el texto de la tabla.
Respuesta.Escribir <borde de tabla=1> & vbCrLf
Respuesta.Escribir <tr><td>
Respuesta.Escribir strDBDataTable
Respuesta.Escribir </table> & vbCrLf
' Para su información: este es el formato de salida que obtiene si no puede GetString
'sin ningún parámetro:
Response.Write vbCrLf & <p>Aquí está la versión sin formato:</p> & vbCrLf
Respuesta.Escribir <pre> & vbCrLf
Respuesta.Escribir strDBDataResponse.Write </pre> & vbCrLf
' ¡Eso es todo amigos!
%>