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

 Delphi Discussion :

Modifier ou Ajouter un enregistrement par une requête SQL


Sujet :

Delphi

  1. #21
    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
    Remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      if (((uppercase(copy(Softcam_Line,1,1)))=('I')) or ((uppercase(copy(Softcam_Line,1,1))=('S'))) or
        ((uppercase(copy(Softcam_Line,1,1)))=('N')) or ((uppercase(copy(Softcam_Line,1,1)))=('W')) or
         ((uppercase(copy(Softcam_Line,1,1)))=('V')) or ((uppercase(copy(Softcam_Line,1,1)))=('F')))
        And ((copy(Softcam_Line,2,1))=(' '))
    Par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ((UpCase(Softcam_Line[1]) in ['I','S','N','W','V','F']) and (Softcam_Line[2] = ' ')) then
    Remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     if((uppercase(copy(Softcam_Line,I,1)) <>'0') and (uppercase(copy(Softcam_Line,I,1)) <>'1')
                 and (uppercase(copy(Softcam_Line,I,1)) <>'2') and (uppercase(copy(Softcam_Line,I,1)) <>'3')
                 and (uppercase(copy(Softcam_Line,I,1)) <>'4') and (uppercase(copy(Softcam_Line,I,1)) <>'5')
                 and (uppercase(copy(Softcam_Line,I,1)) <>'6') and (uppercase(copy(Softcam_Line,I,1)) <>'7')
                 and (uppercase(copy(Softcam_Line,I,1)) <>'8') and (uppercase(copy(Softcam_Line,I,1)) <>'9')
                 and (uppercase(copy(Softcam_Line,I,1)) <>'A') and (uppercase(copy(Softcam_Line,I,1)) <>'B')
                 and (uppercase(copy(Softcam_Line,I,1)) <>'C') and (uppercase(copy(Softcam_Line,I,1)) <>'D')
                 and (uppercase(copy(Softcam_Line,I,1)) <>'E') and (uppercase(copy(Softcam_Line,I,1)) <>'F'))
    Par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      if not (UpCase(Softcam_Line[I]) in ['0'..'9','A'..'F']) then
    Modérateur Delphi

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

  2. #22
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 037
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    UN petit méa culpa sur mon dernier code proposé , j'ai oublié un en ligne 14 par exemple
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #23
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 159
    Points : 37
    Points
    37
    Par défaut
    [QUOTE=Rayek;7554488]

    Merci j'ai déjà essayé ça le problème et ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ((UpCase(Softcam_Line[1]) in ['I','S','N','W','V','F']) and (Softcam_Line[2] = ' ')) then
    quand la ligne et vide ou un saute de ligne j'ai une erreur de violation d’accès

    j'ai essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       if ((Softcam_Line[1] <>'') and (Softcam_Line[1] <>' ') and(UpCase(Softcam_Line[1]) in ['I','S','N','W','V','F']) and (Softcam_Line[2] = ' '))
    mais toujours la même erreur

  4. #24
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 159
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    UN petit méa culpa sur mon dernier code proposé , j'ai oublié un en ligne 14 par exemple
    je vais essayé Merci

  5. #25
    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
    [quote=Night_Wolf1619;7554645]
    Citation Envoyé par Rayek Voir le message

    Merci j'ai déjà essayé ça le problème et ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ((UpCase(Softcam_Line[1]) in ['I','S','N','W','V','F']) and (Softcam_Line[2] = ' ')) then
    quand la ligne et vide ou un saute de ligne j'ai une erreur de violation d’accès

    j'ai essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       if ((Softcam_Line[1] <>'') and (Softcam_Line[1] <>' ') and(UpCase(Softcam_Line[1]) in ['I','S','N','W','V','F']) and (Softcam_Line[2] = ' '))
    Ajoute dans le If (au début du if obligatoirement afin qu'il ne teste pas la suite si la ligne est vide)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (Trim(Softcam_Line) <> '') and  .... then


    mais toujours la même erreur
    Modérateur Delphi

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

  6. #26
    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
    [quote=Night_Wolf1619;7554645]
    Citation Envoyé par Rayek Voir le message

    Merci j'ai déjà essayé ça le problème et ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ((UpCase(Softcam_Line[1]) in ['I','S','N','W','V','F']) and (Softcam_Line[2] = ' ')) then
    quand la ligne et vide ou un saute de ligne j'ai une erreur de violation d’accès

    j'ai essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       if ((Softcam_Line[1] <>'') and (Softcam_Line[1] <>' ') and(UpCase(Softcam_Line[1]) in ['I','S','N','W','V','F']) and (Softcam_Line[2] = ' '))

    mais toujours la même erreur
    Ajoute dans le If (au début du if obligatoirement afin qu'il ne teste pas la suite si la ligne est vide)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (Trim(Softcam_Line) <> '') and  .... then
    Idem pour l'autre
    Modérateur Delphi

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

  7. #27
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 159
    Points : 37
    Points
    37
    Par défaut
    @Rayek

    même résulta car il n y a pas d"espace a supprimé

  8. #28
    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
    Citation Envoyé par Night_Wolf1619 Voir le message
    @Rayek

    même résulta car il n y a pas d"espace a supprimé
    test en le mettant dans un if avant de faire ton test sur les caractères

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if ((Trim(Softcam_Line) <> '')) and (Length(Trim(Softcam_Line)) >= 2)  then
       if ((Softcam_Line[1] <>'') and (Softcam_Line[1] <>' ') and(UpCase(Softcam_Line[1]) in ['I','S','N','W','V','F']) and (Softcam_Line[2] = ' ')) then
      // ton code
    J'ai ajouté aussi un test qui vérifie qu'on a bien au moins 2 caractères pour éviter qu'il y ait une erreur sur le 2em test
    Modérateur Delphi

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

  9. #29
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 159
    Points : 37
    Points
    37
    Par défaut
    @Rayek

    ca a marché je l'ai réduis a ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ((Length(Trim(Softcam_Line)) >= 1) and(UpCase(Softcam_Line[1]) in ['I','S','N','W','V','F']) and (Softcam_Line[2] = ' ')) then
    Merci

  10. #30
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 159
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    je m'en souvenais pas

    toujours est-il que au lieu d'utiliser un Locate dans une table , je ferais une query du style
    Code QQuery : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT Key from Table2 Where Name=:N ANd ProviderID=:P AND KeyIndex=:K

    après avoir préparé la/les querys AVANT la Boucle

    cela donnerait ensuite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    QQuery.ParamByName('N').asString:=System1;
    QQuery.ParamByName('P').asString:=Provider1;
    QQuery.ParamByName('K').asString:=Index1;
    QQuery.Active:=True;
    if QQuery.FieldByname('KEY').isNull then
      begin
        // Partie Insert
      end
    else if QQUery.FieldByname('KEY').asString<>key1 then
      begin
        // partie Update
      end;
    il serait certainement possible d'utiliser un ZUpdateSQL pour contenir les 3 querys et en faire quelque chose de plus condensé (plus de code SQL dans le texte, un seul prepare <-ça il faut que je vérifie)
    le tout devrait être plus rapide , en tout cas en réseau il n'y aurait pas photo
    Salut SergioMaster

    je crois que je me suis planté mais je ne sais pas ou ?

    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
    ZQuery1.ParamByName('pN').AsString := System1;
    ZQuery1.ParamByName('pP').AsString := provider1;
    ZQuery1.ParamByName('pKI').AsString := index1;
    ZQuery1.ParamByName('pK').AsString := key1;
    ZQuery1.ParamByName('pC').AsString :=DateTimeToStr(now);
    ZQuery1.Active:=True;
     
     
    while not eof(FichierTXT) do
    begin
    //Boucle pour extraire les enregisrement
    end;
     
    ZQuery1.SQL.Text:=('SELECT Key from tblSystems Where Name=:pN ANd ProviderID=:pP AND KeyIndex=:pKI AND Key=:pK');
    if ZQuery1.FieldByname('KEY').isNull then
      begin
                    // ajouter les données
    ZConnection1.ExecuteDirect('INSERT INTO tblSystems(NAME,PROVIDERID,KEYINDEX,KEY,COMMENTS) VALUES (:pN,:pP,:pKI,:pK,:pC)');
      end
    else if ZQuery1.FieldByname('KEY').asString<>key1 then
      begin
        // partie Update
    ZConnection1.ExecuteDirect('UPDATE tblSystems SET KEY = :key1 WHERE Name = :System1 AND ProviderID = :provider1 AND KeyIndex = :index1');
     
      end;
    ZQuery1.Active:=False;

  11. #31
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 037
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Night_Wolf1619 Voir le message
    je crois que je me suis planté mais je ne sais pas ou ?
    un peu partout , de plus un executedirect n'accepte pas de paramètres (du moins je ne crois pas )
    Bon , ce corrigé est fait à la volée , bien contrôler les déclarations des constantes , et le formatage (SQL:=Format(....))

    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
     
    var SQL : String;
    const SQLInsert : String ='INSERT INTO tblSystems(NAME,PROVIDERID,KEYINDEX,KEY,COMMENTS) VALUES (%s,%s,%s,%s,%s)';
    const SQLUPdate : String ='UPDATE tblSystems SET KEY =%s WHERE Name = %s AND ProviderID = %s AND KeyIndex = %s'
    ....
    begin
    ZQuery1.SQL.Text:=('SELECT Key from tblSystems Where Name=:pN ANd ProviderID=:pP AND KeyIndex=:pKI AND Key=:pK');
    ZQuery1.Prepare;
     
    //Boucle pour extraire les enregistrement
    while not eof(FichierTXT) do
    begin
     
    ZQuery1.ParamByName('pN').AsString := System1;
    ZQuery1.ParamByName('pP').AsString := provider1;
    ZQuery1.ParamByName('pKI').AsString := index1;
    ZQuery1.ParamByName('pK').AsString := key1;
    // ZQuery1.ParamByName('pC').AsString :=DateTimeToStr(now);
    ZQuery1.Active:=True;
    SQL:='';
    if ZQuery1.FieldByname('KEY').isNull then
      begin 
       SQL:=Format(SQLinsert,[QuotedStr(System1),
                                        QuotedStr(provider1),
                                        QuotedStr(Index1),
                                        QuotedStr(Key1),
                                        QuotedStr(DateTimeToStr(now))]); 
     
    else 
        if ZQuery1.FieldByname('KEY').asString<>key1 then
      begin
         SQL:=Format(SQLUpdate,[Quotedstr(key1),
                                            Quotedstr(System1),
                                            QuotedStr(provider1),
                                            QuotedStr(index1),
                                            Quotedstr(key1)]);
     end
    ZQuery1.Active:=False;
    if Length(SQL)>0 then ZConnection1.ExecuteDirect(SQL);
    end; // Boucle
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  12. #32
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 159
    Points : 37
    Points
    37
    Par défaut
    @ SergioMaster
    Salut l'ami

    ça a marché comme sur des roulettes
    et coté performance comme tu a dit y a pas photo

    Merci infiniment tu me sauve la vie

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Impossible d'ajouter des enregistrements via une requête
    Par roman33 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 05/06/2009, 21h20
  2. Modifier ou supprimer un enregistrement par une requête SQL
    Par afatdz dans le forum Bases de données
    Réponses: 6
    Dernier message: 29/09/2008, 09h01
  3. [ACCESS] Ajouter un enregistrement dans une requête multi-table
    Par access_balou dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 23/09/2008, 14h43
  4. Enlever l'unicité par une requète SQL
    Par philnext dans le forum Langage SQL
    Réponses: 6
    Dernier message: 25/06/2007, 14h22
  5. Réponses: 1
    Dernier message: 04/06/2007, 10h23

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