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

VB 6 et antérieur Discussion :

pb sql en vb6


Sujet :

VB 6 et antérieur

  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Par défaut pb sql en vb6
    vb 6
    access

    bonjour..
    j'ai 03 tables :
    1. entrees, contient les champs suivant : id, qte
    2. sorties, contient les champs suivant : id, qts
    3. etat, contient les champs suivant : id, qte, qts, ecart (la colone qte et qts sont vide)

    je voudrais importer la colone " qte" de la table etat par le contenu de la colone "qte" de la table entrees.
    et remplir la colone " qts" de la table etat par le contenu de la colone "qts" de la table sorties.

    qlq 1 peut m'aider a trouver le sql qui regle ce pb...

    merci d'avance

  2. #2
    Membre confirmé Avatar de jfdmagic
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 181
    Par défaut
    tes tables sont-elles liées par une relation One to Many (un à plusieurs) ?

    Y a t-il intégrité référentielle entre les deux tables ?

  3. #3
    Membre expérimenté
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2008
    Messages : 155
    Par défaut
    Dans le cas où tu as une relation 1-1 càd Id est unique dans chaque table, tu peux utiliser ce SQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT INTO etat SELECT 
    id = t1.id,
    qte = t1.qte,
    qts = t2.qts,
    ecart = 0  // tu peux mettre aussi un truc du genre t2.qte - t1.qts
    FROM entrees t1 INNER JOIN sorties t2 on t1.id = t2.id

  4. #4
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Par défaut
    merci de m'avoir repondu....

    1. la table entrees : id : clé primaire
    2. sorties : id : clé primaire
    3. etat : id : clé primaire

    j'ai met ce
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim ecart As Recordset
    Set ecart = Base.OpenRecordset("INSERT INTO ecart SELECT id= t1.id, qte = t1.qte,qts = t2.qts,ecart = 0  FROM entrees t1 INNER JOIN sorties t2 on t1.id= t2.id")
    mais ca n'a pas marché....
    erreur d'execution 3352 il n ya pas de nom de champ dans l'instruction insert into (id=t1.id)

  5. #5
    Membre confirmé Avatar de jfdmagic
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 181
    Par défaut
    tu n'es pas clair(e) dans tes propos.

    est-ce le même id dans les 3 tables ? comment tes tables sont-elles reliées ?

    si tes champs reprennent la même chose et que ce sont les mêmes id, il n'est peut-être pas nécessaire de séparer les tables (tu compliques inutilement) car, ce qui t'intéresse, c'est bien la table état ? ....

    Etat : id, qte, qts , ecart avec id : clé primaire

    lors du remplissage, il suffit de dire que ecart = qts - qte

    tu as ainsi une table unique et des requêtes beaucoup plus simples.

  6. #6
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Par défaut
    je travail dans une application de gestion de stock...c'est a dire une application qui marche deja...sur cette application l'option etat de stock n'existe pas..
    alors j'ai procédé comme suivant : j'ai créé les tables : entrées, sorties et etat.
    pour les deux tables entrées et sorties, j'ai pu les remplire via ma base de données...
    il me rest maintenant la table "etat". je voudrais la remplir via ces deux table...voila
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim ecart As Recordset
    Set ecart = Base.OpenRecordset("INSERT INTO ecart SELECT id = t1.id , qte = t1.qte,qts = t2.qts,ecart = 0  FROM entrees t1 INNER JOIN sorties t2 on t1.id = t2.id ")

  7. #7
    Membre expérimenté
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2008
    Messages : 155
    Par défaut
    sehing7,
    une petite faute de frappe peut-être mais ton SQl essaye d'écrire une ligne dans la table ecart, qui n'existe pas. C'est dans etat que tu voulais mettre des données, non?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO etat SELECT id = t1.id , qte = t1.qte,qts = t2.qts,ecart = 0 FROM entrees t1 INNER JOIN sorties t2 on t1.id = t2.id ")
    Je ne pense pas que tu as besoin d'un recordset pour exécuter cette requete. Moi, j'utiliserais une commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim cmd As new ADODB.Command
    cmd.activeconnection = myconnection 'connection que tu as défini avant
    cmd.commandType = adCmdtext
    cmd.commandText = "INSERT INTO ecart SELECT id = t1.id , qte = t1.qte, " & _
    "qts = t2.qts,ecart = 0 FROM entrees t1 INNER JOIN sorties t2 on t1.id = t2.id" 
    cmd.execute
    set cmd = nothing

  8. #8
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Par défaut
    j'ai inséré ton code...il s'arrete a la ligne : cmd As New ADODB.Command
    avec l'erreur de compilation :
    type defini par l'utilisateur non defini

    nb : la table ecart...

  9. #9
    Membre confirmé Avatar de jfdmagic
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 181
    Par défaut
    as-tu mis le dim ?

    as-tu chargé la librairie qui va bien ? pour les contrôles ADO, il faut ajouter ActiveX Data Object 2.0 dans les références (différent de DAO : Data Access Object)

    Bonne continuation.

  10. #10
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Par défaut
    bonjour...

    --as-tu mis le dim ? tu veut dire la declaration de la variable..oui j'ai met : Dim cmd As new ADODB.Command

    --as-tu chargé la librairie qui va bien ? oui, vous avez raison j'ai rajouté cette librairie afin de travailler sous les object ADO

    --mais mainetant j'ai un autre pb, le compilateur s'arrete a la deuxieme ligne :

    cmd.ActiveConnection = "\\Serveur\gsa\data\commerciale.mdb"
    (j'ai une base de données access que je l'ai met dans le server)


    avec l'erreur : erreur d'execution 2147467259(80004005)
    microsoft gestionnaire de pilot odbc, nom de la source de données trops long


    merci d'avance

  11. #11
    Membre confirmé Avatar de jfdmagic
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 181
    Par défaut
    je voulais parler de la dimension par là.

    ton chemin de connexion est peut être invalide :

    mets ta base dans le répertoire de ton application VB6 et

    essaye ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmd.ActiveConnection = App.Path & "\commerciale.mdb" 'un seul \ au début'
    Bonne continuation

  12. #12
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Par défaut
    , tjrs le meme pb avec le meme message d'erreur, j'ai met ma base dans le rpertoire d'application....

    nb: j'ai pas compris " la dimension" !!

  13. #13
    Membre confirmé Avatar de jfdmagic
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 181
    Par défaut
    la dimension d'une variable, c'est faire référence à son type et à son unité si il y a lieu.

    essaye de mettre ta base à la racine et change le chemin de connexion en conséquence.

  14. #14
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Par défaut
    , tjrs le meme pb


    avec l'erreur : erreur d'execution 2147467259(80004005)
    microsoft gestionnaire de pilot odbc, source de données introuvable et nom de fichier introuvable

  15. #15
    Membre confirmé Avatar de jfdmagic
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 181
    Par défaut
    c'est une autre erreur...

    vérifie ta connexion fournisseur ODBC...

    cependant, je ne m'y connais pas trop dans ce type de connexion : je ne te serais plus d'une grande aide maintenant.

  16. #16
    Membre expérimenté
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2008
    Messages : 155
    Par défaut
    Voilà ce que je trouve sur internet pour te connecter à une base access
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim cnnADO as new ADODB.connection
    Private sub DBConnect()
    Dim CnxStrg  as String
    Private Const myPathBd = "c:\MonRepertoireTest\" ' Chemin d'accès au répertoire la base de données 
    Private Const mybd = "bd\mabaseTest.mdb" ' nom du dossier et de la base 
     
    CnxStrg = "Provider=Microsoft.Jet.OLEDB.4.0;" _ 
    & "Data Source=" & myPathBd & mybd 
    cnnADO.ConnectionString = CnxStrg 
    cnnADO.open
    end sub
    Est-ce que tout ça t'aide un peu plus???

  17. #17
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Par défaut
    je vous remercie infiniment de votre aide.....
    jfdmagic..AnneCa

  18. #18
    Membre confirmé Avatar de jfdmagic
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 181
    Par défaut
    si tu as un soucis, reviens nous voir.

    Penses à l'icone

  19. #19
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Par défaut
    bonjour
    j'ai pas encore regle ce problème...
    merci

  20. #20
    Membre confirmé Avatar de jfdmagic
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 181
    Par défaut
    voici le code que je te propose pour faire ta connexion ADO (ActiveX Data Object): plus adapté que DAO (Data Access Object) car la connexion est distante.
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    'une fois la librairie ADO ajouté'
    Dim MaBase As ADODB.Connection
    Dim MaTable As ADODB.RecordSet
    Dim MaRequete As String
    Dim NomDeLaTable As String
     
    'Connexion à la Base'
    Set MaBase = New ADOBD.Connection 'Création de la connexion'
    MaBase.CursorLocation= adUseClient: MaBase.Mode = adModeReadWrite 'paramètres de connexion les plus courants'
    MaBase.Provider = "Microsoft.Jet.OLEDB.4.0" 'définition du fournisseur de la connexion'
    MaBase.ConnectionString = 'Le Chemin de la base entre " " ' 
    'le plus facile étant de mettre ta base au même endroit que ton application puis tu utilises App.Path'
    MaBase.Open 'la base est ouverte'
     
    'Déconnexion de la base'
    MaBase.Close
    Set MaBase = Nothing
     
    'Pour ouvrir une table existante et ajouter des données si la base est ouverte '
    Set MaTable = New ADODB.RecordSet 'ou New RecordSet'
    NomDeLaTable = 'Le nom de la table que tu veux ouvrir ; attention, correctement orthographié !'
    MaTable.Open NomDeLaTable, MaBase, adOpenStatic, adLockPessimistic
    MaTable.AddNew 'permet d'ajouter'
    MaTable![MonAttribut] = 'Ta donnée ; elle peut provenir d'un textbox par exemple ; MonAttribut est un attribut de la table ' 
    'Tu peux faire autant de MAJ que tu veux, sur ta ligne'
    MaTable.Update
    MaTable.Close
    Set MaTable = Nothing
     
    'Pour ouvrir une table à partir d'une requête SQL'
    MaTable = New RecordSet
    MaRequete = "SELECT ... FROM ... INNER JOIN ... WHERE ..." 
    MaTable.Open MaRequete, MaBase , adOpenKeySet, adlockBatchOptimistic
    'on parcourt la table'
    If MaTable.RecordCount <> 0 Then
       MaTable.MoveFisrt
    Else
       MsgBox "Il n'y a aucune donnée !"
    End If
    While Not (MaTable.EOF)
       If MaTable.RecordCount <> 0 Then
          MaTable.MoveNext
       End If
    Wend
    Bonne Continuation

Discussions similaires

  1. Petit problème avec une requête SQL en VB6
    Par muzele dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 15/11/2007, 20h51
  2. Problème d'update d'une table sql en vb6
    Par cfelicien dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 30/08/2007, 20h24
  3. Insérer une BDD SQL dans VB6?
    Par Whinespirit dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 24/07/2007, 16h10
  4. executer un fichier sql depuis VB6
    Par aymenagrebi dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 18/04/2007, 22h07
  5. Requete SQL sur base SQL Server VB6
    Par Yanmeunier dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 25/11/2005, 12h30

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