Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1437 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Access] faire un select

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Access] faire un select

n°1608954
Giz
Posté le 06-09-2007 à 15:55:49  profilanswer
 

Bonjour,
 
Alors attention, voilà la requête :
 

SELECT * FROM Parameters;


 
Ne rigolez pas, mais ça plante !  :lol:  
 
Qu'est ce que notre ami microsoft a encore inventé comme standard SQL ?  :lol:  
 
J'ai "Syntax error in FROM clause". Qu'est ce qu'il faut faire ?  :heink:  
 
Merci.


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
mood
Publicité
Posté le 06-09-2007 à 15:55:49  profilanswer
 

n°1608957
Giz
Posté le 06-09-2007 à 16:03:13  profilanswer
 

Voilà la requête générée avec le wizard :
 

SELECT Parameters.CompanyID, Parameters.CompanyName, Parameters.PaymentCurrency
FROM [Parameters];


 
faut vraiment donner cette requête à mon code Java ?  [:wam]  


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1608983
MagicBuzz
Posté le 06-09-2007 à 16:43:59  profilanswer
 

La prochain coup que tu crées des tables sur un SGBD, renseigne toi sur les mots réservés avant.
 
Parameters est un mot réservé.
Normal donc que ça plante quand tu tentes de faire un SELECT sur un objet système.
 
Donc oui, la requête générée par le Wizard est doublement bonne car :
1/ Les [] sont le système d'échappement de Access et SQL Server. Sous MySql tu aurais eu par exemple `Parameters`
2/ Le * est à banir. J'attends avec impatience qu'un SGBD sorte un paramètre permettant de planter sauvagement lorsqu'on l'utilise autrement que via un requêteur "à la main".
 
Il y a 1000 raisons, et ces 1000 raisons ont chacune 1000 arguments abondant dans leurs sens, donc cherche pas à discuter, n'utilise pas le * dans tes programmes !
 
PS : Le prochain coup, tu crées une table "toto" et "select * from toto" marche parfaitement :spamafote:
C'est toi qu'est pas standard, à pas respecter les mots réservés des outils que tu utilises (et toc :p)

n°1608986
Giz
Posté le 06-09-2007 à 16:46:42  profilanswer
 

Merci :D.


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1609282
MEI
|DarthPingoo(tm)|
Posté le 07-09-2007 à 13:37:29  profilanswer
 

MagicBuzz a écrit :

La prochain coup que tu crées des tables sur un SGBD, renseigne toi sur les mots réservés avant.
 
Parameters est un mot réservé.
Normal donc que ça plante quand tu tentes de faire un SELECT sur un objet système.
 
Donc oui, la requête générée par le Wizard est doublement bonne car :
1/ Les [] sont le système d'échappement de Access et SQL Server. Sous MySql tu aurais eu par exemple `Parameters`
2/ Le * est à banir. J'attends avec impatience qu'un SGBD sorte un paramètre permettant de planter sauvagement lorsqu'on l'utilise autrement que via un requêteur "à la main".
 
Il y a 1000 raisons, et ces 1000 raisons ont chacune 1000 arguments abondant dans leurs sens, donc cherche pas à discuter, n'utilise pas le * dans tes programmes !
 
PS : Le prochain coup, tu crées une table "toto" et "select * from toto" marche parfaitement :spamafote:
C'est toi qu'est pas standard, à pas respecter les mots réservés des outils que tu utilises (et toc :p)


J'vois pas pourquoi on utiliserais pas le *. Parfois c'est plus rapide de faire * que d'avoir que les champs qu'on veut (ca depends du ratio bande passante entre le SGBD et le client et puissance CPU du SGBD).


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°1609306
MagicBuzz
Posté le 07-09-2007 à 14:27:16  profilanswer
 

C'est plus rapide à taper (et encore...).
 
C'est bien le seul cas où c'est plus rapide, et quel que soit la BP, la puissance CPU ou la mémoire disponible.
 
