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

Requêtes et SQL. Discussion :

Insertion Automatise Dans Une Table


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 71
    Points : 47
    Points
    47
    Par défaut Insertion Automatise Dans Une Table
    Voici ma question :
    TABLE A :
    REFA(identifiant primaire,compteur)
    MONTANTA
    DATEDEBUTA
    NOMBREA

    Exemple:
    1
    200
    10/09/2007
    10

    Je voudrais insérer dans la table TABLE B
    REFB(compteur)
    MONTANTB
    DATEB

    200;10/09/2007
    200;10/10/2007
    200;10/11/2007
    200;10/12/2007
    200;10/01/2008
    200;10/02/2008
    200;10/03/2008
    200;10/04/2008
    200;10/05/2008
    200;10/06/2008

    Je ne sais pas du tout comment faire car je ne maîtrise pas du tout le code.

  2. #2
    Membre expérimenté
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Points : 1 664
    Points
    1 664
    Par défaut
    Bonsoir,
    Si j'ai bien compris, tu veux insérer dans la table B tous les enregistrements de la table A?
    Dans ce cas, une requête SQL Ajout fera sûrement l'affaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT INTO TABLEB ( MONTANTB, DATEB )
    SELECT MONTANTA, DATEDEDEBUTA FROM TABLEA;
    Mais j'ai comme l'impression que ce n'est pas ce que tu cherchais ...
    Qu'à cela ne tienne, bon courage et @+
    La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici nous avons réuni théorie et pratique: Rien ne fonctionne ... et personne ne sait pourquoi!
    Albert Einstein

  3. #3
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 71
    Points : 47
    Points
    47
    Par défaut
    Non ce n'est pas tout à fait cela.
    Dans la première table j'ai NOMBREA = 10; donc je veux que dans la TABLEB, 10 enregistrements soient insérés avec DATEA, DATEA+30, DATEA+60, ...

  4. #4
    Membre expérimenté
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Points : 1 664
    Points
    1 664
    Par défaut
    Bonjour,
    Citation Envoyé par dimitrak
    Non ce n'est pas tout à fait cela.
    Dans la première table j'ai NOMBREA = 10; donc je veux que dans la TABLEB, 10 enregistrements soient insérés avec DATEA, DATEA+30, DATEA+60, ...
    Dans ce cas, il te faut réexécuter la requête plusieurs fois (NOMBREA fois) à l'aide d'un code. Je vais utiliser DAO, mais sûrement, il y a sans doute un autre moyen plus simple ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    Public Sub ExeNbFois ()
      Dim db As DAO.Database, tblA As DAO.Recordset
      Dim xDate As Date, NewDate As Date, NbTour As Long, Mt As Currency, x As Long
      Set db=CurrentDb
      Set tblA=db.OpenRecordset("TABLEA", dbOpenDynaset)
      With tblA
        If .RecordCount<>0 Then
          .MoveFirst
          Do While Not .EOF
            Mt=.Fields(1)
            xDate=.Fields(2)
            NbTour=.Fields(3)
            For x=0 To NbTour-1
              NewDate=DateAdd("m",x,xDate)
              DoCmd.RunSQL "INSERT INTO TABLEB ( MONTANTB, DATEB ) VALUES ( " & Mt & ", #" & Format(NewDate, "mm/dd/yyyy") & "# );"
            Next
            .MoveNext
            Doevents
          Loop
        End If
        .Close
      End With
      Set tblA=Nothing
      Set db=Nothing
    End Sub
    La fonction DateAdd me permet de retourner la date suivante à x mois ("m") près. Tu peux faire une recherche dans l'aide d'Access en utilisant la touche .
    Sur ce, bon courage et @+
    La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici nous avons réuni théorie et pratique: Rien ne fonctionne ... et personne ne sait pourquoi!
    Albert Einstein

  5. #5
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 71
    Points : 47
    Points
    47
    Par défaut
    Merci beaucoup !
    Dans le code comment puis-je rajouter la condition "WHERE".
    Quand je met :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL "INSERT INTO TABLEB ( MONTANTB, DATEB , REFC) VALUES ( " & Mt & ", #" & Format(NewDate, "mm/dd/yyyy") & "#,Forms![FRM_TABLEC]![REFC]  )  Where [TABLEA]![REFA]=2 ;"
    j'ai un message d'erreur :
    Erreur d'éxécution '3137':
    Point-virgule absent à la fin de l'instruction SQL

    Quel est la syntaxe de la commande DoCmd.RunSQL pour rajouter cette condition WHERE ?

    Merci d'avance

  6. #6
    Membre expérimenté
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Points : 1 664
    Points
    1 664
    Par défaut
    Re,
    Citation Envoyé par dimitrak
    Dans le code comment puis-je rajouter la condition "WHERE".
    Quand je met :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL "INSERT INTO TABLEB ( MONTANTB, DATEB , REFC) VALUES ( " & Mt & ", #" & Format(NewDate, "mm/dd/yyyy") & "#,Forms![FRM_TABLEC]![REFC]  )  Where [TABLEA]![REFA]=2 ;"
    j'ai un message d'erreur :
    Erreur d'éxécution '3137':
    Point-virgule absent à la fin de l'instruction SQL

    Quel est la syntaxe de la commande DoCmd.RunSQL pour rajouter cette condition WHERE ?
    Tu veux déja filtrer les enregistrements de la table TABLEA. Je te propose le code écrit plus haut avec quelques modifs colorées en bleu et en gras.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Public Sub ExeNbFois ()
      Dim db AS DAO.DATABASE, tblA AS DAO.Recordset
      Dim xDate AS Date, NewDate AS Date, NbTour AS Long, Mt AS Currency, x AS Long
      SET db=CurrentDb
      SET tblA=db.OpenRecordset("SELECT * FROM TABLEA WHERE REFA=2;", dbOpenDynaset)
      WITH tblA
        IF .RecordCount<>0 Then
          .MoveFirst
          Do While NOT .EOF
            Mt=.FIELDS(1)
            xDate=.FIELDS(2)
            NbTour=.FIELDS(3)
            FOR x=0 TO NbTour-1
              NewDate=DateAdd("m",x,xDate)
              DoCmd.RunSQL "INSERT INTO TABLEB ( MONTANTB, DATEB, REFC ) VALUES ( " & Mt & ", #" & Format(NewDate, "mm/dd/yyyy") & "#, " & Forms!FRM_TABLEC!REFC & " );"
            Next
            .MoveNext
            Doevents
          Loop
        End IF
        .Close
      End WITH
      SET tblA=Nothing
      SET db=Nothing
    End Sub
    Ce qui serait mieux, c'est d'ajouter des paramètres dans la procédure et puis de l'appeler.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Sub ExeNbFois (RéfA As Long, RéfC As Long)
      ...
      SET tblA=db.OpenRecordset("SELECT * FROM TABLEA WHERE REFA=" & RéfA & ";", dbOpenDynaset)
      WITH tblA
        ...
              DoCmd.RunSQL "INSERT INTO TABLEB ( MONTANTB, DATEB, REFC ) " & _
              "VALUES ( " & Mt & ", #" & Format(NewDate, "mm/dd/yyyy") & "#, " & RéfC & " );"
            ...
    End Sub
    L'appel se fait comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Call ExeNbFois(2,nz(Forms!FRM_TABLEC!REFC,0))
    Bon courage et @+
    La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici nous avons réuni théorie et pratique: Rien ne fonctionne ... et personne ne sait pourquoi!
    Albert Einstein

  7. #7
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 71
    Points : 47
    Points
    47
    Par défaut
    Super !

    Tout fonctionne, merci beaucoup de ton aide !

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 187
    Points : 56
    Points
    56
    Par défaut
    Bonjour,

    je pense que c'est ce dont j'aurais besoin pour l'automatisation d'insertions (il me faudrait en réaliser 3 différentes): Je vais prendre la plus complexe comme ça pour les autres ça sera easier

    J'ai un formulaire de recherche sur une base de données d'équipements ( la table Equipments a pour champ : EquipmentName, IDEquipment, IDType, IDFamily, IDproject, et quelques autres pas utiles ici) avec une liste de résultats (résultant des choix fait sur les champs) lorsque je click sur un équipement, je vois dans une autre liste ses caractéristiques.

    Si je veux ajouter une caractéristique à un équipement je click dessus dans la liste de résultats et je click sur la commande add characteristic. Apaprait alors un formulaire dans lequel je sélection l'EquipmentName, la caractéristique (longueur, poids etc) et je rempli la zone de texte pour attribuer la valeur. Mais comme il y a plusieurs équipements de mêmle projet, meme famille et meme type, je veux rendre possible l'attribution de cette caractéristique à cet ensemble d'équipements.

    J'ai créé une check box à cet effet (et une liste pour vérifier les noms du projet, de la famille et du type)

    (relations de mes tables en pièces jointe)

    Il faut que j'attribue ce que j'ai tapé dans la zone de texte à CharacValue (table EquipmentCharacteristics) de tous les équipements ayant même IDFamily, meme IDType et meme IDProject (récupérable via l'IDEquipment de l'équipement sélectionné et la table Equipment)

    A part la récupération des IDProject , IDFamily et IDType je ne pense pas que cela soit bien différent

    Merci d'avance
    Matt

  9. #9
    Membre expérimenté
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Points : 1 664
    Points
    1 664
    Par défaut
    Bonjour,
    @Dalmasma je crois que la discussion sur laquelle s'attache ce post se trouve au sujet VBA SQL]DLookUP j'y arrive pas.
    Vaut mieux le placer là-bas.
    La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici nous avons réuni théorie et pratique: Rien ne fonctionne ... et personne ne sait pourquoi!
    Albert Einstein

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 187
    Points : 56
    Points
    56
    Par défaut
    Non non pas du tout, c'est bien un problème d'insertions multiples automatisées
    Matt

  11. #11
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 71
    Points : 47
    Points
    47
    Par défaut
    Voilà une autre question, toujours dans la même idée que précédemment.
    J'ai une requête basé sur la TABLEA.

    SELECT TABLEA.REFA, TABLEA.MODE, TABLEA.DUREE, TABLEA.MONTANT, TABLEA.DATEDEBUT, 1/[DUREE] AS TXL, IIf(Day([DATEDEBUT])>30,1,30-Day([DATEDEBUT]))+(12-Month([DATEDEBUT]))*30 AS NBJ1, (IIf(Day([DATEDEBUT])>30,1,30-Day([DATEDEBUT]))+(12-Month([DATEDEBUT]))*30)/360 AS PL1, Round((IIf(Day([DATEDEBUT])>30,1,30-Day([DATEDEBUT]))+(12-Month([DATEDEBUT]))*30)/360*(1/[DUREE])*[MONTANT],2) AS AL1, Year([DATEDEBUT]) AS ANNEE, [MONTANT]/[DUREE] AS AL
    FROM TABLEA;


    Exemple :
    REFA MODE DUREE MONTANT DATEDEBUT TXL NBJ1 PL1 AL1 ANNEE
    1 Linéaire 3 1200 20/06/2007 0,333333333333333 190 0,527777777777778 211,11 2007

    Je voudrais insérer dans une table (REFD(auto),REFA,ANNEED,MONTANTD) le résultat suivant:
    REFA(1),ANNEE(2007),AL1(211,11)
    REFA(1),ANNEE(2008),A(400)
    REFA(1),ANNEE(2009),A(400)
    REFA(1),ANNEE(2010),MONTANT-AL1-A-A

    Ce résultat est bien sûr fonction de la durée (3ans) et du début(20/06/07)

    Merci d'avance

Discussions similaires

  1. Insert Into dans une table avec select
    Par smail25 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/12/2006, 13h06
  2. Insertion directe dans une table
    Par zzinfo dans le forum SQL
    Réponses: 2
    Dernier message: 28/02/2006, 15h17
  3. [9i] insertion sequentiel dans une table
    Par djalil dans le forum Oracle
    Réponses: 4
    Dernier message: 17/11/2005, 19h06
  4. [JSP]probleme d'insertion float dans une table
    Par karamazov994 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 14/04/2005, 11h49
  5. Insertion valeure dans une table
    Par krfa1 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 29/03/2005, 10h50

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