[RESOLU] Conflit avec nextdatabaserow()

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

[RESOLU] Conflit avec nextdatabaserow()

Message par omega »

Salut à toute l'équipe

Quand on veut extraite des données à partir de 2 tables T1 et T2, toutes deux appartenant à une même base de données sqlite (MaBase.db), on procède comme ceci:

Code : Tout sélectionner

Wsql="Select * from Table1  Where Matricule>0"
CheckDatabaseQuery(0,wSql)
While nextDataBaseRow(0)
        If Matricule=100
           Categorie=GetDataBaseString(0,1)
           ;Afficher tous les enregistrements correspondants à cette catégorie
           Wsql="Select * from Table2  Where Matricule<=100"
           CheckDatabaseQuery(0,wSql)
           While nextDataBaseRow(0)
                   Debug  GetDataBaseString(0,5)
           wend
        endif
wend 
Le problème est situé après l'exécution de l'instruction (While nextDataBaseRow(0))
Je crois que (logiquement) le système se comporte normalement mais ce n'est pas ce que je souhaite (moi je veux que le 1er: (While nextDataBaseRow(0)) concerne la lecture des enregistrements suivants de la table 1 et le 2ème: la lecture des enregistrements suivants de la table 2, mais ... hélas, ce n'est pas ce qui se passe à cause de la syntaxe :

nextDataBaseRow(0) j'aurais souhaité (je l'ai déjà proposé quelque part sur ce forum),
que cette instruction devienne: nextDataBaseRow(BaseDeDonnées,Table)
au lieu de nextDataBaseRow(BaseSeulement)

Enfin, c'est juste un souhait (si je dis n'importe quoi éclaircissez-moi Merci)

Qu'en pensez-vous ?
Dernière modification par omega le mar. 05/mars/2013 11:22, modifié 1 fois.
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Conflit avec nextdatabaserow()

Message par falsam »

Bonjour Omega. Pour joindre deux tables (tableA et tableB) chaque table ayant un identifiant commun , tu dois utiliser la syntaxe SQL suivante

Code : Tout sélectionner

SELECT *
FROM tableA
JOIN tableB
ON tableA.id = tableB.id ;
Illustration :
- Création de la table département (numdep, nom)
- Création d'une table clients (idcli, nom, numdep)
- Création de la table chiffre d'affaire (idcli, montant)

*En gras et en couleur les identifiants qui relient les tables entres elles.

La requête consiste à calculer le chiffre d'affaire par client (utilisation conjointe de SUM() et GROUP BY) et pour chaque client, récupérer le libellé du département.

Code : Tout sélectionner

;Chiffre d'affaire client
  ReqSql = "SELECT clients.nom, sum(ca.montant), departements.nom"
  ReqSql + " FROM clients "
  ReqSql + " JOIN departements"
  ReqSql + " JOIN ca"
  ReqSql + " ON (clients.idcli = ca.idcli) AND (clients.numdep = departements.numdep)"
  ReqSql + " GROUP BY clients.idcli"
  
  DatabaseQuery(0, ReqSql)
  Debug DatabaseError()
    
  ;Affichage du résultat de la requete
  While NextDatabaseRow(0)
    Debug GetDatabaseString(0, 0) + " | " +  GetDatabaseString(0, 1)+ " | " +  GetDatabaseString(0, 2)
  Wend
Un exemples complet fonctionnant en mémoire est posté dans la section Trucs et Astuces
http://www.purebasic.fr/french/viewtopi ... =6&t=13156
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Fred
Site Admin
Messages : 2809
Inscription : mer. 21/janv./2004 11:03

Re: Conflit avec nextdatabaserow()

Message par Fred »

Tu peux aussi ouvrir 2 connections sur la base.
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Conflit avec nextdatabaserow()

Message par omega »

Bonjour
Tu peux aussi ouvrir 2 connections sur la base.
Fred!
J'avoue que je comprends pas très bien: comment faire pour ouvrir 2 connections??

Merci
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Conflit avec nextdatabaserow()

Message par Ar-S »

Surement comme ça

Code : Tout sélectionner

B0 = DatabaseQuery(0, Requete$)
B1 = DatabaseQuery(1, Requete$)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Conflit avec nextdatabaserow()

Message par omega »

B0 = DatabaseQuery(0, Requete$)
B1 = DatabaseQuery(1, Requete$)
ça veut dire que je dois travailler sur 2 bases différentes (0 et 1)?

Je rappelle que mes 2 tables se trouvent sur une même base de données

Alors??
Win7 (x64) 64 bits Pb 5.72
Fred
Site Admin
Messages : 2809
Inscription : mer. 21/janv./2004 11:03

Re: Conflit avec nextdatabaserow()

Message par Fred »

Tu peux ouvrir 2 fois la meme base de données, ca ne pose pas de probleme.
Répondre