Fonctions DLast et DFirst

Le
Léila
Bonjour.
J'ai une requête R1 avec un champ "NomEtPrenoms" rangé dans l'ordre
croissant. Curieusement, les fonctions DFirst et DLast portant sur ce champ
me renvoient des résultats selon l'ordre de saisie des noms et non selon
leur ordre d'affichage dans la requête R1. Par exemple, DFirst me renvoie
"Z" en lieu et place de "A", parce que "Z" a été le premier nom
saisi.
Est-ce normal?
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
C. ERNST
Le #20632491
Tout dépend de l'index de votre requête...
Triez la par le champ NomEtPrenoms et tout rentrera dans l'ordre

"Léila"
Bonjour.
J'ai une requête R1 avec un champ "NomEtPrenoms" rangé dans l'ordre
croissant. Curieusement, les fonctions DFirst et DLast portant sur ce
champ me renvoient des résultats selon l'ordre de saisie des noms et non
selon leur ordre d'affichage dans la requête R1. Par exemple, DFirst me
renvoie "Z..." en lieu et place de "A...", parce que "Z..." a été le
premier nom saisi.
Est-ce normal?



Sylvain Lafontaine
Le #20632231
See http://support.microsoft.com/kb/103403

--
Sylvain Lafontaine, ing.
MVP pour « Windows Live Platform »
Blogue/site web: http://paparazzi-codeur.sylvainlafontaine.com
Consultant indépendant et programmation à distance pour Access et
SQL-Server.


"Léila" news:
Bonjour.
J'ai une requête R1 avec un champ "NomEtPrenoms" rangé dans l'ordre
croissant. Curieusement, les fonctions DFirst et DLast portant sur ce
champ me renvoient des résultats selon l'ordre de saisie des noms et non
selon leur ordre d'affichage dans la requête R1. Par exemple, DFirst me
renvoie "Z..." en lieu et place de "A...", parce que "Z..." a été le
premier nom saisi.
Est-ce normal?



Léila
Le #20634091
Merci infiniment Sylvain.
Je vais voir ça de près.

Sylvain Lafontaine wrote:
See http://support.microsoft.com/kb/103403


"Léila" news:
Bonjour.
J'ai une requête R1 avec un champ "NomEtPrenoms" rangé dans l'ordre
croissant. Curieusement, les fonctions DFirst et DLast portant sur ce
champ me renvoient des résultats selon l'ordre de saisie des noms et
non selon leur ordre d'affichage dans la requête R1. Par exemple,
DFirst me renvoie "Z..." en lieu et place de "A...", parce que
"Z..." a été le premier nom saisi.
Est-ce normal?




Léila
Le #20640001
J'ai regardé mais le code ne fonctionne pas.
Pour la fonction DStart par exemple, voici le code:

Option Compare Database
Option Explicit

'--------------------------------------
' Use DStart()instead of DFirst() to return
' the first sorted record in a domain.
'--------------------------------------
Function DStart(FieldName As String, DomainName As String, Criteria As
String)
Dim MyDB As Database, Myset As Dynaset

' ERROR OUT IF THERE IS NO FIELDNAME SENT.
If Len(FieldName) = 0 Then
MsgBox "You Must Specify a Field name", , "DStart"
Exit Function
End If

' ERROR OUT IF THERE IS NO DOMAIN SENT.
If Len(DomainName) = 0 Then
MsgBox "You Must Specify a Domain name", , "DStart"
Exit Function
End If

Set MyDB = CurrentDb()
Set Myset = MyDB.CreateDynaset(DomainName)

If Len(Criteria) > 0 Then
Myset.Filter = Criteria
Set Myset = Myset.CreateDynaset()
End If

' IF THERE ARE NO RECORDS, RETURN THE NULL, ELSE RETURN THE VALUE
' OF THE FIRST RECORD.
If Myset.EOF Then
DStart = Null
Else
Myset.MoveFirst
DStart = Myset(FieldName)
End If

Myset.Close
MyDB.Close
End Function

Il y a le message d'erreur suivant:
Type défini par l'utilisateur non défini.
Dans la fenêtre de code, il est surligné en bleu l'expression "Myset As
Dynaset".


Léila wrote:
Merci infiniment Sylvain.
Je vais voir ça de près.

Sylvain Lafontaine wrote:
See http://support.microsoft.com/kb/103403


