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

ASP Discussion :

Question sur insertion dans une base et multisessions


Sujet :

ASP

  1. #1
    Membre chevronné Avatar de Oluha
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 183
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 183
    Points : 1 967
    Points
    1 967
    Par défaut Question sur insertion dans une base et multisessions
    Bonjour

    Je vous explique mon problème : je suis en train de créer un intranet permettant la gestion d'abonnement. Plusieurs personnes travaillent dessus simultanéments. Celles-ci peuvent ajouter un abonné dans la base de données.
    Cette ajout ce fait sur deux tables :
    - la table INDIVIDU qui contient tous les numéros d'abonnés plus d'autres infos
    - la table ADRESSE qui contient toutes les adresses des individus
    Ces deux tables sont liées par le numéro d'abonné.

    Donc quand une personne ajoute un abonné, on crée d'abord un enregistrement dans la table INDIVIDU puis après on enregistre dans la table ADRESSE. Il faut donc récupérer l'id qu'on vient d'insérer dans la table INDIVIDU pour pouvoir lier avec l'adresse.
    Or j'ai plusieurs personnes qui peuvent insérer un abonné en même temps, donc faire un SELECT @@IDENTIFY n'est pas possible, car on est pas sûr de vraiment récupérer le bon id.

    Je me demande donc si d'insérer dans la base à l'aide d'un recordset éviterait le problème ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    set RS = server.CreateObject("ADODB.RecordSet")
    RS.open "INDIVIDU", connex, 1, 2
    RS.AddNew
    RS("EDIT_NUM") = ...
    ...
    RS.Update
    indiv_num = RS("INDIV_NUM")
    RS.close
    set RS = nothing
    Est ce qu'en procédent de cette façon je suis 100% sûre de récupérer le bon numéro même s'il y a plusieurs saisies simultannées ?
    A priori je dirais que oui mais j'ai quand même un doute et j'aimerai une confirmation.
    Si cette méthode n'est pas sûre, comment procéder ?

    Merci pour vos réponses

  2. #2
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Salut,

    1) c'est @@IDENTITY mais je suppose la faute de frappe
    2) es-tu sûr que retourner @@IDENTITY peut poser problème en cas de simulatanéité? Car il y a une notion de session dans @@IDENTITY et SCOPE_IDENTITY.
    J'ai lu ça en faisant F1 dans MS-SQL, après avoir lu les définitions tu pourras poser ta question dans le forum MS-SQL. Je pense qu'en utilisant @@IDENTITY ou même SCOPE_IDENTITY ça peut fonctionner.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  3. #3
    Membre chevronné Avatar de Oluha
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 183
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 183
    Points : 1 967
    Points
    1 967
    Par défaut
    j'ai lu les définitions de @@IDENTITY (en effet j'ai fais une faute en voulant aller vite). Ils parlent en effet de notion de session, mais je ne sais pas trop comment c'est géré et j'ai encore un gros doute à ce sujet. Je vais essayer de voir sur le forum sqlserver.

    Sinon que pensez-vous de passer par un recordset comme je l'ai mis dans mon premier message ? Est-ce que ca marcherait de cette façon ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    367
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 367
    Points : 414
    Points
    414
    Par défaut
    Salut,

    Je doute comme franculo qu'il y ait possibilité de simultaneité. Tout cela est géré par iis, qui ne traite pas les demandes simultanement. Cela dit un long traitement demandé par le premier client peut générer un timeout pour le second

    autre chose : es tu vraiment obligée de séparer l'individus et l'adresse dans deux tables distinctes ? un individu peut avoir plusieurs adresses ?

  5. #5
    Membre chevronné Avatar de Oluha
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 183
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 183
    Points : 1 967
    Points
    1 967
    Par défaut
    En effet un individu peut avoir plusieurs adresses.
    De plus, ce n'est pas moi qui est crée la base de données et elle contient déjà de nombreux enregistrements puisqu'elle est utilisée par un programme Delphi, je m'occupe d'adapter le logiciel pour une interface web.

    Sinon pour en revenir à la simultanéité :

    supposons que :
    utilisateur A crée une ligne dans INDIVIDU
    utilisateur B crée une ligne dans INDIVIDU
    utilisateur A fait SELECT @@INDENTITY FROM INDIVIDU

    Va-t-il vraiment récupérer l'id de la ligne qu'il a inséré ou bien l'id de l'utilisateur B. Donc même si IIS ne traite pas les 2 INSERT en même temps, il se peut que le SELECT se fasse après le 2eme INSERT, voilà pourquoi je parle de "simultanéité".

    Sinon pas d'avis au sujet d'un RecordSet pour l'insertion ?

  6. #6
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Citation Envoyé par Oluha
    supposons que :
    utilisateur A crée une ligne dans INDIVIDU
    utilisateur B crée une ligne dans INDIVIDU
    utilisateur A fait SELECT @@INDENTITY FROM INDIVIDU

    Va-t-il vraiment récupérer l'id de la ligne qu'il a inséré ou bien l'id de l'utilisateur B. Donc même si IIS ne traite pas les 2 INSERT en même temps, il se peut que le SELECT se fasse après le 2eme INSERT, voilà pourquoi je parle de "simultanéité".
    Question à poser dans le forum MS-SQL
    Citation Envoyé par Oluha
    Sinon pas d'avis au sujet d'un RecordSet pour l'insertion ?
    Pas de réponse = pas d'avis, en effet. J'ai souvent fait le @@IDENTITY et je n'ai jamais rencontré de problème. Car les traitements sont toujours rapides et la simultanéité "exacte" est vraiment très rare.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    367
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 367
    Points : 414
    Points
    414
    Par défaut
    Sinon pas d'avis au sujet d'un RecordSet pour l'insertion ?
    Lorsqu'on m'a ensigné l'asp on m'a toujours deconseillé cette méthode, pour cause de performance et de securité. Lorsque Ms a sorti ADO.Net il a supprimé cete possibilité de travailler en mode connecté, pour les memes raisons, donc je ne te le conseille pas, meme si ca peut marcher

  8. #8
    Membre chevronné Avatar de Oluha
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 183
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 183
    Points : 1 967
    Points
    1 967
    Par défaut
    ok

    c'est vrai que je suis loin d'être une spécialiste en ASP et j'y connais rien en .NET donc je ne fais pas tellement attention à ce genre de chose, je me base sur les programmes d'autres personnes qui n'ont pas forcemment la bonne méthode

    Merci pour ces réponses

  9. #9
    Membre chevronné Avatar de Oluha
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 183
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 183
    Points : 1 967
    Points
    1 967
    Par défaut
    On m'a répondu sur le forum SQL SERVER qu'il fallait faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    BEGIN TRANSACTION
    mon insert
    mon select
    COMMIT TRANSACTION
    Seulement je ne sais pas comment faire les transactions en ASP. J'ai chercher sur google mais ce n'est qu'en ASP.NET que j'ai trouvé.

    Est ce que ca marcherait si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    sql = "BEGIN TRANSACTION"
    connex.execute(sql)
    sql = "INSERT INTO INDIVIDU(EDIT_NUM,EXNUM) VALUES (" + Session("editeur") + ", '" + cstr(Date) + " " + cstr(Time) + "')"
    connex.execute(sql)
    set RS0 = server.CreateObject("ADODB.RecordSet")
    sql = "SELECT @@IDENTITY FROM INDIVIDU"
    RS0.open sql, connex
    sql = "COMMIT TRANSACTION"
    connex.execute(sql)
    num_abo = RS0(0)
    Sinon comment faire une transaction ?

    Merci

  10. #10
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    J'y ai pensé mais furtivement. L'objet Connection de ADO.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  11. #11
    Membre chevronné Avatar de Oluha
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 183
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 183
    Points : 1 967
    Points
    1 967
    Par défaut
    Merci

    A priori ca devrait fonctionner, du moins je n'ai pas de message d'erreur

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête d'insertion dans une base ACCESS
    Par kurul1 dans le forum C++Builder
    Réponses: 5
    Dernier message: 02/11/2006, 17h41
  2. problème d'insertion dans une base de données
    Par belmansour tidjani dans le forum JDBC
    Réponses: 7
    Dernier message: 18/01/2006, 22h13
  3. [Xquery] faire un insert dans une base
    Par Batou dans le forum XQUERY/SGBD
    Réponses: 1
    Dernier message: 13/12/2005, 01h07
  4. Réponses: 2
    Dernier message: 04/12/2005, 21h10
  5. [C#] Insertion dans une base Access .mdb
    Par borgfabr dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/03/2005, 15h30

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