Analyse de l'utilisation des getrows et des getstrings des objets de jeu d'enregistrements dans asp. Les amis qui en ont besoin peuvent se référer à la méthode GetRows.
Copie plusieurs enregistrements d'un objet Recordset dans un tableau.
grammaire
Copiez le code comme suit :
array = recordset.GetRows (Lignes, Début, Champs)
valeur de retour
Renvoie un tableau à deux dimensions.
paramètre
Lignes Expression longue et facultative spécifiant le nombre d'enregistrements à récupérer. La valeur par défaut est adGetRowsRest (-1).
Start Facultatif, chaîne ou long, calcule le signet de l'enregistrement au début de l'opération GetRows. Les valeurs BookmarkEnum suivantes peuvent également être utilisées.
Description constante
AdBookmarkCurrent commence par l'enregistrement actuel.
AdBookmarkFirst commence par le premier enregistrement.
AdBookmarkLast démarre à partir du dernier enregistrement.
Fields est facultatif, de type variante, représentant un nom de champ unique, une position séquentielle, un tableau de noms de champs ou un numéro de position séquentielle. ADO renvoie uniquement les données de ces champs.
illustrer
Utilisez la méthode GetRows pour copier des enregistrements d'un Recordset dans un tableau à deux dimensions. Le premier indice identifie le champ et le second identifie le numéro d'enregistrement. La variable tableau s'ajustera automatiquement à la taille correcte lorsque la méthode GetRows renvoie des données.
Si vous ne spécifiez pas de valeur pour le paramètre Rows, la méthode GetRows récupérera automatiquement tous les enregistrements de l'objet Recordset. Si plus d'enregistrements sont demandés que disponibles, GetRows renvoie uniquement le nombre d'enregistrements disponibles.
Si l'objet Recordset prend en charge les signets, vous pouvez spécifier l'enregistrement à partir duquel la méthode GetRows commencera à récupérer les données en transmettant la valeur de la propriété Bookmark de l'enregistrement.
Pour limiter les champs renvoyés par l'appel GetRows, vous pouvez transmettre un seul nom/numéro de champ ou un tableau de noms/numéros de champ dans le paramètre Fields.
Après l'appel de GetRows, l'enregistrement non lu suivant devient l'enregistrement actuel ou, s'il n'y a plus d'enregistrements, la propriété EOF est définie sur True.
Méthode GetString
Lors de l'interrogation de la base de données pour afficher des tables, nous utilisons souvent la boucle Do While()...Loop ou For...Next pour afficher les tables, donc lorsque nous voulons interroger une grande quantité de données, cela sera inévitablement plus lent. Pour le moment, nous pouvons utiliser la méthode GetString() fournie par l'objet recordset (ADO doit être mis à niveau vers 2.0).
grammaire
Copiez le code comme suit :
Str=objRecordset.GetString(format,n,coldel,rowdel,nullexpr)
Description du paramètre :
objRecordset : l'objet recordset ouvert ;
format : facultatif, prend généralement la valeur par défaut (la valeur par défaut est 2)
n : Facultatif, le nombre d'enregistrements à afficher, la valeur par défaut est de tous afficher
coldel : facultatif, délimiteur de colonne
rowdel : facultatif, délimiteur de ligne
nullexpr : facultatif, ce paramètre permet de remplir les champs vides !
Avec la méthode GetString, nous ne pouvons utiliser qu'un seul Response.Write pour afficher toutes les sorties. C'est comme une boucle DO... LOOP qui peut déterminer si le Recordset est EOF.
En utilisant cette méthode, vous pouvez automatiquement sortir des chaînes dans une boucle, sans avoir à passer par des boucles while ou for tant que l'objet RS est créé et que les opérations correspondantes sont effectuées, qu'il renvoie un ou plusieurs enregistrements, ou même vide. records, getstring Travaillez comme d'habitude.
Pour générer un tableau HTML à partir des résultats d'un Recordset, il suffit de s'intéresser à 3 des 5 paramètres de GetString : coldel (le code HTML qui sépare les colonnes du recordset), rowdel (le code HTML qui sépare les lignes du Recordset). le jeu d'enregistrements) et nullexpr (code HTML qui doit être généré lorsque l'enregistrement actuel est vide).
Copiez le code comme suit :
<TABLE Bordure=1>
<TR><TD>
<% = Response.Write rs.GetString( , , </TD><TD>, </TD></TR><TR>, ) %>
</TABLE>
Le résultat HTML écrit ainsi est le suivant :
Copiez le code comme suit :
<TABLE Bordure=1>
<TR>
<TD>ligne1, valeur du champ1</TD>
<TD>ligne1, valeur champ2</TD>
</TR>
<TR>
<TD>ligne2, valeur du champ1</TD>
<TD>ligne2, valeur du champ2</TD>
</TR>
</TABLE>
Il y a un BUG ici, regardons générer le menu déroulant :
Copiez le code comme suit :
<%
Définir RS = conn.Execute (Sélectionnez la valeur, le texte FROM selectOptionsTable orDER BY theText)
optSuffix = </OPTION> & vbNewLine
valPrefix = <Valeur OPTION='
valSuffixe = '>
opts = RS.GetString( , , valSuffix, optSuffix & valPrefix, --error-- )
" La ligne suivante en est la clé !
opts = Gauche (opts, Len(opts)-Len(valPrefix) )
Réponse.Write <Select ...> & vbNewLine
Response.Write valPrefix & opts
Réponse.Écriture </Select>
%>
Si vous souhaitez créer une table correcte et résoudre le bug, faites simplement ceci :
Copiez le code comme suit :
<%
Définir RS = conn.Execute (Sélectionner * FROM table)
tdSuffix = </TD> & vbNouvelleLigne & <TD>
trPréfixe = <TR> & vbNewLine & <TD>
trSuffix = </TD> & vbNewLine & </TR> & vbNewLine & <TR> & vbNewLine
opts = RS.GetString( , , tdSuffix, trSuffix & trPrefix, --error-- )
" La ligne suivante en est la clé !
opts = Gauche (opts, Len(opts)-Len(trPrefix) )
Response.Write <TABLE Border=1 CellPadding=5> & vbNewLine
Response.Write trPrefix & opts
Réponse.Write </TABLE> & vbNewLine
%>
Introduisons une approche complètement différente :
Copiez le code comme suit :
<%
SQL = Sélectionnez '<OPTION Value=''',value,'''>',text,'</OPTION>' FROM table orDER BY text
Définir RS = conn.Execute (SQL)
Response.Write <Select> & vbNewLine & RS.GetString(,,,vbNewLine) & </Select>
%>
L'avez-vous déjà utilisé ? . .
Avez-vous vu ça ? Les résultats peuvent être renvoyés directement à partir de la requête.
En allant plus loin, vous pouvez faire ceci :
Copiez le code comme suit :
<%
SQL = Sélectionnez '<OPTION Value=''' & valeur & '''>' & texte & '</OPTION>' FROM table orDER BY text
Définir RS = conn.Execute (SQL)
Response.Write <Select> & vbNewLine & RS.GetString(,,,vbNewLine) & </Select>
%>
Voici un exemple complet :
Sortie du script :
711855 mercredi 23 23/03/2005 01:33:37
711856 mercredi 23 23/03/2005 01:23:00
711857 mercredi 23 23/03/2005 01:26:34
711858 mercredi 23 23/03/2005 01:33:53
711859 mercredi 23 23/03/2005 01:30:36
Le code ASP complet est le suivant :
Copiez le code comme suit :
<%
' Constantes sélectionnées dans adovbs.inc :
Const adClipString = 2
' Déclarer nos variables... toujours une bonne pratique !
Dim cnnGetString 'Connexion ADO
Dim rstGetString 'jeu d'enregistrements ADO
Dim strDBPath ' Chemin d'accès à notre fichier Access DB (*.mdb)
Dim strDBData ' Chaîne dans laquelle nous déversons toutes les données
Dim strDBDataTable ' Chaîne dans laquelle nous déposons toutes les données
" Seulement cette fois, nous construisons une table
' MapPath au chemin physique de notre fichier mdb.
strDBPath = Serveur.MapPath(db_scratch.mdb)
'Créer une connexion à l'aide d'OLE DB
Définir cnnGetString = Server.CreateObject (ADODB.Connection)
' Cette ligne concerne l'exemple de base de données Access :
'cnnGetString.Open Provider=Microsoft.Jet.OLEDB.4.0;Data Source= & strDBPath & ;
' Nous utilisons actuellement SQL Server, nous utilisons donc cette ligne à la place.
' Commentez cette ligne et décommentez celle d'Access ci-dessus pour
'jouez avec le script sur votre propre serveur.
cnnGetString.Open Provider=SQLOLEDB;Source de données=10.2.1.214 _
& Catalogue initial=échantillons;ID utilisateur=échantillons;Mot de passe=mot de passe _;
& Délai d'expiration de connexion=15;Bibliothèque réseau=dbmssocn;
' Exécuter une requête simple à l'aide de l'objet de connexion.
' Stockez le jeu d'enregistrements résultant dans notre variable.
Définir rstGetString = cnnGetString.Execute (Sélectionner * FROM scratch)
" Maintenant, c'est là que ça devient intéressant... Normalement, nous ferions
' une sorte de boucle jusqu'à ce que nous tombions sur le dernier disque de
' dans le jeu d'enregistrements. Cette fois, nous allons récupérer toutes les données.
' d'un seul coup et jetez-le dans une chaîne pour que nous puissions
' déconnectez-vous de la base de données le plus rapidement possible.
strDBData = rstGetString.GetString()
' Comme je fais ça deux fois à titre d'illustration... je repositionne
' au début du RS avant le deuxième appel.
rstGetString.MoveFirst
' Cette fois, je demande tout à nouveau au format tableau HTML :
strDBDataTable = rstGetString.GetString(adClipString, -1, _
&</td><td>, </td></tr> & vbCrLf & <tr><td>, )
' En raison de mon désir insatiable de HTML soigné, j'ai en fait
' tronque ensuite la chaîne. Vous voyez, GetString n'a que.
'un paramètre pour ce qui se passe entre les lignes et non un paramètre séparé
' un pour quoi placer après la dernière ligne à cause du.
" la façon dont les tableaux HTML sont construits, cela nous laisse un supplément
' <tr><td> après le dernier enregistrement, GetString place le.
' délimiteur entier à la fin puisqu'il n'y a rien
' autre chose à placer là et dans de nombreuses situations, cela fonctionne très bien.
" Avec HTML, c'est tout simplement un peu bizarre.
' fermez la ligne et continuez, mais je n'ai pas pu me résoudre à'
laissez la ligne supplémentaire... d'autant plus qu'elle aurait un
' nombre de cellules différent de celui de toutes les autres.
' Que puis-je dire... ces choses ont tendance à me déranger ;)
strDBDataTable = Gauche(strDBDataTable, Len(strDBDataTable) - Len(<tr><td>))
' Quelques notes sur .GetString :
' La méthode prend en fait jusqu'à 5 arguments facultatifs :
' 1. StringFormat - Le format dans lequel renvoyer le
' Le texte du jeu d'enregistrements adClipString est le seul.
'valeur valide.
' 2. NumRows - Le nombre de lignes à renvoyer.
' à -1 indiquant toutes les lignes.
' 3. ColumnDelimiter - Le texte à placer entre les colonnes.
'Par défaut, un caractère de tabulation
' 4. RowDelimiter - Le texte à placer entre les lignes
'Par défaut, un retour chariot
' 5. NullExpr - Expression à utiliser si une valeur NULL est
' renvoyé par défaut à une chaîne vide.
' Fermez notre jeu d'enregistrements et notre connexion et supprimez les objets.
' Remarquez que je suis capable de faire cela avant même de nous inquiéter
' affichant l'une des données !
rstGetString.Close
Définir rstGetString = Rien
cnnGetString.Fermer
Définir cnnGetString = Rien
' Afficher le tableau des données, je n'ai vraiment pas besoin de le faire.
' tout formatage puisque l'appel GetString a fait presque tout
' pour nous en termes de construction du texte du tableau.
Response.Write <table border=1> & vbCrLf
Réponse.Write <tr><td>
Réponse.Write strDBDataTable
Réponse.Write </table> & vbCrLf
' Pour info : voici le format de sortie que vous obtenez si vous pouvez GetString
' sans aucun paramètre :
Response.Write vbCrLf & <p>Voici la version non formatée :</p> & vbCrLf
Réponse.Write <pre> & vbCrLf
Response.Write strDBDataResponse.Write </pre> & vbCrLf
« C'est tout, les amis !
%>