"Léila" news:
Bonjour.
J'ai une requête R1 avec un champ "NomEtPrenoms" rangé dans l'ordre
croissant. Curieusement, les fonctions DFirst et DLast portant sur
ce champ me renvoient des résultats selon l'ordre de saisie des
noms et non selon leur ordre d'affichage dans la requête R1. Par
exemple, DFirst me renvoie "Z..." en lieu et place de "A...", parce
que "Z..." a été le premier nom saisi.
Est-ce normal?






Sylvain Lafontaine
Le #20641271
Cette référence est seulement pour vous expliquer que contrairement à ce que
l'on pourrait penser de prime abord, les fonctions DFirst et DLast ne
renvoient aucunement un résultat selon l'ordre d'affichage d'une requête et
que le résultat que vous obtenez présentement - mais qui vous semble
curieux - est conforme à leur description.

Si vous voulez obtenir la tête de file ou la tête de queue de votre requête
selon la clause Order By, vous devez soit utiliser TOP 1, soit lire la
première ligne de résultat.

--
Sylvain Lafontaine, ing.
MVP pour « Windows Live Platform »
Blogue/site web: http://paparazzi-codeur.sylvainlafontaine.com
Consultant indépendant et programmation à distance pour Access et
SQL-Server.


"Léila" news:
J'ai regardé mais le code ne fonctionne pas.
Pour la fonction DStart par exemple, voici le code:

Option Compare Database
Option Explicit

'--------------------------------------
' Use DStart()instead of DFirst() to return
' the first sorted record in a domain.
'--------------------------------------
Function DStart(FieldName As String, DomainName As String, Criteria As
String)
Dim MyDB As Database, Myset As Dynaset

' ERROR OUT IF THERE IS NO FIELDNAME SENT.
If Len(FieldName) = 0 Then
MsgBox "You Must Specify a Field name", , "DStart"
Exit Function
End If

' ERROR OUT IF THERE IS NO DOMAIN SENT.
If Len(DomainName) = 0 Then
MsgBox "You Must Specify a Domain name", , "DStart"
Exit Function
End If

Set MyDB = CurrentDb()
Set Myset = MyDB.CreateDynaset(DomainName)

If Len(Criteria) > 0 Then
Myset.Filter = Criteria
Set Myset = Myset.CreateDynaset()
End If

' IF THERE ARE NO RECORDS, RETURN THE NULL, ELSE RETURN THE VALUE
' OF THE FIRST RECORD.
If Myset.EOF Then
DStart = Null
Else
Myset.MoveFirst
DStart = Myset(FieldName)
End If

Myset.Close
MyDB.Close
End Function

Il y a le message d'erreur suivant:
Type défini par l'utilisateur non défini.
Dans la fenêtre de code, il est surligné en bleu l'expression "Myset As
Dynaset".


Léila wrote:
Merci infiniment Sylvain.
Je vais voir ça de près.

Sylvain Lafontaine wrote:
See http://support.microsoft.com/kb/103403


"Léila" news:
Bonjour.
J'ai une requête R1 avec un champ "NomEtPrenoms" rangé dans l'ordre
croissant. Curieusement, les fonctions DFirst et DLast portant sur
ce champ me renvoient des résultats selon l'ordre de saisie des
noms et non selon leur ordre d'affichage dans la requête R1. Par
exemple, DFirst me renvoie "Z..." en lieu et place de "A...", parce
que "Z..." a été le premier nom saisi.
Est-ce normal?










Léila
Le #20642501
Merci encore Sylvain.
J'ai pour ma part réussi, en utilisant ces nouvelles données, à tout
réadapter pour me tirer d'affaire. Les fonctions DStart et DEnd crées pour
renoncer aux mauvais résultats renvoyés par DFirst et DLast sont dignes
d'intérêt et je voulais seulement faire remarquer qu'elles ne fonctionnent
pas pour access 2003. Il me semble d'ailleurs qu'elles ont été faites au
départ pour Access 95 et access 97. Si quelqu'un pouvait les réadapter pour
qu'elles fonctionnent avec les versions actuelles d'access, je crois que ce
serait profitable à plus d'un.


