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

Lazarus Pascal Discussion :

Ecrire depuis une appli Lazarus dans une table Sqlite [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2008
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 389
    Points : 229
    Points
    229
    Par défaut Ecrire depuis une appli Lazarus dans une table Sqlite
    Bonjour,
    J'avance doucement avec lazarus et sqlite, je sais écrire en direct dans une table sqlite avec une instruction du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sqlite3Dataset.SQL:='INSERT INTO LIBELLE VALUES (4,"ABCDEFGHIJKLMN","ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMN","OUI");COMMIT';;
     
     Sqlite3Dataset.ExecSQL;
    mais si maintenant je veux remplacer les valeurs "ABC....." par des variables définies en String comment faire.
    Sous delphi 7 la formulation semble être de mettre : devant la variable mais cela ne marche pas avec lazarus.
    Alors quelle est la bonne écriture.
    Merci aux spécialistes de bien vouloir me répondre

  2. #2
    Membre expérimenté
    Avatar de chris37
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juillet 2007
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 378
    Points : 1 688
    Points
    1 688
    Par défaut
    Bonjour,

    Construis ta chaine a envoyer avec des variables que tu concatènes et utilise la fonction quotedstr pour les types chaines (a cause des quotes).

    @+

  3. #3
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2008
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 389
    Points : 229
    Points
    229
    Par défaut
    Salut Chris37,
    Je crois que nous nous sommes pas bien compris,
    ce que je cherche c'est au lieu de transmettre par la commande Sqlite3Dataset.SQL ....des valeurs issues d'une variable ou d'un composant edit chargé ailleurs dans l'appli.

  4. #4
    Membre expérimenté
    Avatar de chris37
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juillet 2007
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 378
    Points : 1 688
    Points
    1 688
    Par défaut
    Salut ET

    Deux méthodes:
    Si tu prends un TEdit, le contenu est bien dans Montedit1.text (une variable non ?)

    Donc tu as besoin de mettre des quotes en SQL pour une chaine donc :
    quotedstr(Montedit.text)

    Le tout concaténé avec le reste :
    Résultat pour ton exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sqlite3Dataset.SQL:=
    'INSERT INTO LIBELLE VALUES ('+
    mavarnum+
    ','+
    quotedstr(Montedit1.text)+
    ','+
    quotedstr(Montedit2.text)+
    ','+
    quotedstr(Montedit2.text)+
    ')';
    //Le commit n'a rien a faire ici, tu dois le gérer a part... c'est plus propre et le TDataset possède la fonction ApplyUpdate (Voir le tuto sur le wiki)

    Sinon
    Utilise des TdbEdit et gere avec les fonctions TDataset.edit TDataset.post et TDataset.ApplyUpdate
    Dans ce cas, tes champs sont directement en relation avec la structure de la table en question

    Tu la passe en edit ou append et ensuite tu post....
    Cela fonctionne au poil...


    Voilu

  5. #5
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2008
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 389
    Points : 229
    Points
    229
    Par défaut
    Salut Chris37,
    Merci pour la réponse mais comme je voyage ce WK je ferai l'essai à mon retour au début de la semaine prochaine et je donnerais les résultats.
    Merci et bon WK

  6. #6
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2008
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 389
    Points : 229
    Points
    229
    Par défaut
    Salut Chris37,
    De retour chez moi, j'ai fait les manipulations proposées et c'est presque parfait et oui, j'ai encore 2 problèmes :
    1) le premier c'est avec le début de l'entrée des valeurs si j'écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sqlite3Dataset.SQL:='INSERT INTO LIBELLE VALUES ('+mavarnum+','+quotedstr(Montedit1.text)+..........
    avec à la place de mavarnum le nom de ma variable :
    MKEY déclarée comme Integer j'ai une erreur de compilation, après bien des essais j'ai réussi à écrire dans ma table dans la colonne de la clé primaire en écrivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sqlite3Dataset.SQL:='INSERT INTO LIBELLE VALUES ('+IntToStr(MKEY)+','+quotedstr(MLIBELLE)+',......
    donc sauf erreur de ma part je transforme une valeur numérique en caractères, bien étrange pour une clé déclarée : INTEGER PRIMARY
    2) dans mon composant Sqlite3Dataset la propriété AutoIncrementKey est à True,
    comment modifier le début de la ligne ce commande ci-dessus pour laisser la valeur de la clé primaire s'incrémenter toute seule car si je ne mets pas de valeur j'ai encore une erreur indiquant qu'il manque une valeur.
    Il me faudra ensuite comprendre la gestion de cette clé primaire obligatoire et son usage par rapport à des index, c'est une autre histoire.
    Merci d'avance car je n'avance pas voite avec sqlite mais en tout cas je ne fait pas du sur place

  7. #7
    Membre expérimenté
    Avatar de chris37
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juillet 2007
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 378
    Points : 1 688
    Points
    1 688
    Par défaut
    Salut ET ,

    La variable Tedit.text étant de type Texte.....Il faut donc transtypé la création de ta chaine sql donc ce que tu as fais est correcte.

    Pour ton auto incrément dans ton insert : il faut mettre 0 comme valeur et SQLITE se débrouille comme un grand. (idem mysql, oracle,etc...)

    Par contre la notion d'auto incrément n'est peux être pas utile dans ton cas ! Quelle est la finalité de ton système ? As tu une analyse pour que je regarde cela stp...

    Bon courage,

  8. #8
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2008
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 389
    Points : 229
    Points
    229
    Par défaut
    Salut Chris37,
    je n'ai pas d'analyse pour mes essais, je cherche à comprendre comment lazarus et sqlite fonctionnent, mon objectif, nous en avons déjà parlé dans le post ayant pour titre :

    Création d'index multiples tables de type dBase

    Je n'ai pas besoin de l'auto-incrémentation de la clé pour mes tables sqlite, mais comme cette clé est obligatoire et unique je pensais que c'était une bonne solution.
    Dans ta dernière réponse je n'ai pas bien compris la nécessité du transtypage, par rapport à ton exemple :
    le terme utilisé mavarnum est-il de type Integer ou String.

    Autre question la commande sql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sqlite3Dataset.SQL:='INSERT INTO LIBELLE VALUES ('+mavarnum+','+quotedstr(Montedit1.text)+','+quotedstr(Montedit2.text)+','+quotedstr(Montedit3.text)+')';
    peut-elle être découpée afin de faciliter l'écriture et la visibilité, dans le cas, ou le nombre de MoneditX.text pour une table avec 10 champs, si oui avec quelle syntaxe
    Merci pour ton aide

  9. #9
    Membre expérimenté
    Avatar de chris37
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juillet 2007
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 378
    Points : 1 688
    Points
    1 688
    Par défaut
    Bonjour,

    Pour mavarnum, c'est un entier que tu converti bien sur en str, j'avais oublié de le préciser.

    Pour utiliser tes Tedit en utilisant un indice, regarde ici, il y a tout ce qu'il faut pour faire cela :

    Sinon, c'est toi qui décide lors de ton Create Table de gérer ou pas un champs auto incrémenté, ensuite tu crée les index avec la commande sql Create Index...

    Bonne journée,

  10. #10
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2008
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 389
    Points : 229
    Points
    229
    Par défaut
    Salut Chris37,
    Si j'ai bien compris la méthode que tu préconises, c'est d'écrire dans un tableau les différentes valeurs et ensuite de les envoyer à la commande SQL, ce qui éviteras des commandes à rallonges.
    Ai-je bien compris ?

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

Discussions similaires

  1. Comment utiliser une classe Java dans une appli PB ?
    Par bobychezA56 dans le forum Powerbuilder
    Réponses: 0
    Dernier message: 09/04/2008, 18h07
  2. Réponses: 3
    Dernier message: 01/03/2007, 21h26
  3. Réponses: 1
    Dernier message: 31/07/2006, 13h54
  4. Lancer une anim flash dans une appli Swing ?
    Par elitost dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 20/07/2006, 20h57

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