11
votes

Comment implémenter la pagination dans SQL pour l'accès MS?

J'accède à une base de données Microsoft Access 2002 (MDB) à l'aide de ASP.NET via la classe ODBCConnection , ce qui fonctionne très bien, bien que très lentement.

Ma question est de savoir comment mettre en œuvre la pagination dans SQL pour les requêtes de cette base de données, comme je sais que je peux implémenter la clause comme: xxx

mais je suis incapable de trouver un moyen de trouver un moyen de trouver Limitez ceci à un décalage comme cela peut être effectué avec SQL Server à l'aide de rive-numérique. Ma meilleure tentative était la suivante: xxx

qui échoue avec:

Erreur Source: Moteur de base de données Microsoft Jet

Message d'erreur: Aucune valeur donnée pour un ou plusieurs paramètres requis.

Je ne peux pas résoudre cette erreur, mais je suppose que cela a quelque chose à voir avec la sous-requête qui détermine un rive-numérique ?

Toute aide serait appréciée avec cela; Mes recherches sur Google ont donné des résultats inutiles: (


1 commentaires

Ce q a 59 vues (à l'époque) et je ne vois pas une seule uppote. Est-ce juste une chose de dba?


6 Réponses :


11
votes

Si vous souhaitez appliquer une pagination dans MS Accès, utilisez ce xxx pré>

où 15 est le startpos + pagesize em> et 5 est le pagesize em>. p>

Modifier pour commenter: strong> p>

L'erreur que vous recevez est parce que vous essayez de faire référence à un nom de colonne d'attribution au même niveau de la requête, à savoir rownumber em>. Si vous deviez modifier votre requête en: P>

SELECT *
FROM (
    SELECT ClientCode,
           (SELECT COUNT(c2.ClientCode)
            FROM tblClient AS c2
            WHERE c2.ClientCode <= c1.ClientCode) AS rownumber                
    FROM tblClient AS c1
)
WHERE rownumber BETWEEN 0 AND 15


8 commentaires

Merci! Bien que je reçoive des problèmes toujours en raison de l'analyseur ODBC SQL (voir ma réponse).


Bien sûr, oui Head Head aurait pu utiliser une clause que je pense, mais je ne suis pas sûr de Jet - c'est comme essayer de travailler avec SQL enrobé de verre brisé.


@CodesLeuth: Chaque moteur de DB a son propre dialecte de SQL. Si vous souhaitez utiliser JET / ACE en tant que back-end, vous devez apprendre son dialecte SQL, plutôt que de l'attendre de manière déraisonnable qu'elle soit exactement comme quel que soit le (s) dialecte SQL que vous connaissez déjà. Je questionne la sagesse de la configuration de base, c'est-à-dire à l'aide d'un magasin de données Jet / ACE derrière une application Web. Cela peut bien fonctionner pour les petites utilisateurs pour des opérations surtout en lecture seule, mais ne sera pas à l'échelle.


Bien évidemment, la raison pour laquelle j'utilise une base de données d'accès est que le choix du moteur de base de données est hors de mon contrôle. Je suis un programmeur SQL Server quotidiennement, c'est pourquoi les différences me rendent fou. Par exemple, la chaînage des affirmations de jointure intérieure semble nécessiter des parenthèses autour de chaque ensemble de jointures; Je ne vois pas pourquoi cela est nécessaire, mais j'ai appris cela maintenant et je peux l'utiliser à partir de maintenant. Si j'avais mon chemin, cela serait entièrement dans SQL Server. La base de données a déjà du mal à faire face à nos 15 utilisateurs, alors peut-être que je vais commencer à le changer bientôt.


@David W. Fenton: Vous décrivez un problème qui a été résolu il y a des années par ISO / ANSI Standard SQL. Si le moteur de base de données d'accès ne prend pas en charge les normes, les compétences ne sont pas transférées afin que le code soit porté à la première occasion. J'imagine que ces applications qui restent peu particulières représentent une bonne entreprise pour un spécialiste de l'accès tel que vous-même, ce qui est probablement pourquoi vous n'écrivez pas à un code portable;)


L'affirmation implicite (à peine) que j'écris délibérément du code pour restreindre mes clients à l'accès, c'est offensant pour moi, mais pas inattendu de quelqu'un avec votre histoire.


@CODESLEUTH: Si vous utilisez un moteur DB particulier et que vous êtes frustré par les différences dans la dialecte SQL, c'est votre inconnue qui est le problème, pas le dialecte.


@David W. Fenton: "Recherchez des smileys, des sources et d'autres" émoticônes ". Quand on en voit un, la déclaration précédente n'était pas censée être vraiment sérieuse, ne le prenez pas comme telle."





0
votes

Un moyen facile d'utiliser la limite ou obtenir une pagination Travailler dans l'accès consiste à utiliser une bibliothèque AdDodb qui prennent en charge la pagination pour de nombreux DBS avec la même syntaxe. http://phplens.com/lens/adodb/docs-adodb.htm#ex8 Son facile à modifier / remplacer la classe de pager pour récupérer le nombre requis de lignes de format réseau.


0 commentaires

2
votes

Il s'agit de la méthode simple de pagination à l'aide d'OLEDBDataAnPortter et de classes de données. J'utilise une commande SQL différente pour la simplicité. xxx

voici la fonction getdata. xxx

Les codes ci-dessus rendront 10 lignes du client de la table chaque fois que la boucle fonctionne la boucle fin du fichier.


1 commentaires

C'est la solution que je cherchais -> Utilisez les paramètres de remplissage sur DA pour ne chercher que ce dont j'avais besoin



0
votes
SELECT  *
FROM BS_FOTOS AS TBL1
WHERE ((((select COUNT(ID) AS DD FROM BS_FOTOS AS TBL2 WHERE TBL2.ID<=TBL1.ID)) BETWEEN  10 AND 15 ));
Its result 10 to 15 records only.

0 commentaires