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 différence de type à l'insertion


Sujet :

Bases de données Delphi

  1. #1
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut Erreur de différence de type à l'insertion
    Bonjour

    Le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      RadicQuery.Sql.Clear;
      RadicQuery.Sql.Text := 'Insert Into "' + CurDir + 'Temp\TableRadicExpInd.Db" ' +
                             '(Radic, ExpInd) ' +
                             'Select Trim(Leading "0" from (SubString(Capakey from 7 for 4))) as Radic, ' +
                             'SubString(Capakey from 12 for 6) as ExpInd ' +
                             'From "' + CurDir + 'Temp\MergedCapa.Dbf"' +
                             'Where SubString(Capakey from 1 for 5) =  "' + CodeDiv + '" and ' +
                             'SubString(Capakey from 6 for 1) =  "' + Sect + '"';
      RadicQuery.Open;
    génère l'erreur «Différence de type dans une expression».

    Si j'exécute le «Select» sans «Insert into» pas de problème.
    Et pourtant, il apparait que la table de destination contient bien les champs de type String «Radic» de longueur 4 et «ExpInd» de longueur 6.

    Cela m'aiderait si quelqu'un pouvait me dire où se trouve mon erreur.

    Merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    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 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Radic et Expind du Select ne sont pas expressement de la bonne taille, utilise un CAST .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CAST(Trim(Leading "0" from (SubString(Capakey from 7 for 4))) AS CHAR(4) ) as Radic
     
    CAST(SubString(Capakey from 12 for 6) AS CHAR(6)) as Expind
    nota : Fait à "l'arrache" , a tester , je m'y perds dans les parentheses
    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. #3
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Je leur ai attribué la taille maximum.
    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
    procedure TMapForm.CreateTableRadicExpInd;
    Begin
     if FileExists(CurDir + 'Temp\TableRadicExpInd.Db') then
     begin
       DeleteFile(CurDir + 'Temp\TableRadicExpInd.Db');
       DeleteFile(CurDir + 'Temp\TableRadicExpInd.Val');
     end;
     with TableRadicExpInd do
     begin
       Active := False;
       TableType := ttParadox;
       TableName := CurDir + 'Temp\TableRadicExpInd.Db';
       with FieldDefs do
       begin
         Clear;
         Add('Radic', ftString, 4, True);
         Add('ExpInd', ftString, 6, True);
       end;
       CreateTable;
     end;
    end;
    J'avais déjà essayé la méthode "Cast" mais le mot donne un message d'erreur à l'exécution de la requête.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    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 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par defluc Voir le message
    Je leur ai attribué la taille maximum.
    J'avais déjà essayé la méthode "Cast" mais le mot donne un message d'erreur à l'exécution de la requête.
    le mot CAST c'est quelle BDD

    [Edit] après avoir "dormi dessus" puis-je te suggérer d'utiliser TBatchmove puisque à priori tu utilises BDE et que le Select fonctionne , quant au code pour effacer la table pourquoi ne pas faire DeleteTable plutot qu'effacer à la mano les fichiers DB et VAL

    non obstant , je confirme pour avoir fait un petit jeu d'essai approximatif

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO CAP2 (RADIC,EXPIND) 
    Select CAST(Trim(Leading "0" from (SubString(UneCLE from 7 for 4))) AS CHAR(4)) as Radic,
    CAST(SubString(UNECLE from 12 for 6) AS CHAR(6) )as ExpInd From CAP1
    les casts fonctionne correctement
    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
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    C'est une application que j'ai abandonnée un certain temps et selon mon souvenir, je faisais un delete des fichiers .Db et .Val parce qu'en cas de fermeture de l'application sur erreur, deletetable générait à son tour une erreur.

    Via l'outil module base de données de Delphi 4, le seul ajout de «As Char» provoque le message
    Utilisation incorrecte du mot clé
    dans l'expression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select (SubString(Capakey from 7 for 4)as Char(4)) as Radic,
    .
    A fortiori dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select CAST(Trim(Leading "0" from (SubString(Capakey from 7 for 4)as Char(4)) as Radic,

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    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 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par defluc Voir le message
    C'est une application que j'ai abandonnée un certain temps et selon mon souvenir, je faisais un delete des fichiers .Db et .Val parce qu'en cas de fermeture de l'application sur erreur, deletetable générait à son tour une erreur.
    interessant à savoir (j'ai jamais eu ce cas) je range cela dans un coin de mémoire .

    Pour le cast c'est bizarre car j'ai fait le test avec l'outil module base de données de D3

    nota : dans la première expression il manque la CAST , je pense que c'est une erreur de frappe
    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

Discussions similaires

  1. Réponses: 25
    Dernier message: 29/07/2010, 19h30
  2. [PHP MySQL] Erreur execution requête de type INSERT
    Par Pfeffer dans le forum Requêtes
    Réponses: 6
    Dernier message: 23/01/2006, 17h38
  3. Différence de type dans une expression (query)
    Par sondo dans le forum Bases de données
    Réponses: 1
    Dernier message: 29/11/2005, 01h09
  4. Erreur de conversion de type Null en String
    Par navis84 dans le forum Bases de données
    Réponses: 3
    Dernier message: 26/07/2005, 15h25
  5. "Différence de type dans une expression" Tquery
    Par Hakim dans le forum Bases de données
    Réponses: 3
    Dernier message: 20/04/2004, 00h22

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