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 :

Instruction SQL SERVER ne marche plus en ACCESS


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier Avatar de SkYsO
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 217
    Points : 122
    Points
    122
    Par défaut Instruction SQL SERVER ne marche plus en ACCESS
    Bonjour,

    Voilà mon problème, je développe une application en delphi et j'aimerais bien sur qu'elle soit compatible avec le plus grand nombre de BDD,
    notamment Acess, SQL Server et Oracle.

    Et voila mon problème :

    Pour sql server j'utilisé une requête qui me permettait d'insérer une ligne et qui me renvoyé l'ID qui était généré en auto incrément par la bdd :

    Exemple :

    INSERT INTO Employe (1,21'coucou'); SELECT @@IDENTITY as ID

    Et en passant ça dans mon ADOQuery, je recupérer l'ID.
    Mais sous access il m'interdit de faire plusieurs requête à la suite, et je vous pose la question :

    Existe t - il une alternative ?

    En sachant que faire un SELECT MAX(ID) FROM Employe et ensuite +1 n'est pas une bonne solution

    merci


    ps : Aurais-je le même soucis avec Oracle ?
    Blog de mon jeu L2D : http://xna-discovery.blogspot.com/
    Un Left 4 Dead Like en 2D vue de dessus ;p

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    qu'elle soit compatible avec le plus grand nombre de BDD,
    notamment Acess, SQL Server et Oracle.
    Je pense que l'idée de départ n'est pas bonne
    Je ne connais rien à Oracle. Mais ce que je peux dire Pour Access et SQL Server. C'est que ce n'est pas trop possible de rendre leurs codes SQL compatible.

    Je développe en ce moment une application bien tordue (Avec énnormément de condition même dans le SQL), et ce que je peux dire c'est qu'avec Access, c'est pas très pratique contrairement au SQL Server. Je devrais normalement développez cette application en SQL Server et je peux dire que 90 % du code SQL est à refaire pour le simple fait qu'il est possible de l'optimiser bcp plus sous SQL Server.

    Enfin, voilà. De là à rendre la full compatibilité entre 3 SGBDR est très dur voir impossible. (Enfin je pense , je n'ai pas trop d'expérience dans ce domaine)

  3. #3
    Membre régulier Avatar de SkYsO
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 217
    Points : 122
    Points
    122
    Par défaut
    Salut,

    Et bien en fait, j'utilise juste de "simple requête" donc pas de trigger, de procédure stockée et tout le reste. Il m'est donc possible, dans un premier temps, de faire des requêtes qui sont compatible SQL SERVER vs ACCESS.

    De plus, à la limite je me ferais 3 datamodules avec les optimisations de requête possible pour les 3 trois type de bdd.

    Mais pour le moment ma question concerne le @@ IDENTITY
    Blog de mon jeu L2D : http://xna-discovery.blogspot.com/
    Un Left 4 Dead Like en 2D vue de dessus ;p

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    et si tu le fais en 2 fois ?
    D'abord ton command avec INSERT et ensuite ton "SELECT @@IDENTITY as ID FROM TABLE "

  5. #5
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    En sachant que faire un SELECT MAX(ID) FROM Employe et ensuite +1 n'est pas une bonne solution
    Si tu utilises des transactions (begintrans,commit et rollback), je ne vois pas en quoi ce n'est pas une bonne solution. Au moins avec cela c'est compatible avec toute les base de données qui gère les transactions.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  6. #6
    Membre régulier Avatar de SkYsO
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 217
    Points : 122
    Points
    122
    Par défaut
    @Portu, cela ne me garantie pas que personne d'autre va écrire avant que cela ne soit fait. En fait je ne sais pas trop si ça peut passer, à tester mais je ne pense pas que ça sera bon

    @Malatar :

    Je vais voir ce que ça donne du coté transaction, merci
    Blog de mon jeu L2D : http://xna-discovery.blogspot.com/
    Un Left 4 Dead Like en 2D vue de dessus ;p

  7. #7
    Membre régulier Avatar de SkYsO
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 217
    Points : 122
    Points
    122
    Par défaut
    Salut,

    Bon je vais mettre en place la transaction mais je voulais votre avis :

    Dois je faire un block

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    maconnec.BeginTrans
    try 
      requete insert
      requete Max(ID) et après +1 
      maconnec.Commit
    except
      maconnect.Rollback
    end;
    Ou dois je boucler tant que j'ai pas un commit car en fait je n'aurais pas de bon ID si je suis dans ce cas non ?
    Enfin, je n'aurais pas fait mon insert.
    Blog de mon jeu L2D : http://xna-discovery.blogspot.com/
    Un Left 4 Dead Like en 2D vue de dessus ;p

  8. #8
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Cet ID te sert à quoi ?
    Tu fais des requetes insert en cascasde après ?
    Si non, autant mettre un champ autoincrémenté et tu n'as plus à gérer les index. ni de max(ID) + 1 à faire.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  9. #9
    Membre régulier Avatar de SkYsO
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 217
    Points : 122
    Points
    122
    Par défaut
    Oui j'en ai besoin pour d'autre insert en fait.

    Une question pendant que j'y suis.

    Quand je fais une transaction, vaut il mieux tout faire dans un bloque try et ensuite valider en faisant un commit ou englober charque insert dans un try et un commit ?

    J'ai l'impression qu'il vaudrait mieux faire le commit après toute mes actions sql (insert, selection et encore des insert ensuite) comme ça si ya le moindre problème toute mes suites d'action seront annulées, c'est ça ?
    Blog de mon jeu L2D : http://xna-discovery.blogspot.com/
    Un Left 4 Dead Like en 2D vue de dessus ;p

Discussions similaires

  1. [SQL SERVER 2K] Equivalent de IIF ACCESS ou de DECODE ORACLE
    Par Filippo dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 12/09/2006, 15h05
  2. [SQL SERVER 2000] 2 plus grandes dates
    Par Franck2mars dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/04/2006, 10h17
  3. sql server does not exist or access is denied
    Par Immobilis dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 15/03/2006, 15h11
  4. SQL Server does not exist or access denied
    Par jfc dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 09/01/2006, 14h29
  5. Réponses: 3
    Dernier message: 06/10/2004, 15h38

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