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 :

Help Delphi & oracle


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Points : 10
    Points
    10
    Par défaut Help Delphi & oracle
    slt a tous

    voila j'ai un blem

    je veux savoir comment inserer le caractere ' / ' dans un attribut dans une table sous oracle


    je vous explique

    j'ai 2 edit sous delphi
    edit1.text=> par ex: messi
    edit2.text=> 89

    et je veux inserer(ou mettre a jour meme chose) ça dans un attribut d'une table "messi/89"

    j'essayé ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'update perso set reste1='+nb+',date_deb='+edit1.Text+'/'+edit2.Text+' where matricule='''+edit6.Text+''''
    mais la il me fait l'operation du devision

    alors une idée n'hésitez pas !!!

    et merci bcp

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    De quel type est le champ date_deb ? Si c'est TIMESTAMP comme son nom peut le faire penser, cela expliquerait l'échec lors de la division.

    @+ Claudius

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    non dat_deb c varchar2(10)

    et je veux mettre dedans par exemple '10/09/2008' en tout 10car

    merci a toi

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    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 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    ça manque de QuotedStr (ou de Double Quotes ) tout ça
    bizarre surtout qu'il y en a pour la clause Where
    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

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Tu as oublié d'ajouter des quotes autour de la "date".

    Perso j'utilise la fonction format dans ce genre de cas ou une requête paramétrée, pour éviter de me mélanger les crayons.

    Avec format cela donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    const
      S = 'update perso set reste1 = %d, date_deb = ''%s/%s'' where matricule = ''%s'';';
    begin
      //...
      SQL.Text := Format(S, [nb, Edit1.Text, Edit2.Text, Edit6.Text]);
      // ...
    end;
    @+ Claudius

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    je vais testé ta méthode

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    juste une remarque nb est de type string

    alors j'ai fait comme ça comme tu m'a dit mais j'ai cette erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Ora-00911:Caractere non valide
    voila le code de la procédure peut etre ya une erreur quelque part que j'ai pas remarqué

    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
     
     
    procedure TForm2.Button2Click(Sender: TObject);
    var
      nb: string;
    const
      S = 'update perso set reste1 = ''%s'', date_deb = ''%s/%s'' where matricule = ''%s'';';
    begin
    if strtoint(combobox1.text) > strtoint(memo1.text) then
    begin
    application.MessageBox('nombre non autorisé pour cet exercice','Erreur',MB_ICONINFORMATION) ;
    end
    else
    begin    //debut else
    nb:=inttostr(strtoint(memo1.text)-  strtoint(combobox1.text)); //calcul de nbre congé restant
    //requette
    form1.adoquery1.Active:=false;
    form1.adoquery1.SQL.Clear;
    //exercice 1 update reste1
    if edit3.Text=ex1 then
    begin
     
     
    form1.adoquery1.SQL.Text:=Format(S, [nb, Edit1.Text, Edit8.Text, Edit9.Text]);
    form1.adoquery1.ExecSQL;
    tEdit1.Text:='';
    edit8.text:='';
    edit9.text:='';
    end;
    .////
    end.

  8. #8
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Perso j'utilise la fonction format dans ce genre de cas ou une requête paramétrée, pour éviter de me mélanger les crayons.

    Avec format cela donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    const
      S = 'update perso set reste1 = %d, date_deb = ''%s/%s'' where matricule = ''%s'';';
    begin
      //...
      SQL.Text := Format(S, [nb, Edit1.Text, Edit2.Text, Edit6.Text]);
      // ...
    end;
    @+ Claudius
    J'utilise aussi le même principe. Mais attention, écrit de cette façon, tu es vulnérable aux injections SQL (ou plus simplement, la requête risque de planter en fonction de ce que l'utilisateur saisi dans les Edit).

    Il faudrait plutôt le faire de la façon suivante (en tenant compte du fait que nb est un string) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    const
      S = 'update perso set reste1 = %s, date_deb = %s where matricule = %s;';
    begin
      //...
      SQL.Text := Format(S, [nb, QuotedStr(Edit1.Text + '/' + Edit2.Text), QuotedStr(Edit6.Text)]);
      // ...
    end;
    Toujours dans le même esprit, puisque nb est une chaîne, il faut être sûr que nb contient réellement un nombre et uniquement un nombre (bon, puisque c'est le résultat d'un IntToStr, il n'y a pas de problèmes).

  9. #9
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Ne connaissant pas Oracle, je me demandais si le slash (/) n'était pas un caractère réservé comme le point-virgule (;) par exemple.

    Ce qui mettrait le bazar lors du parsing de l'instruction SQL.

  10. #10
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Ne connaissant pas Oracle, je me demandais si le slash (/) n'était pas un caractère réservé comme le point-virgule (;) par exemple.

    Ce qui mettrait le bazar lors du parsing de l'instruction SQL.
    quand j'ajoute 10/09/2008 avec le dbnavigator de delphi

    oracle ne signal rien et il l'accepte

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Franck SORIANO Voir le message
    J'utilise aussi le même principe. Mais attention, écrit de cette façon, tu es vulnérable aux injections SQL (ou plus simplement, la requête risque de planter en fonction de ce que l'utilisateur saisi dans les Edit).

    Il faudrait plutôt le faire de la façon suivante (en tenant compte du fait que nb est un string) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    const
      S = 'update perso set reste1 = %s, date_deb = %s where matricule = %s;';
    begin
      //...
      SQL.Text := Format(S, [nb, QuotedStr(Edit1.Text + '/' + Edit2.Text), QuotedStr(Edit6.Text)]);
      // ...
    end;
    Toujours dans le même esprit, puisque nb est une chaîne, il faut être sûr que nb contient réellement un nombre et uniquement un nombre (bon, puisque c'est le résultat d'un IntToStr, il n'y a pas de problèmes).
    ça marche pas

    il me dit carcatere invalide


    est qu'il ya une autre solution pour inserer dd/mm/yy dans ma variable date_deb !!!

  12. #12
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    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 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    pourquoi ne pas passer par des paramètres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Query.SQL.Text := 'update perso set reste1 =:r, date_deb =:d where matricule =:m';
    Query.parambyname('r').asInteger:=nb;
    Query.parambyname('d').asDate:=Edit1.Text + '/' + Edit2.Text; // là j'ai pas trop suivi
    Query.parambyname('m').asString:=Edit6.text;
    Query.execSQL;
    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

  13. #13
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    'update perso set reste1='+nb+',date_deb='+QuotedStr(edit1.Text+'/'+edit2.Text)+' where matricule='+QuotedStr(edit6.Text);
    devrait suffire.

    le / n'est pas un caractère spécial, par contre le & oui, de même pour les sauts de ligne (0D0A) il faut faire attention pour ne pas avoir de problème à la relecture.

    Je n'ai pas rencontré de problème d'insertion pour le caractère / (Oracle 9i).
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  14. #14
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Linkin Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    'update perso set reste1='+nb+',date_deb='+QuotedStr(edit1.Text+'/'+edit2.Text)+' where matricule='+QuotedStr(edit6.Text);
    devrait suffire.

    le / n'est pas un caractère spécial, par contre le & oui, de même pour les sauts de ligne (0D0A) il faut faire attention pour ne pas avoir de problème à la relecture.

    Je n'ai pas rencontré de problème d'insertion pour le caractère / (Oracle 9i).
    enfin la bonne

    merci bcp a toi et tous les membres qui ont penser a m'aider

    gracias

    Résolu

  15. #15
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Je pense que la solution de Franck SORIANO marche aussi, mais en enlevant le point-virgule de la requête.

    Sa solution est presque la même (et elle me paraît plus claire).
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

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

Discussions similaires

  1. Version française du help delphi
    Par Bourak dans le forum EDI
    Réponses: 4
    Dernier message: 22/11/2005, 15h29
  2. delphi et oracle
    Par partfranc dans le forum Bases de données
    Réponses: 1
    Dernier message: 30/05/2005, 14h28
  3. [Delphi 5][Oracle]Verrouillage d'un dataset
    Par psycomel dans le forum Bases de données
    Réponses: 8
    Dernier message: 09/05/2005, 14h44
  4. [Delphi 2005/Oracle/ADO]Taille de champ incorrecte
    Par Frank dans le forum Bases de données
    Réponses: 20
    Dernier message: 15/04/2005, 14h12
  5. Installation d'une appli en delphi, utilisant Oracle
    Par nilna972 dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/11/2003, 13h12

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