Sylvain Lafontaine wrote:
Cette référence est seulement pour vous expliquer que contrairement à
ce que l'on pourrait penser de prime abord, les fonctions DFirst et
DLast ne renvoient aucunement un résultat selon l'ordre d'affichage
d'une requête et que le résultat que vous obtenez présentement - mais
qui vous semble curieux - est conforme à leur description.

Si vous voulez obtenir la tête de file ou la tête de queue de votre
requête selon la clause Order By, vous devez soit utiliser TOP 1,
soit lire la première ligne de résultat.


"Léila" news:
J'ai regardé mais le code ne fonctionne pas.
Pour la fonction DStart par exemple, voici le code:

Option Compare Database
Option Explicit

'--------------------------------------
' Use DStart()instead of DFirst() to return
' the first sorted record in a domain.
'--------------------------------------
Function DStart(FieldName As String, DomainName As String,
Criteria As String)
Dim MyDB As Database, Myset As Dynaset

' ERROR OUT IF THERE IS NO FIELDNAME SENT.
If Len(FieldName) = 0 Then
MsgBox "You Must Specify a Field name", , "DStart"
Exit Function
End If

' ERROR OUT IF THERE IS NO DOMAIN SENT.
If Len(DomainName) = 0 Then
MsgBox "You Must Specify a Domain name", , "DStart"
Exit Function
End If

Set MyDB = CurrentDb()
Set Myset = MyDB.CreateDynaset(DomainName)

If Len(Criteria) > 0 Then
Myset.Filter = Criteria
Set Myset = Myset.CreateDynaset()
End If

' IF THERE ARE NO RECORDS, RETURN THE NULL, ELSE RETURN THE
VALUE ' OF THE FIRST RECORD.
If Myset.EOF Then
DStart = Null
Else
Myset.MoveFirst
DStart = Myset(FieldName)
End If

Myset.Close
MyDB.Close
End Function

Il y a le message d'erreur suivant:
Type défini par l'utilisateur non défini.
Dans la fenêtre de code, il est surligné en bleu l'expression "Myset
As Dynaset".


Léila wrote:
Merci infiniment Sylvain.
Je vais voir ça de près.

Sylvain Lafontaine wrote:
See http://support.microsoft.com/kb/103403


"Léila" news:
Bonjour.
J'ai une requête R1 avec un champ "NomEtPrenoms" rangé dans
l'ordre croissant. Curieusement, les fonctions DFirst et DLast
portant sur ce champ me renvoient des résultats selon l'ordre de
saisie des noms et non selon leur ordre d'affichage dans la
requête R1. Par exemple, DFirst me renvoie "Z..." en lieu et
place de "A...", parce que "Z..." a été le premier nom saisi.
Est-ce normal?










Eric
Le #20644361
Bonjour Léila,

Ça doit être du genre :

Option Compare Database
Option Explicit

'--------------------------------------
' Use DStart()instead of DFirst() to return
' the first sorted record in a domain.
' >>> Use the DAO 3.x Object Library
'--------------------------------------
Function DStart(FieldName As String, DomainName As String, _
Optional Criteria As String)

Dim MyDB As Database, Myset As DAO.Recordset

' ERROR OUT IF THERE IS NO FIELDNAME SENT.
If Len(FieldName) = 0 Then
MsgBox "You Must Specify a Field name", , "DStart"
End
End If

' ERROR OUT IF THERE IS NO DOMAIN SENT.
If Len(DomainName) = 0 Then
MsgBox "You Must Specify a Domain name", , "DStart"
Exit Function
End If

Set MyDB = CurrentDb()
Set Myset = MyDB.OpenRecordset(DomainName)

'
If Len(Criteria) > 0 Then
Myset.Filter = Criteria
Set Myset = Myset.OpenRecordset()
End If

' IF THERE ARE NO RECORDS, RETURN THE NULL, ELSE RETURN THE VALUE
' OF THE FIRST RECORD.
If Myset.EOF Then
DStart = Null
Else
Myset.MoveFirst
DStart = Myset(FieldName)
End If

Set Myset = Nothing
Set MyDB = Nothing
End Function

'-------------------------------------------
'Use DEnd()instead of DLast() to return
' the last sorted record in a domain.
' >>> Use the DAO 3.x Object Library
'--------------------------------------
Function DEnd(FieldName As String, DomainName As String, _
Optional Criteria As String)
Dim MyDB As Database, Myset As DAO.Recordset

