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

Delphi Discussion :

Requêtes SQL avec TurboDB


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2014
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2014
    Messages : 81
    Par défaut Requêtes SQL avec TurboDB
    Salut tout le monde

    Voilà, je suis débutant en delphi

    Je développe une application (Gestion des archives administratif),j'utilise TurboDB comme SGBD, mon MCD est le suivant :

    Table 1 : TArchive (Id_arch, libelle_arch, rayonnage, etage_ray, num_boite_arch, date_archivage, duree_vie, scan_arch, observation, id_type_arch, id_dir, id_salle, id_etat_arch, id_langue_arch)

    Table 2 : T Directions (id_dir, libelle_dir)

    Table 3 : TSalles_archives (id_salle, num_salle_arch, surface_salle, etage_salle)

    Table 4 : TEtat_arch (id_etat_arch, etat_arch)

    Table 5 : TLangue_ arch (id_langue_arch, langue_arch)

    Table 6 : Ttypes_archives (id_type_arch, des_type_arch)

    Ce que je veux exactement c'est : Avec SQL : Quand je click sur le bouton "Valider", mon DBGRID affiche un résultat qui englobe tous les champs qui en été remplis dans mes champs de saisies (voir la photo), sachant que certain champs viens de plusieurs tables déférentes,

    Voici mon capture d'écran.
    Nom : Recherche.PNG
Affichages : 281
Taille : 89,5 Ko
    Et merci d’avance…

  2. #2
    Membre actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2014
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2014
    Messages : 81
    Par défaut j'atend toujours votre aide
    quelqu'un peut m'aider

  3. #3
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 938
    Billets dans le blog
    6
    Par défaut
    ici : http://www.developpez.net/forums/d15...-multi-tables/ des idées sur la conception du SELECT pour lequel ta clause WHERE devra tenir compte des valeurs de champs saisies dans les Edit. Il vaut mieux faire une requête paramétrée, l'affecter au SQL.Text du Query, puis affecter les valeurs des paramètres.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  4. #4
    Membre actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2014
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2014
    Messages : 81
    Par défaut salut Tourlourou
    ici : http://www.developpez.net/forums/d15...-multi-tables/ des idées sur la conception du SELECT pour lequel ta clause WHERE devra tenir compte des valeurs de champs saisies dans les Edit. Il vaut mieux faire une requête paramétrée, l'affecter au SQL.Text du Query, puis affecter les valeurs des paramètres.
    Merci Tourlourou pour votre réponse, je vais me renseigner plus sur les paramètres SQL.

    J'ai une autre question, le faite que j'utilise TurboDb, est-ce que ça influe sur la requête elle-mème ?

  5. #5
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 654
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par samidz2014 Voir le message
    J'ai une autre question, le fait que j'utilise TurboDb, est-ce que ça influe sur la requête elle-même ?
    sur la requête elle-même je ne sais pas, cela dépende des possibilités de TurboDB. Il a fallu que je cherche sur Internet pour savoir ce que c'était !
    encore une SGBD "exotique" avec des composants associés dont le but était de remplacer Paradox et BDE, donc à priori pour des programmes mono-poste

    pour ce qui est de la requête, plus que les paramètres (j'abonde avec tourlourou sur le fait qu'il faille les utiliser), c'est surtout les Jointures (JOIN ou LEFT JOIN) qu'il faut travailler, voici un début de SQL à continuer
    partie "contante"
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT a.Id_arch, a.libelle_arch, a.rayonnage, a.etage_ray, a.num_boite_arch, a.date_archivage, a.duree_vie, a.scan_arch, a.observation, a.id_type_arch, a.id_dir, a.id_salle, a.id_etat_arch, a.id_langue_arch,D. Libelle_dir, S.num_salle_arch, S.surface_salle, S.etage_salle,
    ...  
    FROM TArchive A
    LEFT JOIN  Directions D ON a.id_dir=D.id_dir
    LEFT JOIN  Salles_archives S ON a.id_Salle=S.id_salle  
    .....
    WHERE 1=1
    reste ensuite à bâtir la partie WHERE tout va dépendre si ces composants peuvent utiliser des macros ou non
    d'une manière générale (pas de macros) je ferais de la manière suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    tdbQuery1.Close;
    tdbQuery1.UnPrepare;
    tdbQuery1.SQL.text:=PartieConstante; // voir plus haut 
     
    tdbQuery1.SQL.Add('WHERE 1=1');
    if length(nomdirectionEdit.Text)>0 then tdbQuery1.SQL.Add('AND Libelle_dir=:Dir');
    ....
    tdbQuery1.Prepare;
    if length(nomdirectionEdit.Text)>0 then tdbQuery1.ParamByName('Dir').asString:=nomdirectionEdit.text;
    ...
    tdbQuery1.Open;

  6. #6
    Membre actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2014
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2014
    Messages : 81
    Par défaut Erreur de compilation
    Salut SergioMaster
    Merci pour ton aide, et désolé pour le retard...

    j'ai lu ton code, et j'ai travaillé avec, mais je reçoi le message d'érreur suivant:

    Mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    TdbQuery1.close;
    TdbQuery1.UnPrepare;
    TdbQuery1.SQL.text:=('Select a.libelle_arch, a. rayonnage, a. etage_ray, a. num_boite_arch, a. date_archivage, a. duree_vie, a. scan_arch, a. observation, a. type_interet, D. libelle_dir, E. etat_arch, L. langue_doc, T. des_type_arch, S. num_salle_arch, s. surface_salle, s. etage_salle from Tarchive a LEFT JOIN Tdirections D ON a. id_dir=D. id_dir LEFT JOIN Tetat_arch E ON a. id_etat_arch=E. id_etat_arch LEFT JOIN TLangue_docum L ON a. id_langue_arch =L. id_langue_arch LEFT JOIN Tsalles_archives S ON a. id_salle=S. id_salle LEFT JOIN Ttypes_archives T ON a. id_type_arch=T. id_type_arch WHERE 1=1');
    TdbQuery1.SQL.add(WHERE 1=1);
    If length(nomdirectionEdit.text)>0 then TdbQuery1.sql.add('AND Libelle_dir = :Dir');
    TdbQuery1. Prepare ;
    If length(nomdirectionEdit.text)>0 then TdbQuery1.paramByName('Dir').asString :=nomdirectionEdit.text ;
    TdbQuery1.Open;

    Message d'erreur:

    [Error] USerche.pas(98): String literals may have at most 255 elements
    [Error] USerche.pas(99): Undeclared identifier: 'WHERE'
    [Fatal Error] UMain.pas(150): Could not compile used unit 'USerche.pas'

Discussions similaires

  1. Requete SQL avec Rand()
    Par leloup84 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 03/02/2006, 16h41
  2. requete SQL avec valeur max
    Par oeil de nuit dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/01/2006, 08h58
  3. REQUETE SQL AVEC HAVING
    Par juju_77 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 05/08/2005, 09h49
  4. Probleme de requete SQL avec un champs date
    Par ju360modena dans le forum ASP
    Réponses: 5
    Dernier message: 16/06/2005, 11h18
  5. [JDBC] retour de requete sql avec valeur NULL
    Par maxxou dans le forum JDBC
    Réponses: 3
    Dernier message: 13/09/2004, 14h40

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