Accéder au contenu principal

Articles

Afficher les derniers changements dans Oracle

 Besoin de lister les objets que vous avez modifiés récemment ? J'ai eu ce besoin récemment et après quelques recherches, j'ai pondu cette requête, qui a l'avantage de ne pas nécessiter de privilèges admin:
Articles récents

ROW_NUMBER OVER PARTITION en Access

Ceux qui ont l'habitude de travailler avec une "grosse" base données comme SQL Server / Oracle / PostGreSQL, sont parfois frustrés face à certaines lacunes du SQL d'Access.   Prenons par exemple: ROW_NUMBER() OVER PARTITION, dont l'absence rend certaines requêtes très compliquées.   J'ai donc écrit une petite fonction VBA qui peut être appelée depuis un query Access et qui simulera assez bien ce ROW_NUMBER() OVER PARTITION.   Notez que ceci ne fonctionnera pas correctement dans une vue ou un formulaire interactif. Par contre comme source d'un rapport ou d'un export Excel, c'est impeccable.   En pratique il est préférable d'initialiser la fonction avec une chaîne de caractères "improbable" avant de lancer le rapport, comme indiqué dans le code.

Calculate MAX of a list in VBA

Strangely such a function is not available in VBA. Here is one that works with any number of strings or numbers. Function Largest(ParamArray a() As Variant) As Variant 'returns the largest element of list 'List is supposed to be consistent: all nummbers, dates, strings. 'Nulls are allowed, but not in first position. Eventually provide a first low dummy value 'e.g:   largest(2,6,-9,7,3)         -> 7 '       largest("d", "z", "c", "x") -> "z" 'by Patrick Honorez --- www.idevlop.com     Dim result As Variant     Dim i As Integer          result = a(LBound(a))          For i = LBound(a) + 1 To UBound(a)         If result < Nz(a(i), result) Then             result = a(i)         End If     Next i     Largest = result End Function

Gmail: comment gérer les adresses email obsolètes ?

Lorsqu'un de vos contacts Gmail change d'adresse email, vous avez un choix à faire: soit vous supprimez l'ancienne adresse de la fiche du contact, mais alors vous n'accéderez plus aussi facilement à la liste des échanges avec cette personne, puisque les mails liés à l'ancienne adresse ne seront pas repris. soit vous laissez l'adresse obsolète dans la fiche, mais vous risquez de continuer à lui envoyer des emails à son ancienne adresse, puisqu'en composant un nouveau mail, Gmail vous la proposera. Il y a une solution toute simple: dans la fiche du contact, rajoutez une "*" (sans les guillemets bien sûr) devant l'adresse obsolète. Ex: pour "pierre.dupont@xyz.com", changez l'adresse en "*pierre.dupont@xyz.com". Et le tour est joué. Dorénavant cette adresse n'apparaîtra plus dans la liste des destinataires lorsque vous créez un nouveau mail, mais si vous cherchez la liste des échanges avec Pierre Dupont, les email

Les structures des données

Une intéressante présentation par le "Senior UX design lead at Microsoft Bing" sur la structuration des données. La notion de "très grand" rapprochée de celle du "très petit" me fait penser à cette extraordinaire animation: the Scale of the Universe .

Simuler un COUNT DISTINCT avec Access

Le SQL disponible dans les requêtes Access ne dispose pas de l'instruction COUNT DISTINCT, qui permettrait par exemple, de compte combien de clients différents ont commandé, année par année. Ce prédicat, qui est présent dans SQL Server, peut être simulé de diverses manières, plus ou moins lourdes et plus ou moins efficaces. Mais la méthode probablement la plus performante est d'utiliser une requête CROSSTAB un peu particulière. Voici  un exemple sur la base Northwind (ou Comptoirs avec les versions françaises d'Access), dans lequel on va décompter le nombre de clients différents par année, ainsi que le nombre total de commandes: TRANSFORM Count(*) AS Dist SELECT Year([OrderDate]) AS Yr, Count(([Dist])) AS DistCustomers, Count(OrderId) AS NumOrders FROM Orders AS o GROUP BY Year([OrderDate]) PIVOT CustId In (null); Pour la voir en action, vous pouvez créer une nouvelle requête dans Northwind, l'afficher en mode SQL, et y coller le code ci-dessus. Ce type de requ