' ERROR OUT IF THERE IS NO FIELDNAME SENT.
If Len(FieldName) = 0 Then
MsgBox "You Must Specify a Field name", , "DEnd"
Exit Function
End If

' ERROR OUT IF THERE IS NO DOMAINNAME SENT.
If Len(DomainName) = 0 Then
MsgBox "You Must Specify a Domain name", , "DEnd"
Exit Function
End If

Set MyDB = CurrentDb()
Set Myset = MyDB.OpenRecordset(DomainName)

If Len(Criteria) > 0 Then
Myset.Filter = Criteria
Set Myset = Myset.OpenRecordset()
End If
If Myset.EOF Then
DEnd = Null
Else
Myset.MoveLast
DEnd = Myset(FieldName)
End If

Set Myset = Nothing
Set MyDB = Nothing
End Function

Rem : Les dynaset, createdynaset ça me fait penser plutôt à de l'Access
1.1 ou 2

Léila a écrit :
... Il me semble d'ailleurs qu'elles ont été faites au
départ pour Access 95 et access 97.
Si quelqu'un pouvait les réadapter pour
qu'elles fonctionnent avec les versions actuelles d'access, je crois que ce
serait profitable à plus d'un.






--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Léila
Le #20646231
Crois-moi, tu as rendu service à beaucoup.
Merci Eric.

Eric wrote:
Bonjour Léila,

Ça doit être du genre :

Option Compare Database
Option Explicit

'--------------------------------------
' Use DStart()instead of DFirst() to return
' the first sorted record in a domain.
' >>> Use the DAO 3.x Object Library
'--------------------------------------
Function DStart(FieldName As String, DomainName As String, _
Optional Criteria As String)

Dim MyDB As Database, Myset As DAO.Recordset

' ERROR OUT IF THERE IS NO FIELDNAME SENT.
If Len(FieldName) = 0 Then
MsgBox "You Must Specify a Field name", , "DStart"
End
End If

' ERROR OUT IF THERE IS NO DOMAIN SENT.
If Len(DomainName) = 0 Then
MsgBox "You Must Specify a Domain name", , "DStart"
Exit Function
End If

Set MyDB = CurrentDb()
Set Myset = MyDB.OpenRecordset(DomainName)

'
If Len(Criteria) > 0 Then
Myset.Filter = Criteria
Set Myset = Myset.OpenRecordset()
End If

' IF THERE ARE NO RECORDS, RETURN THE NULL, ELSE RETURN THE
VALUE ' OF THE FIRST RECORD.
If Myset.EOF Then
DStart = Null
Else
Myset.MoveFirst
DStart = Myset(FieldName)
End If

Set Myset = Nothing
Set MyDB = Nothing
End Function

'-------------------------------------------
'Use DEnd()instead of DLast() to return
' the last sorted record in a domain.
' >>> Use the DAO 3.x Object Library
'--------------------------------------
Function DEnd(FieldName As String, DomainName As String, _
Optional Criteria As String)
Dim MyDB As Database, Myset As DAO.Recordset

' ERROR OUT IF THERE IS NO FIELDNAME SENT.
If Len(FieldName) = 0 Then
MsgBox "You Must Specify a Field name", , "DEnd"
Exit Function
End If

' ERROR OUT IF THERE IS NO DOMAINNAME SENT.
If Len(DomainName) = 0 Then
MsgBox "You Must Specify a Domain name", , "DEnd"
Exit Function
End If

Set MyDB = CurrentDb()
Set Myset = MyDB.OpenRecordset(DomainName)

If Len(Criteria) > 0 Then
Myset.Filter = Criteria
Set Myset = Myset.OpenRecordset()
End If
If Myset.EOF Then
DEnd = Null
Else
Myset.MoveLast
DEnd = Myset(FieldName)
End If

Set Myset = Nothing
Set MyDB = Nothing
End Function

Rem : Les dynaset, createdynaset ça me fait penser plutôt à de
l'Access 1.1 ou 2

Léila a écrit :
... Il me semble d'ailleurs qu'elles ont été faites au
départ pour Access 95 et access 97.
Si quelqu'un pouvait les réadapter pour
qu'elles fonctionnent avec les versions actuelles d'access, je crois
que ce serait profitable à plus d'un.




Publicité
Poster une réponse
Anonyme