Mais surtout, je ne parle pas des problèmes de maintenance.
 
Combien de connecteurs BDD utilisent un index numérique pour adresser une colonne ? Il se passe quoi alors si tu inserres une colonee plutôt que de l'ajouter à la fin de la définition ?
 
Mais aussi et surtout...
T'as une belle table produit, avec un champ numérique pour son ID, un champ numeric pour son prix, et un petit varchar pour son nom.
 
Allez, un petit * c'est bien, j'ai mes trois petits champs pour faire ma petite tambouille, je suis content.
 
Maintenant, "ah ben oui, mais avec une photo ça serait vachement mieux".
Allez, on rajoute un champ de type BLOB.
 
Ah pis avec un joli texte explicatif ça serait vachement plus joli sur le site web.
Allez, on va rajouter un CLOB.
 
Ah, merde, la répression des fraudes m'oblige à mettre à disposition une copie numérique de la documentation de mes produits aux clients... Pas de problème, je vais rajouter encore un BLOB pour y coller un PDF.
 
Ah ben voilà, maintenant quand dans une page tu listes 50 produits sous forme de liste (donc le nom, le prix, et un lien pour accéder à la page de détail) qui n'utilise que tes 3 premiers champs, tu t'amuses juste à récupérer 5 ou 6 Mo de données par produit.
Faut pas venir pleurer après si l'appli tiens pas la charge et qu'Access c'est de la merde parceque c'est lent...
 
Plutôt le développeur qui au lieu de faire confiance aux personnes qui ont déjà fait les frais de ce genre de pratiques, se trouvent plus malin que tout le monde "parceque sur mon PC avec deux lignes dand la base et moi tout seul qui consulte, c'est plus rapide à écrire qu'en énumérant uniquement les champs dont j'ai besoin".
 
:spamafote:
 
PS : Et y'a encore d'autres raison. Mais celles-ci me semble quand même de loin suffisantes pour se faire une raison : *, tu le tapes dans TOAD, jamais dans ton code. Pour ça les ERP c'est très bien d'ailleurs. Une table ça fait systématiquement 50 champs, donc de toute façon avec un * tu passes plus de temps à trouver l'info dans les 800 colonnes de résultat qu'à taper le nom des champs lors de la requête :D


Message édité par MagicBuzz le 07-09-2007 à 14:28:32
n°1609323
MEI
|DarthPingoo(tm)|
Posté le 07-09-2007 à 15:03:16  profilanswer
 

Un bon pilote SGBD/SGBD ne renvoi qu'une reference pour le BLOB et il est chargé quand on fait MaQuery.GetColonne("MON_BLOB" ).AsBlob.
 
(Aujourd'hui on utilise des Gestionnaire de persistance (mapping objet-relationel) et tu verrais les requetes que ça balance ;))
 
Apres le BLOB à la base c'est le mal. :D
Puis quand t'as une table avec 50-60 colonnes, listes les 30 colonnes dont t'as besoin c'est pas cool non plus.


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°1610006
MagicBuzz
Posté le 10-09-2007 à 12:11:32  profilanswer
 

Un bon pilote va récupérer en vitesse la page en cours de lecture, puis va préparer son cache pour tout le reste.
Notamment, sur le serveur, il va charger en arrière plan toutes les données, y compris le BLOB, afin de ne pas pas surcharger le SGBD au moment où tu vas commencer à lire dedans.
 
Donc non, il ne faut jamais récupérer ce qu'on ne veut pas lire.
 
http://dotnetjunkies.com/Article/8 [...] C11BE.dcik
Point 6.
 
N'importe quelle doc SQL indiquant ce qu'il ne faut pas faire indiquera SYSTEMATIQUEMENT le select * parmis les 10 trucs à surtout pas faire :spamafote:

n°1610966
Giz
Posté le 12-09-2007 à 12:50:54  profilanswer
 

Par curiosité, MagicBuzz, tu es DBA...tu m'as d'être pas mal cultivé en BDD .


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1611425
MagicBuzz
Posté le 13-09-2007 à 16:39:39  profilanswer
 

non, je ne suis pas dba du tout, simple développeur :)
(d'ailleurs ne me demande pas comment faire une reconstruction "propre" d'index, je sais pas faire ;))
 
