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 :

Erreur de concaténations dans un DATAMODULE


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 47
    Points : 23
    Points
    23
    Par défaut Erreur de concaténations dans un DATAMODULE
    Bonjour,
    je fais une petite application sous DElPHI. Je manipule l'objet DATASET pour l'accès aux données des mes tables ORACLE.

    Je suis profane en programmation DELPHI, j'espère que je pourrai avoir un coup de main pour me débloquer.

    Voici mon bout de code :
    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
     
    rocedure Tmoduledata.OracleDataSet1AfterDelete(DataSet: TDataSet);
    var donne:string;
    begin
         ShortDateFormat:='dd/mm/aaaa hh:nn:ss';
         donne:='insert into ops$asy.vio_mvt '||
           ' (cmp_cod,vio_chassis,vio_mvt_ope,vio_year,vio_numdos,vio_mvt_type,vio_mvt_date,vio_mvt_oper) values '||
           '( '''||OracleDataSet1.FieldByName('cmp_cod').AsString||''','''||
            OracleDataSet1.FieldByName('vio_chassis').AsString||''',''D'','''||
            OracleDataSet1.FieldByName('vio_year').AsString||''','''||
            OracleDataSet1.FieldByName('vio_numdos').AsString||''',''Suppression'','||
            'ToDate('''||DatetimeToStr(now)||''',''DD/MM/YYYY HH24:mm:ss''),'''')';
     
            oraclequery1.SQL.Text:=donne;
            oraclequery1.Execute;
     
     
    end;
    Je ne sais pas si je fais mal les concaténations, j'ai plein de messages d'erreurs suivants :

    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
     
    [Erreur] Unit3.pas(70): Caractère incorrect dans le fichier d'entrée : '|' ($7C)
    [Erreur] Unit3.pas(71): Opérateur ou point-virgule manquant
    [Erreur] Unit3.pas(71): Caractère incorrect dans le fichier d'entrée : '|' ($7C)
    [Erreur] Unit3.pas(72): Opérateur ou point-virgule manquant
    [Erreur] Unit3.pas(72): Caractère incorrect dans le fichier d'entrée : '|' ($7C)
    [Erreur] Unit3.pas(73): Opérateur ou point-virgule manquant
    [Erreur] Unit3.pas(73): Caractère incorrect dans le fichier d'entrée : '|' ($7C)
    [Erreur] Unit3.pas(73): Caractère incorrect dans le fichier d'entrée : '|' ($7C)
    [Erreur] Unit3.pas(74): Opérateur ou point-virgule manquant
    [Erreur] Unit3.pas(74): Caractère incorrect dans le fichier d'entrée : '|' ($7C)
    [Erreur] Unit3.pas(75): Opérateur ou point-virgule manquant
    [Erreur] Unit3.pas(75): Caractère incorrect dans le fichier d'entrée : '|' ($7C)
    [Erreur] Unit3.pas(75): Caractère incorrect dans le fichier d'entrée : '|' ($7C)
    [Erreur] Unit3.pas(76): Opérateur ou point-virgule manquant
    [Erreur] Unit3.pas(76): Caractère incorrect dans le fichier d'entrée : '|' ($7C)
    [Erreur] Unit3.pas(76): Caractère incorrect dans le fichier d'entrée : '|' ($7C)
    [Erreur] Unit3.pas(76): Instruction attendue, mais expression de type 'String' trouvée
    [Erreur fatale] ficheeval.dpr(7): Impossible de compiler l'unité utilisée 'Unit3.pas'

    Merci de votre attention

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 176
    Points : 123
    Points
    123
    Par défaut
    Je suis loin d'être un spécialiste en Delphi, mais il me semble que la concaténation ne peut s'effectuer que par le signe +
    Exemple:
    donne:='insert into ops$asy.vio_mvt '+'(cmp_cod,vio_chassis)';
    Ce qui est simple et évident pour soi-même ne l'est pas forcément pour les autres... et réciproquement !

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par alainvh
    Je suis loin d'être un spécialiste en Delphi, mais il me semble que la concaténation ne peut s'effectuer que par le signe +
    Exemple:
    donne:='insert into ops$asy.vio_mvt '+'(cmp_cod,vio_chassis)';

    je me suis rendu compte tout de suite après avoir envoyé le message.

    Merci mais j'ai autre soucis de quote maintenant dur dur la programmation non !!!

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 176
    Points : 123
    Points
    123
    Par défaut
    Avec les quote , il y a une astuce pour les apostrophes : double-quote
    Exemples:

    nom:='voici l''hiver' (avec 2 quotes derrière le l) pour affecter à la variable nom l'expression voici l'hiver
    Ce qui est simple et évident pour soi-même ne l'est pas forcément pour les autres... et réciproquement !

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 47
    Points : 23
    Points
    23
    Par défaut Erreur : Operateur ou point-virgule manquant
    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
    procedure Tmoduledata.OracleDataSet1AfterDelete(DataSet: TDataSet);
    var donne:string;
    begin
         ShortDateFormat:='dd/mm/aaaa hh:nn:ss';
         donne:='insert into ops$asy.vio_mvt '+
           ' (cmp_cod,vio_chassis,vio_mvt_ope,vio_year,vio_numdos,vio_mvt_type,vio_mvt_date,vio_mvt_oper) values '+
           '( '''+OracleDataSet1.FieldByName('cmp_cod').AsString+''','''+
            OracleDataSet1.FieldByName('vio_chassis').AsString+''',''D'','''+
            OracleDataSet1.FieldByName('vio_year').AsString+''','''+
            OracleDataSet1.FieldByName('vio_numdos').AsString+''',''Suppression'','+
            ''ToDate'('''+DatetimeToStr(now)+''',''DD/MM/YYYY HH24:mm:ss''),''''')';
     
            oraclequery1.SQL.Text:=donne;
            oraclequery1.Execute;
     
    end;
    Mon erreur est localisé au niveau de la ligne Todate

    Operateur ou point-virgule manquant
    Instruction attendue, mais expression de type 'String' trouvée

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 176
    Points : 123
    Points
    123
    Par défaut
    Envoie-moi le texte exact que tu veux passer dans ta variable donne (sans écrire les quote que demande Delphi)
    Ce qui est simple et évident pour soi-même ne l'est pas forcément pour les autres... et réciproquement !

  7. #7
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par alainvh
    Envoie-moi le texte exact que tu veux passer dans ta variable donne (sans écrire les quote que demande Delphi)

    Voici le texte brut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    donne:= 'insert into ops$asy.vio_mvt (cmp_cod,vio_chassis,vio_mvt_ope,vio_year,vio_numdos,vio_mvt_type,vio_mvt_date,vio_mvt_oper) 
            values (OracleDataSet1.FieldByName('cmp_cod').AsString, OracleDataSet1.FieldByName('vio_chassis').AsString, 'D',
            OracleDataSet1.FieldByName('vio_year').AsString, OracleDataSet1.FieldByName('vio_numdos').AsString ,'Suppression',
            ToDate(DatetimeToStr(now), DD/MM/YYYY HH24:mm:ss),'')';
    merci pour le coup de main

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 044
    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 044
    Points : 40 962
    Points
    40 962
    Billets dans le blog
    62
    Par défaut
    qu'est ce que c'est ce todate ?

    ce serait pas plutôt formatdatetime('mm/dd/yyyy hh:mm:ss',now) ?
    un petit cast ne serait pas mal non plus
    CAST('+Quotedstr(formatdatetime('mm/dd/yyyy hh:mm:ss',now))+' AS DATE)
    enfin je suis pas ORACLE MAIS FIREBIRD
    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

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 176
    Points : 123
    Points
    123
    Par défaut
    Voici ma traduction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    donne:='insert into ops$asy.vio_mvt (cmp_cod,vio_chassis,vio_mvt_ope,vio_year,vio_numdos,vio_mvt_type,vio_mvt_date,vio_mvt_oper) 
            values (OracleDataSet1.FieldByName('+''+'cmp_cod'+''+').AsString, OracleDataSet1.FieldByName('+''+'vio_chassis'+''+').AsString, '+''+'D'+''+',
          OracleDataSet1.FieldByName('+''+'vio_year'+''+').AsString, OracleDataSet1.FieldByName('+''+'vio_numdos'+''+'.AsString ,'+''+'Suppression'+''+
          ', ToDate(DatetimeToStr(now), DD/MM/YYYY HH24:mm:ss),'+''+''+')';
    Je me suis contenté de remplacer chacune des quotes de ton expression par +''+ (sauf la toute première et la toute dernière quotes)
    Ce qui est simple et évident pour soi-même ne l'est pas forcément pour les autres... et réciproquement !

Discussions similaires

  1. erreur d'ecriture dans un fichier
    Par fjp dans le forum C++Builder
    Réponses: 4
    Dernier message: 03/07/2005, 11h31
  2. Erreur compilation DLL dans Eelphi 6
    Par jakouz dans le forum Langage
    Réponses: 2
    Dernier message: 25/05/2005, 16h38
  3. [JSP]Erreur de syntaxe dans un tag <option select
    Par logica dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 03/05/2005, 14h33
  4. Erreur type interdit dans __property
    Par Neilos dans le forum C++Builder
    Réponses: 4
    Dernier message: 11/01/2005, 21h45
  5. [Servlet][Compilation] Erreur de compil dans code servlet
    Par gandalf_le_blanc dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 13/05/2004, 10h17

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