La fonction LIMIT ou TOP

Le
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 !!!
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Thierry (ze Titi)
Le #6335821
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
Thierry (ze Titi)
Le #6335801
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
Rv
Le #6335771
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" 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 !!!





Thierry (ze Titi)
Le #6335761
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

Thierry (ze Titi)
Le #6335721
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
Gilbert
Le #6335691
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" 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 !!!





Publicité
Poster une réponse
Anonyme