Page 1 sur 1

[RESOLU] Conflit avec nextdatabaserow()

Publié : sam. 16/févr./2013 15:48
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 ?

Re: Conflit avec nextdatabaserow()

Publié : dim. 17/févr./2013 11:22
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

Re: Conflit avec nextdatabaserow()

Publié : dim. 17/févr./2013 19:11
par Fred
Tu peux aussi ouvrir 2 connections sur la base.

Re: Conflit avec nextdatabaserow()

Publié : mar. 19/févr./2013 11:08
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

Re: Conflit avec nextdatabaserow()

Publié : mar. 19/févr./2013 11:17
par Ar-S
Surement comme ça

Code : Tout sélectionner

B0 = DatabaseQuery(0, Requete$)
B1 = DatabaseQuery(1, Requete$)

Re: Conflit avec nextdatabaserow()

Publié : mar. 19/févr./2013 12:30
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??

Re: Conflit avec nextdatabaserow()

Publié : mar. 19/févr./2013 13:40
par Fred
Tu peux ouvrir 2 fois la meme base de données, ca ne pose pas de probleme.