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 :

Rédaction d'un sql


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 21
    Par défaut Rédaction d'un sql
    Bonjour,
    Je rédige par code un sql d'insertion de données.
    J'ai donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     with Donnees.QPPInsert do
            Begin
              SQL.Text:= ('insert into TCAL_VIC_PHYS');
              ...
              SQL.Add('values ');
              ...
              SQL.Add(dbl1 + ', ' + dbl2 + ', ' + dbl3 + ', ' ''' + DBEdit17.Text + ''', ');
    dbl1, dbl2 et dbl3 sont des variables Integer déclarées en Var dans la procedure.
    La dernière ligne bloque à cause des apostrophes, je ne sais pas combien je dois en mettre.

    Qui peut m'aider?

    Bien à vous,

    Georges

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    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 236
    Par défaut
    Passe par des paramètres tu auras moins de soucis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    with Donnees.QPPInsert do
    Begin
    SQL.Text:= ('insert into TCAL_VIC_PHYS');
    ...
    SQL.Add('values(:Pm1,:Pm2,:Pm3,:Pm4) ');
    ...
    ParamCheck := True;
    // ASString ou AsInteger cela dépend du type du champs
    // cela différents selon les composants aussi
    // Avec Ado c'est parameters.ParamByName('').Value par exemple
    ParamByName('Pm1').AsString := dbl1;
    // etc ...
    Modérateur Delphi

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

  3. #3
    Membre Expert Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 553
    Par défaut
    Je ne suis pas fan de l'utilisation des paramètres.
    Par contre je préconise de générer une string et de sauvegarder cette string dans un fichier texte à chaque erreur : ça permet de corriger.
    Sinon pour ton pb de quotes tu peux essayer de les remplacer par le doubles-quotes qui sont acceptées dans certaines BDD.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 706
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 706
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par Georges Plétinckx Voir le message
    B
    La dernière ligne bloque à cause des apostrophes, je ne sais pas combien je dois en mettre.
    un QuotedStr sera des plus efficace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL.Add(dbl1 + ', ' + dbl2 + ', ' + dbl3 + ', ' + Quotedstr(DBEdit17.Text) +', ');
    mais j'approuve plus le passage par paramètres (surtout lorsque l'on a affaire a des dates)
    +1 @Rayek

    PS. ça manque de quelques parenthèses mais je pense qu'elles sont dans les ...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 21
    Par défaut
    Rebonjour,
    Je n'aime pas les paramètres non plus.
    J'ai oublié de dire que je travaillais avec Delphi 7 et Oracle 8.
    Voici le code complet de mon sql:

    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
          with Donnees.QPPInsert do
            Begin
              SQL.Text:= ('insert into TCAL_VIC_PHYS');
              SQL.Add('(VIC_PHYS_YEAR, VIC_PHYS_ORDER, VIC_PHYS_CODE_PROV, VIC_PHYS_VIC_NUM, ');
              SQL.Add('VIC_PHYS_LNAME, VIC_PHYS_FNAME, VIC_PHYS_NAT, VIC_PHYS_STREET, ');
              SQL.Add('VIC_PHYS_HOUSE_NR,VIC_PHYS_HOUSE_BOX, VIC_PHYS_POSTCODE, VIC_PHYS_CITY, ');
              SQL.Add('VIC_PHYS_COUNTRY,VIC_PHYS_TEL, VIC_PHYS_DAT_BIRTH, VIC_PHYS_DEATH, ');
              SQL.Add('VIC_PHYS_GENRE, VIC_PHYS_MAR_STAT,VIC_PHYS_CONT_MAR, VIC_PHYS_HUSWI_NUM, ');
              SQL.Add('VIC_PHYS_HUSWI_LN, VIC_PHYS_HUSWI_FN,VIC_PHYS_ACC_NR1, ');
              SQL.Add('VIC_PHYS_ACC_NR2, VIC_PHYS_ACC_NR3, VIC_PHYS_BEN_LNAME, ');
              SQL.Add('VIC_PHYS_BEN_FNAME, VIC_PHYS_IND_SEND, VIC_PHYS_LANG, VIC_PHYS_BSTREET, ');
              SQL.Add('VIC_PHYS_BHOUSE_NR, VIC_PHYS_BHOUSEBOX, VIC_PHYS_BPOSTCODE, ');
              SQL.Add('VIC_PHYS_BCITY,VIC_PHYS_BCOUNTRY, VIC_PHYS_BTEL, VIC_PHYS_MAND_NOM, ');
              SQL.Add('VIC_PHYS_MAND_PRENOM,VIC_PHYS_MAND_GENRE, VIC_PHYS_MAND_RUE, ');
              SQL.Add('VIC_PHYS_MAND_HOUSE_NR, VIC_PHYS_MAND_HOUSEBOX,VIC_PHYS_MAND_CITY, ');
              SQL.Add('VIC_PHYS_MAND_COUNTRY, VIC_PHYS_MAND_QUALITY, VIC_PHYS_MAND_CODEPOST, ');
              SQL.Add('IBAN) ');
              SQL.Add('values ');
              SQL.Add('(''' + DBEdit31.Text + ''', ''' + DBEdit30.Text + ''', ''' + DBEdit29.Text + ''', ''' + DBEdit28.Text + ''', ');
              SQL.Add('''' + DBEdit1.Text + ''', ''' + DBEdit2.Text + ''', ''' + DBEdit9.Text + ''', ''' + DBEdit3.Text + ''', ');
              SQL.Add('''' + DBEdit4.Text + ''', ''' + DBEdit5.Text + ''', ''' + DBEdit6.Text + ''', ''' + DBEdit7.Text + ''', ');
              SQL.Add('''' + DBEdit8.Text + ''', ''' + DBEdit34.Text + ''', ''' + DBEdit10.Text + ''', ''' + DBEdit11.Text + ''', ');
              SQL.Add(dbl1 + ', ' + dbl2 + ', ' + dbl3 + ', ' ''' + DBEdit17.Text + ''', ');
              SQL.Add('''' + dbl1 + ''', ');
              SQL.Add('''' + DBEdit18.Text + ''', ''' + DBEdit19.Text + ''', ''' + DBEdit14.Text + ''', ');
              SQL.Add('''' + DBEdit15.Text + ''', ''' + DBEdit16.Text + ''',''' + DBEdit22.Text + ''', ');
              SQL.Add('''' + DBEdit23.Text + ''', N, ''' + DBEdit67.Text + ''', ''' + DBEdit20.Text + ''', ');
              SQL.Add('''' + DBEdit21.Text + ''', ''' + DBEdit27.Text + ''', ''' + DBEdit24.Text + ''', ');
              SQL.Add('''' + DBEdit25.Text + ''', ''' + DBEdit26.Text + ''', ''' + DBEdit35.Text + ''', ''' + mand1 + ''', ');
              SQL.Add(' + mand2, + mand9, + mand3, ');
              SQL.Add(' + mand4, + mand5, + mand7, ');
              SQL.Add('Belgique, + mand8, + mand6, ');
              SQL.Add('''' + DBEdit74.Text + ''') ');
              ShowMessage(Donnees.QPPInsert.Text);
            End;
          Donnees.QPPInsert.ExecSQL;
    Le showMessage me montre le sql qui est correct sauf en ce qui concerne la ligne avec les dbl et les lignes avec les mand ( qui sont aussi des variables ).

    Bien à vous,

    Georges

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 968
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 968
    Par défaut
    Pourtant avec la coloration syntaxique, ça saute au yeux

    DBEdit17.Text apparaît comme du texte faisant partie de la chaîne. Donc...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 21
    Par défaut
    J'ai résolu le problème.
    J'ai transformé mes variables Int en String. En ajoutant correctement les apostrophes je suis arrivé à ce que je voulais.

    Voici le code final:

    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
     
    with Donnees.QPPInsert do
            Begin
              SQL.Text:= ('insert into TCAL_VIC_PHYS');
              SQL.Add('(VIC_PHYS_YEAR, VIC_PHYS_ORDER, VIC_PHYS_CODE_PROV, VIC_PHYS_VIC_NUM, ');
              SQL.Add('VIC_PHYS_LNAME, VIC_PHYS_FNAME, VIC_PHYS_NAT, VIC_PHYS_STREET, ');
              SQL.Add('VIC_PHYS_HOUSE_NR,VIC_PHYS_HOUSE_BOX, VIC_PHYS_POSTCODE, VIC_PHYS_CITY, ');
              SQL.Add('VIC_PHYS_COUNTRY,VIC_PHYS_TEL, VIC_PHYS_DAT_BIRTH, VIC_PHYS_DEATH, ');
              SQL.Add('VIC_PHYS_GENRE, VIC_PHYS_MAR_STAT,VIC_PHYS_CONT_MAR, VIC_PHYS_HUSWI_NUM, ');
              SQL.Add('VIC_PHYS_HUSWI_LN, VIC_PHYS_HUSWI_FN,VIC_PHYS_ACC_NR1, ');
              SQL.Add('VIC_PHYS_ACC_NR2, VIC_PHYS_ACC_NR3, VIC_PHYS_BEN_LNAME, ');
              SQL.Add('VIC_PHYS_BEN_FNAME, VIC_PHYS_IND_SEND, VIC_PHYS_LANG, VIC_PHYS_BSTREET, ');
              SQL.Add('VIC_PHYS_BHOUSE_NR, VIC_PHYS_BHOUSEBOX, VIC_PHYS_BPOSTCODE, ');
              SQL.Add('VIC_PHYS_BCITY,VIC_PHYS_BCOUNTRY, VIC_PHYS_BTEL, VIC_PHYS_MAND_NOM, ');
              SQL.Add('VIC_PHYS_MAND_PRENOM,VIC_PHYS_MAND_GENRE, VIC_PHYS_MAND_RUE, ');
              SQL.Add('VIC_PHYS_MAND_HOUSE_NR, VIC_PHYS_MAND_HOUSEBOX,VIC_PHYS_MAND_CITY, ');
              SQL.Add('VIC_PHYS_MAND_COUNTRY, VIC_PHYS_MAND_QUALITY, VIC_PHYS_MAND_CODEPOST, ');
              SQL.Add('IBAN) ');
              SQL.Add('values ');
              SQL.Add('(' + DBEdit31.Text + ', ''' + DBEdit30.Text + ''', ''' + DBEdit29.Text + ''', ' + DBEdit28.Text + ', ');
              SQL.Add('''' + DBEdit1.Text + ''', ''' + DBEdit2.Text + ''', ''' + DBEdit9.Text + ''', ''' + DBEdit3.Text + ''', ');
              SQL.Add('''' + DBEdit4.Text + ''', ''' + DBEdit5.Text + ''', ''' + DBEdit6.Text + ''', ''' + DBEdit7.Text + ''', ');
              SQL.Add('''' + DBEdit8.Text + ''', ''' + DBEdit34.Text + ''', ''' + DBEdit10.Text + ''', ''' + DBEdit11.Text + ''', ');
              SQL.Add(dbl1 + ', ''' + dbl2 + ''', ''' + dbl3 + ''', ' + DBEdit17.Text + ', ');
              SQL.Add('''' + DBEdit18.Text + ''', ''' + DBEdit19.Text + ''', ''' + DBEdit14.Text + ''', ');
              SQL.Add('''' + DBEdit15.Text + ''', ''' + DBEdit16.Text + ''',''' + DBEdit22.Text + ''', ');
              SQL.Add('''' + DBEdit23.Text + ''', ''N'', ''' + DBEdit67.Text + ''', ''' + DBEdit20.Text + ''', ');
              SQL.Add('''' + DBEdit21.Text + ''', ''' + DBEdit27.Text + ''', ''' + DBEdit24.Text + ''', ');
              SQL.Add('''' + DBEdit25.Text + ''', ''' + DBEdit26.Text + ''', ''' + DBEdit35.Text + ''', ''' + mand1 + ''', ');
              SQL.Add('''' + mand2 + ''', ' + mand9 + ', ''' + mand3 + ''', ');
              SQL.Add('''' + mand4 + ''', ''' + mand5 + ''', ''' + mand7 + ''', ');
              SQL.Add(' ''Belgique'', ''' + mand8 + ''', ''' + mand6 + ''', ');
              SQL.Add('''' + DBEdit74.Text + ''') ');
              ShowMessage(Donnees.QPPInsert.Text);
            End;

  8. #8
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    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 236
    Par défaut
    Citation Envoyé par Georges Plétinckx Voir le message
    J'ai résolu le problème.
    J'ai transformé mes variables Int en String. En ajoutant correctement les apostrophes je suis arrivé à ce que je voulais.

    Voici le code final:

    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
     
    with Donnees.QPPInsert do
            Begin
              SQL.Text:= ('insert into TCAL_VIC_PHYS');
              SQL.Add('(VIC_PHYS_YEAR, VIC_PHYS_ORDER, VIC_PHYS_CODE_PROV, VIC_PHYS_VIC_NUM, ');
              SQL.Add('VIC_PHYS_LNAME, VIC_PHYS_FNAME, VIC_PHYS_NAT, VIC_PHYS_STREET, ');
              SQL.Add('VIC_PHYS_HOUSE_NR,VIC_PHYS_HOUSE_BOX, VIC_PHYS_POSTCODE, VIC_PHYS_CITY, ');
              SQL.Add('VIC_PHYS_COUNTRY,VIC_PHYS_TEL, VIC_PHYS_DAT_BIRTH, VIC_PHYS_DEATH, ');
              SQL.Add('VIC_PHYS_GENRE, VIC_PHYS_MAR_STAT,VIC_PHYS_CONT_MAR, VIC_PHYS_HUSWI_NUM, ');
              SQL.Add('VIC_PHYS_HUSWI_LN, VIC_PHYS_HUSWI_FN,VIC_PHYS_ACC_NR1, ');
              SQL.Add('VIC_PHYS_ACC_NR2, VIC_PHYS_ACC_NR3, VIC_PHYS_BEN_LNAME, ');
              SQL.Add('VIC_PHYS_BEN_FNAME, VIC_PHYS_IND_SEND, VIC_PHYS_LANG, VIC_PHYS_BSTREET, ');
              SQL.Add('VIC_PHYS_BHOUSE_NR, VIC_PHYS_BHOUSEBOX, VIC_PHYS_BPOSTCODE, ');
              SQL.Add('VIC_PHYS_BCITY,VIC_PHYS_BCOUNTRY, VIC_PHYS_BTEL, VIC_PHYS_MAND_NOM, ');
              SQL.Add('VIC_PHYS_MAND_PRENOM,VIC_PHYS_MAND_GENRE, VIC_PHYS_MAND_RUE, ');
              SQL.Add('VIC_PHYS_MAND_HOUSE_NR, VIC_PHYS_MAND_HOUSEBOX,VIC_PHYS_MAND_CITY, ');
              SQL.Add('VIC_PHYS_MAND_COUNTRY, VIC_PHYS_MAND_QUALITY, VIC_PHYS_MAND_CODEPOST, ');
              SQL.Add('IBAN) ');
              SQL.Add('values ');
              SQL.Add('(' + DBEdit31.Text + ', ''' + DBEdit30.Text + ''', ''' + DBEdit29.Text + ''', ' + DBEdit28.Text + ', ');
              SQL.Add('''' + DBEdit1.Text + ''', ''' + DBEdit2.Text + ''', ''' + DBEdit9.Text + ''', ''' + DBEdit3.Text + ''', ');
              SQL.Add('''' + DBEdit4.Text + ''', ''' + DBEdit5.Text + ''', ''' + DBEdit6.Text + ''', ''' + DBEdit7.Text + ''', ');
              SQL.Add('''' + DBEdit8.Text + ''', ''' + DBEdit34.Text + ''', ''' + DBEdit10.Text + ''', ''' + DBEdit11.Text + ''', ');
              SQL.Add(dbl1 + ', ''' + dbl2 + ''', ''' + dbl3 + ''', ' + DBEdit17.Text + ', ');
              SQL.Add('''' + DBEdit18.Text + ''', ''' + DBEdit19.Text + ''', ''' + DBEdit14.Text + ''', ');
              SQL.Add('''' + DBEdit15.Text + ''', ''' + DBEdit16.Text + ''',''' + DBEdit22.Text + ''', ');
              SQL.Add('''' + DBEdit23.Text + ''', ''N'', ''' + DBEdit67.Text + ''', ''' + DBEdit20.Text + ''', ');
              SQL.Add('''' + DBEdit21.Text + ''', ''' + DBEdit27.Text + ''', ''' + DBEdit24.Text + ''', ');
              SQL.Add('''' + DBEdit25.Text + ''', ''' + DBEdit26.Text + ''', ''' + DBEdit35.Text + ''', ''' + mand1 + ''', ');
              SQL.Add('''' + mand2 + ''', ' + mand9 + ', ''' + mand3 + ''', ');
              SQL.Add('''' + mand4 + ''', ''' + mand5 + ''', ''' + mand7 + ''', ');
              SQL.Add(' ''Belgique'', ''' + mand8 + ''', ''' + mand6 + ''', ');
              SQL.Add('''' + DBEdit74.Text + ''') ');
              ShowMessage(Donnees.QPPInsert.Text);
            End;
    j'espère qu'il n'y a personne qui devra maintenir ca après toi, car des variables qui changent juste de nom à un chiffre près, et des composants pas renommés ...
    Modérateur Delphi

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

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

Discussions similaires

  1. [Lazarus] SQL - Rédaction des requêtes
    Par OR34a dans le forum Lazarus
    Réponses: 5
    Dernier message: 27/05/2013, 10h02
  2. Problème rédaction requête SQL
    Par ludoph dans le forum SQL
    Réponses: 3
    Dernier message: 01/02/2012, 16h15
  3. rédaction syntaxe sql
    Par biba35 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 05/02/2009, 16h50
  4. Réponses: 1
    Dernier message: 26/03/2008, 21h09

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