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 :

Déclaration de constante 'énervante'


Sujet :

Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Programmeur
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Programmeur
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Points : 46
    Points
    46
    Par défaut Déclaration de constante 'énervante'
    Bonjour,

    j'ai une requête de création de table traduite automatiquement d'une base MySQL vers une base SQLite, donc une constante 'un peu' longue. Comment peut-on la déclarer dans le code Delphi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE "users"( "id" NVARCHAR(20)  UNIQUE  NOT NULL , "nom" NVARCHAR(30), "prenom" NVARCHAR(30), "abrev" NVARCHAR(5), "droits" NVARCHAR(3), "login" NVARCHAR(30), "passwd" NVARCHAR(30), "stamp" NVARCHAR(17)  UNIQUE  );
    CREATE INDEX keynom ON "users" ( "nom" );
    CREATE INDEX keyprenom ON "users" ( "prenom" );
    CREATE UNIQUE INDEX "uninom" ON "users" ( "nom","prenom" );
    CREATE UNIQUE INDEX "unilogin" ON "users" ( "login","passwd" );
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const
      csCREATEusers : string = 'CREATE TABLE "users" [...]';
    ne passe pas [Chaîne trop longue]
    Découper la chaîne en plusieurs morceaux re-concaténés dans une var est une solution si on veut : Découper une chaîne pour la rassembler ensuite est intellectuellement 'énervant'.

    C'est une limite de Delphi ou une des nombreuses miennes ?

    Merci. Zac

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Et comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    const
      csCREATEusers : string =
        'CREATE TABLE "users" [...]' +
        '[...]' +
        '[...]';
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Je vois 2 solutions:

    1) La classe TStringList et sa propriété Text


    2) Faire un tableau de wchar_t ou char (<- *) et utiliser l'api pour faire des copies avec ajout de valeurs de variables si nécessaire.
    En C/ C++, c'est possible. Par contre je ne sais pas si cela est possible en Delphi


    * Je pense d'ailleurs, mais peut-être à tord, que SQLite demande un tableau/ chaîne de caractères.

  4. #4
    Membre du Club
    Homme Profil pro
    Programmeur
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Programmeur
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Points : 46
    Points
    46
    Par défaut
    Bonjour,
    Merci pour vos réponses.

    Foetus, la vraie déclaration (ie manuelle) sera en réalité plus proche de
    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
    CREATE TABLE IF NOT EXISTS [users] (
      [usID] CHAR(20) NOT NULL, 
      [usNOM] VARCHAR(30), 
      [usPRENOM] VARCHAR(30), 
      [usABREV] VARCHAR(5), 
      [usDROITS] CHAR(3), 
      [usLOGIN] VARCHAR(30), 
      [usPASSWORD] VARCHAR(30), 
      [xxCREAT] CHAR(17), 
      [xxUSER] VARCHAR(20), 
      [xxPOSTE] VARCHAR(20), 
      [xxSTAMP] CHAR(17), 
      CONSTRAINT [] PRIMARY KEY ([usID]));
    CREATE INDEX IF NOT EXISTS [kPRENOM] ON [users] ([usPRENOM]);
    CREATE UNIQUE INDEX IF NOT EXISTS [uNOM] ON [users] ([usNOM], [usPRENOM]);
    CREATE UNIQUE INDEX IF NOT EXISTS [uLOGIN] ON [users] ([usLOGIN], [usPASSWORD]);
    Ma 'codification' est peut-être un peu inhabituelle et je dois vérifier un vague 'souvenir' sur le traitement des clés composites.
    Si j'ai une clé sur (A,B,C) alors une recherche SELECT * WHERE A='' ou SELECT * WHERE A='' AND B='' utilise la clé. Mais si ma requête porte sur la droite des clés déclarées SELECT * WHERE B='' AND C='' , je crois me souvenir que la clé composite ne sert à rien et qu'il faut alors déclarer une clé (B, C) en plus.

    Roland, tu as raison : je pensais qu'on ne pouvait pas utiliser un + dans une const : puisque c'est une constante, on n'effectue pas de 'calculs' , enfin c'est comme cela dans d'autres langages. Mais l'usage de '+' ne me déclare aucune erreur => adopté !

    Merci à tous les deux. Zac.

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Des requêtes très longues, je les stockes dans un fichier SQL que je lie via un fichier RC et que j'utilise via un TResourceStream
    En particulier pour les CREATE
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Membre du Club
    Homme Profil pro
    Programmeur
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Programmeur
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Des requêtes très longues, je les stockes dans un fichier SQL que je lie via un fichier RC et que j'utilise via un TResourceStream
    En particulier pour les CREATE
    Bonjour,

    intéressant comme approche. Je stocke déjà plein de choses dans mes ressources (son, icône,...) mais jamais je n'ai pensé à stocker des requêtes.

    Merci pour le conseil. Zac.

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

Discussions similaires

  1. déclaration de constantes dans les packages
    Par micamel dans le forum PL/SQL
    Réponses: 6
    Dernier message: 02/03/2010, 17h15
  2. [2003] Déclaration de constante pour tout le classeur
    Par rtg57 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/01/2009, 17h09
  3. [String] Déclaration de constantes
    Par bulbo dans le forum Langage
    Réponses: 10
    Dernier message: 22/07/2008, 17h19
  4. déclaration de constante
    Par DiverSIG dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/06/2007, 08h07
  5. Déclaration de constantes
    Par gilv57 dans le forum C
    Réponses: 2
    Dernier message: 13/12/2006, 21h35

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