Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

La fonction LIMIT ou TOP

6 réponses
Avatar
Franky01
J'ai cru comprendre la semaine derniere que la fonction LIMIT n'existait pas
dans ACCESS.

En fait la semaine derniere je voulais récolter les 10000 premieres
occurences de ma base, j'ai donc fait :

SELECT TOP 1000 *
FROM matable

Maintenant je voudrais récolter la deuxième tranche de 10000, c'est à dire
de la 10001ème occurence à la 20000 ème occurence.

Quel requete effectué ?

Et puis si jamais il existe une requete qui coupe une table en tranche de
10000, elle sera la bienvenue aussi :)

Merci !!!

6 réponses

Avatar
Thierry (ze Titi)
Hello Franky !

Pour les 10000 suivants:

SELECT TOP 10000 *
FROM matable
WHERE matable.Identifiant NOT IN(SELECT Identifiant FROM requête10000Précédents)

J'ai écrit une petite fonction qui créé des requêtes coupant une table par tranches mais j'ai un doute quant à son fonctionnement, à tester donc... Note aussi que plus tu vas avancer dans les tranches, plus les requêtes seront longues à exécuter... C'est pour ça que j'émets des doutes... Mais je n'ai aucun doute quant au fait que 3Stone va passer derrière pour proposer un truc génial...

Function creerTranches(laTable As String, nomClePrimaire As String, tranche As Long)
Dim i As Integer, strReqPrec As String
i = 0
CurrentDb.CreateQueryDef "Extract0", "SELECT TOP " & tranche & " * FROM [" & latable & "]"
strReqPrec = nomClePrimaire & " NOT IN(SELECT " & nomClePrimaire & " FROM Extract0)"
While DCount("*", laTable, nomClePrimaire & " NOT IN(SELECT " & nomClePrimaire & " FROM Extract" & i & ")") > 10
CurrentDb.CreateQueryDef "Extract" & i + 1, _
"SELECT TOP 10 * FROM " & laTable & " WHERE " & strReqPrec
i = i + 1
strReqPrec = strReqPrec & " AND " & nomClePrimaire & " NOT IN(SELECT " & nomClePrimaire & " FROM Extract" & i & ")"
Wend
End Function

Utilisation:

creerTranches nomTable, nomClePrimaire, tranche

--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info
Avatar
Thierry (ze Titi)
Correction:

Function creerTranches(laTable As String, nomClePrimaire As String, tranche As Long)
Dim i As Integer, strReqPrec As String
i = 0
CurrentDb.CreateQueryDef "Extract0", "SELECT TOP " & tranche & " * FROM [" & laTable & "]"
strReqPrec = nomClePrimaire & " NOT IN(SELECT " & nomClePrimaire & " FROM Extract0)"
While DCount("*", laTable, nomClePrimaire & " NOT IN(SELECT " & nomClePrimaire & " FROM Extract" & i & ")") > 10
CurrentDb.CreateQueryDef "Extract" & i + 1, _
"SELECT TOP " & tranche & " * FROM " & laTable & " WHERE " & strReqPrec
i = i + 1
strReqPrec = strReqPrec & " AND " & nomClePrimaire & " NOT IN(SELECT " & nomClePrimaire & " FROM Extract" & i & ")"
Wend
End Function

--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info
Avatar
Rv
Salut,

J'ai aussi proposé une solution dans le fil "Tronçonner les données
d'une table par paquets de 500" proposé par Phil le 01/11/07.

A+

Rv

"Franky01" a écrit dans le message de
news:
J'ai cru comprendre la semaine derniere que la fonction LIMIT n'existait
pas
dans ACCESS.

En fait la semaine derniere je voulais récolter les 10000 premieres
occurences de ma base, j'ai donc fait :

SELECT TOP 1000 *
FROM matable

Maintenant je voudrais récolter la deuxième tranche de 10000, c'est à dire
de la 10001ème occurence à la 20000 ème occurence.

Quel requete effectué ?

Et puis si jamais il existe une requete qui coupe une table en tranche de
10000, elle sera la bienvenue aussi :)

Merci !!!





Avatar
Thierry (ze Titi)
Correction:

Function creerTranches(laTable As String, nomClePrimaire As String, tranche
As Long) Dim i As Integer, strReqPrec As String
i = 0
CurrentDb.CreateQueryDef "Extract0", "SELECT TOP " & tranche & " * FROM
[" & laTable & "]" strReqPrec = nomClePrimaire & " NOT IN(SELECT " &
nomClePrimaire & " FROM Extract0)" While DCount("*", laTable,
nomClePrimaire & " NOT IN(SELECT " & nomClePrimaire & " FROM Extract" & i &
")") > 10 CurrentDb.CreateQueryDef "Extract" & i + 1, _
"SELECT TOP " & tranche & " * FROM " & laTable & " WHERE " & strReqPrec
i = i + 1 strReqPrec = strReqPrec & " AND " & nomClePrimaire & "
NOT IN(SELECT " & nomClePrimaire & " FROM Extract" & i & ")" Wend
End Function


Après quelques tests, il s'avère que ça pose problème... Je pense que
cela vient de la construction du critère lorsque la chaîne atteint ou
dépasse 255 caractères.
J'y travaille....

--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info

Avatar
Thierry (ze Titi)
Hello Franky !

Deuxième essai:

Function creerTranchesV2(laTable As String, nomClePrimaire As String, tranche As Long)
Dim i As Integer, strReqPrec As String
i = 0
CurrentDb.CreateQueryDef "Extract0", "SELECT TOP " & tranche & " * FROM [" & laTable & "]"
strReqPrec = nomClePrimaire & ">" & DMax(nomClePrimaire, "Extract0")
While DCount("*", laTable, nomClePrimaire & ">" & DMax(nomClePrimaire, "Extract" & i)) > 0
CurrentDb.CreateQueryDef "Extract" & i + 1, _
"SELECT TOP " & tranche & " * FROM " & laTable & " WHERE " & strReqPrec
i = i + 1
strReqPrec = nomClePrimaire & ">" & DMax(nomClePrimaire, "Extract" & i)
Wend
End Function

--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info
Avatar
Gilbert
Bonjour,

En m'inspirant de l'idée de Thierry

Pour sélectionner les enregistrements 100 à 200 (mais triés à l'envers)
SELECT top 100 *
FROM (SELECT top 200 *
FROM matable ORDER BY matable.Identifiant ORDER BY matable.Identifiant )
ORDER BY matable.Identifiant DESC


Pour les avoir dans l'ordre
SELECT * FROM (SELECT top 100 *
FROM (SELECT top 200 *
FROM matable ORDER BY matable.Identifiant ORDER BY matable.Identifiant )
ORDER BY matable.Identifiant DESC) ORDER BY matable.Identifiant

Ensuite pour avoir les enregistrements 200 à 300
SELECT top 200 * FROM (SELECT top 300 *...


--
Cordialement,

Gilbert


"Franky01" a écrit dans le message de
news:
J'ai cru comprendre la semaine derniere que la fonction LIMIT n'existait
pas
dans ACCESS.

En fait la semaine derniere je voulais récolter les 10000 premieres
occurences de ma base, j'ai donc fait :

SELECT TOP 1000 *
FROM matable

Maintenant je voudrais récolter la deuxième tranche de 10000, c'est à dire
de la 10001ème occurence à la 20000 ème occurence.

Quel requete effectué ?

Et puis si jamais il existe une requete qui coupe une table en tranche de
10000, elle sera la bienvenue aussi :)

Merci !!!