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

Bases de données Delphi Discussion :

INSERT avec procédure stockée / Clef de type AutoInc


Sujet :

Bases de données Delphi

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 3
    Points : 1
    Points
    1
    Par défaut INSERT avec procédure stockée / Clef de type AutoInc
    Bonjour,

    j'utilise un TADOQuery pour requeter une table SQL Serveur 2000,
    Chaque enregistrement de la table possède une clef unique de type AutoInc,
    Les enregistrements sont affichés dans une DBGRID,
    La propriété LockType du TADOQuery est positionnée à "ltBatchOptimistic"
    Ainsi, les actions effectuées dans la DBGRID ne sont pas envoyées à SQL Serveur,
    Les actions INSERT, UPDATE et DELETE sont gérées avec des procédures stockées.

    Déroulement du INSERT :

    l'utilisateur insère un nouvel enregistrement dans la DBGRID (donc dans le TADOQuery)
    (toutes les valeurs sont renseignées sauf la valeur de la clef)

    lors de la validation de l'enregistrement, la procédure stockée 'INSERT' est appelée.
    Elle ajoute l'enregistrement dans la table SQL Serveur et retourne la valeur de la clef



    PROBLEME :

    Comment affecter la valeur de la clef dans l'enregistrement créé dans le TADOQuery ?
    En effet, Delphi refuse de forcer l'attribution d'une valeur à un champ AutoInc.

    Bien entendu, il suffit de fermer et ré-ouvrir le TADOQuery pour l'actualiser
    mais cette solution me semble bien coûteuse alors que l'on à déjà toutes les données !


    Merci pour vos réponses ou idées.

  2. #2
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    réponse
    ne pas procéder comme cela, ou forcer un requery.

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bidou,

    merci pour ta réponse rapide. La solution qui consiste à forcer le requery n'est sûrement pas la plus "belle" mais sera celle retenue dans l'urgence.
    J'ai bien trouvé l'excellent tuto sur ADO en suivant le lien "Tutoriels VB".
    Néanmoins, où trouver des infos plus générales et moins théoriques sur les architectures à implémenter ?
    Dans mon cas, quelle stratégie mettre en place pour actualiser efficacement les recordsets suite à l'exécution d'une procédure stockée ?

  4. #4
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    Le problème est dans le choix de l'objet.
    Si j'ai bien compris ta méthode tu utilises un TDBGrid avec un objet TADOQuery qui lui fournit les données. Tu retranscrit les modifications de la grille par une procédure stockée.

    Le problème est :
    Ton Dataset est coté client donc statique. Par définition un tel curseur ne gère pas la synchronisation avec la source. Comme tu utilises des procédures stockée, ce qui est à priori un bon choix, ton dataset ne représente plus la réalité de la source.

    Plusieurs solutions possibles :
    1) Modifié la procédure stockée pour qu'elle renvoie le jeu d'enregistrement. Malheureusement s'il y a beaucoup d'enregistrement, ca ne va pas aller vite.

    2) Forcer le Requery. Ca aussi ca peut vite être lourd.

    3) Travailler coté serveur. Ce n'est pas forcément bon pour le serveur, mais les temps d'accés vont être infiniment meilleur

    4) Trafiquer le DBGrid. Cela demande des champs persistant mais la ruse peut être bonne. En effet, tu peux retyper le champ clé en champ numérique et écrire tes valeurs de clé dedans en allant les récupérer soit en modifiant la procédure soit en envoyant une requête IDENTITY.

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    OK,

    merci pour les pistes proposées.

    parmi les quatre solutions je pense utiliser le requery dans l'urgence (simple et rapide mais relativement lourd à terme).

    j'ai essaye de travailler coté serveur mais j'ai un message d'erreur indiquant que ce type de DataSet ne gère pas les Bookmarks qui sont nécessaires lors de l'utilisation d'un DBGrid !

    Dernière question, aurait-tu des adresses ou trouver des tutoriaux sur les différentes stratégies (comparatif de leurs avantages et de leurs inconvénients) pour l'accès aux données. En effet, la stratégie que j'ai adoptée et qui consiste à utiliser systématiquement les procédures stockées pour l'insert, l'update et le delete n'est peut être pas la bonne ou doit être abordée différemment. En résumé, que font les autres ?

    Merci pour tout.
    BgDelphi.

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 41
    Points : 42
    Points
    42
    Par défaut
    Voir le chapitre « Les différents modes d'accès aux données » du Livre Delphi 7 Studio de Olivier Dahan et Paul Toth , qui est téléchargeable gratuitement sur l’adresse :
    http://delphi.developpez.com/livres/

Discussions similaires

  1. Rafraîchissement d'une grille avec procédure stockée
    Par lecongolais dans le forum Bases de données
    Réponses: 1
    Dernier message: 01/02/2007, 23h38
  2. [PL/SQL] INSERT dans procédure stockées
    Par etoileDesNeiges dans le forum SQL
    Réponses: 5
    Dernier message: 12/12/2006, 15h18
  3. Réponses: 1
    Dernier message: 17/07/2006, 18h08
  4. C# récupérer l'id avec procédure stocké SQL Sserver 2000
    Par maximenet dans le forum Windows Forms
    Réponses: 5
    Dernier message: 11/04/2006, 00h17
  5. Réponses: 7
    Dernier message: 14/02/2005, 11h40

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