Le VB, l'Access et la Jointure ...

elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 - 13 août 2007 à 21:42
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 - 14 août 2007 à 07:21
Bonjour tout le monde,


Je sais pas trop quoi vous demander en faite mais j'vais tenter de m'expliquer (brievement si j'y arrive).


J'ai utilisé moulte langague pour differentes applis, et cette fois ci j'aimerai realisé une application en VB.Net avec une base "MS Access" (le truc simple quoi).


On va dire qu'en dev j'ai pas de probleme... En Bdd (j'aime pas trop çà mais) je me demerde ... Mais associer les deux c'est un enfer pour moi ...


J'aimerai en fait réaliser une application de "Devis/Facturation".


Pour se faire on va dire que ma BDD aura besoin de çà :


- Il me faut des clients.
- Il me faut des devis, il peut en y avoir plusieurs par clients.
- Il me faut des articles/prestations pour remplir mes devis.


J'ai donc le MCD (voir le MPD) simplifié suivant :



------------        -------------
  Client              Devis
------------  <---  -------------
(PK)CLIENT_ID        (PK)DEVIS_ID
 NOM                 #CLIENT_ID
 PRENOM              Designation
------------        -------------
                         |
                         |
                    --------------       ------------
                     Nomenclature         Article
                    --------------  ---> ------------
                     #DEVIS_ID            (PK)ARTICLE_ID
                     #ARTICLE_ID          Libelle
                     Quantite             Prix
                    --------------       ------------


- Je precise que mes tables ne sont pas complètes, c'est pour simplifier.
- J'ai mis (PK) pour la clé primaire et # pour les clé etrangères.
- La table "NOMENCLATURE" est une table de jointure entre "devis" et "articles", car un devis contiendra plusieurs prestations/articles.


Pour se faire j'ai decidé de passer au VB.Net (celà avait l'air au debut assez simple).


Les problemes sur lequels je tombes sont :


- Est-ce que mes relations & tables ont l'air corrects ? J'ai beau avoir fait du merise, j'arrive toujours pas à resonner logiquement avec çà !


- Est-ce que c'est plus simple/puissant de se taper du SQL à la main dans l'editeur ou utiliser l'assistant "Source de données" ?


- Si l'assistant permet de créer rapidement une application pouvant exploiter ce schéma, comment afficher d'un trait les articles de la nomenclature, avec leurs quantités ? (reunir les deux tables en 1 Grid).
J'ai placer mes grids avec l'assistant puis j'ai tenté de modifier les requetes après coup avec l'editeur de requête et j'ai un vieux message qui me dit "Le schéma retourné par la nouvelle requete est différent de celui de la requete de base" (non... par dit ??)


- A ton besoin d'ajouter du SQL dans le code pour faire les UPDATE, DELETE, et INSERT ? ou un composant se charge de çà ?


- Faut il realiser les relations dans "Access" ou les faires par la suite dans le concepteur ?


En fait j'ai plein d'autres questions, car je bute completement, et je perd patience avec çà...


En gros si vous avez pas envie de vous prendre la tete avec mes questions savez-vous ou je peux trouver des tutoriaux interessants et complets (ou livres) pour ce genre de cas.
Je ne trouve sur internet que des tutos expliquant les bases du SQL, ou alors des exemples sans jointures complexe. (ex. de base à la con : CLASSE -> ELEVE )


Je vous remercie par avance pour votre patiente (car j'en ai plus).


A+

1 réponse

chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
14 août 2007 à 07:21
Salut,
La question qui résume tout tes déboirs :
Pourquoi réunir les deux tables en 1 Grid ?


D' après ton schema , qui est très correct d' ailleur, Il n' est nullement
question de ça ! Mais:
> Controls Textbox liés à ta table Devis (En-tete)
> Grid lié à ta table Nomenclature (Détails)
Et tout le problème réside dans :
Comment ajouter, impérativement, à Nomenclature le champ #Devis_Id lors
de chaque insertion de ligne de détail ?
Tu peux toujours essayer avec l' evenement OnAddNew de ton Grid.
Il y' a aussi BeforeInsert et AfterInsert.Mais ça sera très laborieux...!
De plus je ne te recommande pas de travailler directement dans tes tables.


Voici ce que je te conseille de faire:
1° Ajoutes deux Tables à ta base:
    *Tmp_Devis : même structure que Devis
    *Tmp_Nomenclature : même structure que Nomenclature
    Sauf que:
     -Elles ne sont pas liées.Ni entre elles ni à aucune autre table.
     -Pas de clé. Ni primaire, ni secondaire.
     -Null et chaine vide autorisé pour tout les champs


2° Pour ajouter un Devis:
    -Tu vides tes deux Tmp tables
    -Tu charges ton formulaire pour le quel , les controls devis seront liés
      à Tmp_Devis  et le Grid à Tmp_Nomenclature.
     Tu masques la colonne #Devis_Id de ton grid.Le Null pour ce champ
      étant toléré, tu ne seras donc pas obligé de le renseigner pour l' instant.


    Sur la commande Enregistrer:
    -Tu insères ( par code) Devis_Id dans la colonne Devis_Id de ta grille
     (pour toutes les lignes)
    -Tu fais une transaction:
      insert into Devis select * from Tmp_Devis
      insert into Nomenclature select * from Tmp_Nomenclature


3° Pour Modifier un Devis:
     Tu procèdes de la même façon sauf qu' au début, tu insères dans Tmp_Devis
     la ligne du Devis en question et dans Tmp_Nomenclature, les détails de ce même Devis.
     En prenant soin de vider les deux tables aupréalable, bien sûr...
   
     Pour enregistrer les modifications,
     -Tu insères Devis_Id dans la colonne Devis_Id de ta grille pour les lignes qui auront
      été ajoutées.
     - Tu fais une transaction:
      delete * from Nomenclature where Devis_Id=" & LeDevisEnQuestion
      delete * from Devis where Devis_Id=" & LeDevisEnQuestion
      insert into Devis select * from Tmp_Devis
      insert into Nomenclature select * from Tmp_Nomenclature


Dans un cas comme dans l' autre , si tu annules la saisie, tu décharges ton formuliare
et c' est tout.


Voici en GROS la technique.Il ne te reste plus qu' à pauffiner le code...
C' est facile à mettre en place mais ça demande quand même beaucoup de finesse.
Il n' ya donc pas beaucoup de code SQL.Une transaction suffira.Même l' integrité des
données, en cas d' echec, et avec une gestion d' erreur bien organisée, elle sera prise
en charge par Access si tes relations y sont bien notifiées.
Toute le travail reste dans l' initialisation du formulaire et dans le control de la saisie.
Pour ça , on te fais confiance :-) Tu t' en sortiras sûrement.


Espèrant donc que ce condensé répond à toutes tes questions.


PS: Il se peut que je ne donnes pas suite à cet échange.
C' est juste qu' en ce mois-ci, j' ai rarement l' occasion de me connecter.
Mais si l' opportunité se présente, je ne manquerais pas de suivre...


Amicalement.





<hr />

I LIKE TO BE HERE WHEN I CAN .


* Rolling   
0
Rejoignez-nous