mais vu que je dois souvent taper dans de grosses bases d'ERP sous divers SGBD, j'ai pas mal potassé les mécanismes d'interrogation des bases de données.


Message édité par MagicBuzz le 13-09-2007 à 16:40:11
mood
Publicité
Posté le 13-09-2007 à 16:39:39  profilanswer
 

n°1611548
Giz
Posté le 14-09-2007 à 01:24:41  profilanswer
 

OK très bien.
 
Bon une autre question "access" :D. Ma requête update marche pas :/. Ca peut venir d'où ?
 

UPDATE History set BatchNumber = '002543', CompanyId = 'SARLEUR',Currency = 'EUR', User_Crt = 'Francois', Date_Crt = '20070914', Time_Crt = '01h08m18s', Process_Crt = '/jsp/report_extraction.jsp', User_Vldt ='', Date_Vldt = '', Time_Vldt ='', Process_Vldt ='', User_Rlsd = '', Date_Rlsd ='', Time_Rlsd = '', Process_Rlsd ='', User_Rjct = '', Date_Rjct = '', Time_Rjct = '', Process_Rjct = '', User_Paid = '', Date_Paid = '', Time_Paid ='', Process_Paid = '', File_Name = '/data/UBS_SARLEUR_EUR_09-14-2007_01h08m18s.txt', Last_Status = 'CreatedCreated' WHERE BatchNumber = '002543', CompanyId = 'SARLEUR',Currency = 'EUR';


 
N.B. : les 25 colonnes de la table History sont de type texte.


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1611549
Giz
Posté le 14-09-2007 à 01:36:26  profilanswer
 

Bon déjà y'a l'erreur des 'and' dans le WHERE à la places des virgules...mais ça plantait encore et j'ai trouvé d'où ça vient !
 
Currency est un mot clé !   :lol:  :lol:  :lol:  :lol:  :lol:  :lol:  
 
Faut vraiment que j'écoute MagicBuzz, sinon jvé finir par tous les utiliser.  :lol:  :lol:  :lol:  :lol:


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1611574
MEI
|DarthPingoo(tm)|
Posté le 14-09-2007 à 08:55:16  profilanswer
 

Y'a une technique qui existe, c'est de prefixer les champs.
 
Par exemple tu prefixe tout par HIS_ ... ;)


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°1611582
Giz
Posté le 14-09-2007 à 09:34:42  profilanswer
 

C'est exactement ce que j'ai fait !...non mais jvé pas changer le nom de toutes mes colonnes à cause d'Access ! :D.


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1611638
MagicBuzz
Posté le 14-09-2007 à 12:25:00  profilanswer
 

Sinon, tu mets simplement les colonnes qui ont un nom réserver entre crochets...
 
[Currency] sera compris par access comme le champ "currency".
 
Autre élément, tu utilises la syntaxe complète :
 
History.Currency = ...
 
=> "logiquement" Access devrait comprendre qu'il s'agit d'un champ (c'est à tester, parcequ'Access ça reste Access quand même ;) )


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Access] faire un select

 

Sujets relatifs
[MySQL] Combiner une SELECT et une UPDATEACCESS souci de lecture de PDF...
probleme SELECT en MATCH avec du HTML...SELECT au dessus de mes capacités (pour le moment)
[MS ACCESS] email?[Access] Requete creation de table et ajout cle primaire
edition zone de liste et accessSelect ... Where ... en ACCESS/SQL j'ai des difficultés
Créer une requete SELECT a une base de donnée ACCESS[vba access]récuperer une requete select dans une variable
Plus de sujets relatifs à : [Access] faire un select


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR