IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

Interroger une table Acces intelligemment


Sujet :

Bases de données Delphi

  1. #1
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 023
    Points : 308
    Points
    308
    Par défaut Interroger une table Acces intelligemment
    Bonjour les amis,

    Je suis en train de faire un petit programme tout simple et j'aimerais avoir vos conseils.
    J'ai une table dans une BD MS Accès365 qui contient une liste de codes (Des codes EAN en fait).
    Ce que je voudrais faire c'est que quand on scan un code, le programme cherche dans la BD ce code.
    Si le code n'a jamais été scanné la valeur du champ22 est "vide", dans ce cas le programme met dans ce champs la valeur "CTRL" (et enregistre la modif bien sur) et affiche OK sur ma fenêtre.
    Si le code a déjà été scanné la valeur du champ22 est "CTRL" dans ce cas le programme ne change rien dans la table mais affiche IN sur ma fenêtre.
    Si le code n'est pas trouvé dans la table, le programme affiche un NO sur ma fenêtre.

    Je voudrais savoir à votre avis comment interroger la BD intelligemment en sachant que ce qui importe c'est la vitesse (le moins de temps possible avant de pouvoir scanner le suivant).
    Pour le moment il n'y a qu'un seul poste avec le prg dessus et la BD.
    Si ça marche bien et que ce n'est pas trop compliqué j'envisagerais bien de passer à plusieurs PRG sur des PC différents qui interrogent une seule BD installée sur l'un d'un (mais bon ce n'est pas une priorité et pas indispensable).

    Voilou j'attends donc vos suggestions de fin d'année :-).

    Merci et bonnes fêtes à tous :-)

  2. #2
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 023
    Points : 308
    Points
    308
    Par défaut
    Oula ça se complique.
    Je n'arrive déjà pas à me connecter à ma BD :-(
    Un petit tuto sur les BD et Delphi 10 (Seattle), parce que depuis le 7, je suis un peu perdu...

    Merci.

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 166
    Points : 41 350
    Points
    41 350
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    MS ACCESS pour du multi-postes est pas forcément l'idée de fin d'année ! Il vaut mieux tout de suite passer à un vrai SGBDR (oui je considère que MSAccess n'en est pas vraiment un). Ce n'est pas le choix qui manque meilleur-sgbd-delphiil suffit de chercher dans les différents sondages pour faire son choix entre les gratuits par exemple Quels-sont-vos-SGBD-gratuits-preferes-en-2017-Et-pourquoi-Partagez-vos-avis (à noter que SQLite n'est pas multi-poste.

    Pour une version rapide (toujours en optique multi-poste, et quelque soit le SGBD) le mieux reste le SQL donc utilisation d'une requête pour obtenir la ligne correspondante à la colonne contenant le code EAN13
    Quelque chose comme :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COALESCE(Champ22,'CTRL') FROM TABLEEAN13 WHERE Champ22=:Codesaisi
    toutefois pour que cela soit rapide, un index sur la colonne champ22 est fortement conseillé .

    PS. Delphi Seattle ok mais quelle déclinaison Starter, Pro, Entreprise (en gros avec ou sans Firedac) ?

  4. #4
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 342
    Points : 394
    Points
    394
    Par défaut
    Salut Yepazix,

    Je ne connais pas Office 365, mais en SQL avec Delphi, voici comment je procèderais : il faut prévoir au moins 2 requêtes et organiser ta table :
    -- pour la table : 2 champs : "CodeEAN" contenant ton code et "NbLecture" ou "Lu" contenant soit un entier long (initialisé à 0) soit un boolean (initialisé à False) pour savoir si ton code a déjà été lu (ou combien de fois il a été lu !)

    -- puis un code pour connaître l'état déjà accédé / jamais accédé / non présent dans la base du genre :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT NbLecture FROM T_CodesEAN WHERE CodeEAN = :CodeSaisi
    reste à déduire (dans ton code delphi) du résultat obtenu les 3 possibilités pour l'affichage dans ta form (i.e. OK si NbLecture = 0 / False, IN si NbLecture > 0 / = True, NO si pas de réponse)
    Peut-être que l'usage du coalesce proposé par SergioMaster peut simplifier le traitement du résultat par un
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COALESCE(NbLecture, -1) FROM T_CodesEAN WHERE CodeEAN = :CodeSaisi
    avec i.e. OK si NbLecture = 0 / False, IN si NbLecture > 0 / = True, NO si NbLecture = -1. Mais jamais essayé !

    -- puis un code pour enregistrer la lecture du code (incrémenter le nombre de lecture ou basculer le boolean à True)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE T_CodesEAN SET NbLecture = :NouveauNbLecture WHERE CodeEAN = :CodeSaisi

    En relisant ton message pendant que je réponds, je me demande si ton Champ22 correspond au champ Lu / Non Lu; mais je ne comprends pas pourquoi tu veux y insérer une valeur en lettre (CTRL) ?

  5. #5
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 023
    Points : 308
    Points
    308
    Par défaut
    Merci SergioMaster et archonte

    Je vais regarder les liens proposé mais avant tout je vous explique la problématique et vous pourrez surement mieux me conseiller sur vers quoi m'orienter.

    Ma version de Delphi est : Delphi 10 Seattle architect.

    Donc le pourquoi de MS ACCES ?
    Simplement parceque au départ j'ai un fichier csv et que je savais comment très simplement convertir ce fichier en table MS Acces.
    (J'ouvre accés, je fais source de données et hop voilà).
    Maintenant l'idéal serait pour moi de pouvoir :

    1/ Lancer mon programme.
    2/ Lui "donner" le fichier CSV.
    3/ Qu'il en fasse une table dans la meilleure BD
    4/ Qu'il fasse les recherches comme précédemment expliqué.

    Donc si vous avez des suggestions pour faire ça :-)

    En attendant je vais lire ce que vous m'avez envoyé.

    EN tous cas merci et une très bonne fin d'année :-).


    Le problème c'est que pour 1,2 et 3 je ne sais pas du tout comment faire ça.

  6. #6
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 023
    Points : 308
    Points
    308
    Par défaut
    PFFF c'est super pénible, toutes les recherches que je fais sont noyée dans un flot de vieux post complètement obsolètes....

    Et ils sont passé ou les DBGRID ET DBNAVIGATOR ?

    Bon je fais quoi je me remet à mon vieux Delphi 7 ? :-)

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 166
    Points : 41 350
    Points
    41 350
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    Donc le pourquoi de MS ACCES ?
    Simplement parceque au départ j'ai un fichier csv et que je savais comment très simplement convertir ce fichier en table MS Acces.
    à oublier

    1/ Lancer mon programme.
    2/ Lui "donner" le fichier CSV.
    3/ Qu'il en fasse une table dans la meilleure BD
    ...
    Le problème c'est que pour 1,2 et 3 je ne sais pas du tout comment faire ça.
    Pour le 1, je pense que quand même c'est pas trop difficile

    Pour le reste c'est relativement simple

    2 .Lui donner un fichier CSV
    Puisqu'il s'agit d'un fichier CSV, un open d'un fichier texte peut suffire mais, puisqu'il s'agit d'une version Architect il y a donc Firedac donc une lecture de
    ceci et l'étude du programme de démo Object Pascal\DataBase\FireDAC\Samples\Comp Layer\TFDBatchMove\Main. devrait donner une idée précise de ce qu'il est possible de faire à tout le moins pour charge un fichier csv dans une table SQLite.

    3. Qu'il en fasse une table dans la meilleure BD
    Là, je suis partagé tout d'abord parce que en fait le point 2 à fait le travail (meilleur SGBD mono poste) ensuite parce que ce n'est pas un fichier CSV qui doit créer une structure de table mais bien l'analyste (ou quelque soit le nom que l'on donne) responsable de la structure des données qui doit décider de la structure des tables.
    Ensuite le choix d'un SGBD peut influer , par exemple : Firebird permet de se connecter à des fichiers externes mais la seule structure facile à intégrer est un fichier texte de longueur fixe.

    Dans tout les cas, TFDBatchMove est la solution est ce premier problème

    Et ils sont passé ou les DBGRID ET DBNAVIGATOR ?
    ils sont toujours là en VCL et en FMX, à part qu'il n'y a plus le préfixe DB, ils sont encore là (Grid et BindNavigator) ,pour FMX les liaisons avec des données se font via les LiveBindings, mon tutoriel à ce sujet est en cours de relecture technique. et paraitra donc dans les prochaines semaines (je peux même encore écrire l'année prochaine ). En parlant de tutoriel j'ai abordé le sujet CSV dans le tutoriel précédent (épisode 4), d'ailleurs je pense que cela correspond exactement à ton besoin actuel
    ce n'est donc pas :
    de vieux post complètement obsolètes
    mais correspond à une approche objet de ta problématique (bon, je n'utilise pas une Grille mais une "simple" listview, je suis prêt à te fournir un lien sur le premier jus de mon tuto épisode 5 pour ce qui concerne les grilles.

  8. #8
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 342
    Points : 394
    Points
    394
    Par défaut
    Citation Envoyé par Yepazix Voir le message
    Merci SergioMaster et archonte


    Citation Envoyé par Yepazix Voir le message
    Maintenant l'idéal serait pour moi de pouvoir :

    1/ Lancer mon programme.
    2/ Lui "donner" le fichier CSV.
    3/ Qu'il en fasse une table dans la meilleure BD
    4/ Qu'il fasse les recherches comme précédemment expliqué.

    Donc si vous avez des suggestions pour faire ça :-)
    [...]
    Le problème c'est que pour 1,2 et 3 je ne sais pas du tout comment faire ça.
    1/ Je crains de ne pas comprendre : un double-clic sur l'exe généré après un appui sur F9 dans Delphi ?
    2/ Utiliser un TOpenDialog ? ou plus complexe, un drag-and-drop sur ton form ?
    3/ là, c'est plus compliqué ! ça dépend de la structure de ton fichier csv (cf cette discussion et en particulier les remarques de ShaiLeTroll : ici sur le forum). Ensuite, il te faudra insérer ces données dans une BDD : avec ta version architect tu disposes des composants d'accès aux BDD, essaie Interbase / Firebird pour commencer par exemple. Il y a plein de discussions sur le choix des bases de données ... tout dépend de ton utilisation ...
    Citation Envoyé par Yepazix
    Et ils sont passé ou les DBGRID ET DBNAVIGATOR ?
    3bis/ Dans la palette "Contrôles de données" ? mais je ne vois pas le rapport avec ta question initiale ...
    4/ effectivement ...

Discussions similaires

  1. fichier txt vers une table acces
    Par sahraoui07 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 23/03/2007, 19h02
  2. Interroger une table de liaison
    Par Ferdinand dans le forum Requêtes
    Réponses: 2
    Dernier message: 19/03/2007, 10h32
  3. Réponses: 3
    Dernier message: 22/04/2006, 06h05
  4. [VB6] Allez en avant dernier enregistrement d'une table acce
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 10/02/2006, 15h42
  5. utiliser le quickreport et le sql pour interroger une table
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 7
    Dernier message: 28/07/2005, 08h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo