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 :

TDBGRID et Base SQLITE [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 475
    Points : 779
    Points
    779
    Par défaut TDBGRID et Base SQLITE
    Bonjour,

    Je suis sous Windows XP, lazarus 0.9.28.2 et Sqlite version courante. j'ai importé un fichier CSV dans SQLITE avec Sqlite Administrator 0.8.3.2. dans cette base j'ai un champ <NOMPRENOM> en format TEXT, un champ <DATENAISSANCE> format DATE, un champ <RESPLEGAL> que j'ai mis en NVARCHAR pour voir si des fois ça résoudrait mon pb (mais non !)


    Comme vous pouvez le voir sur la capture d'écran en PJ, dans le premier champ j'ai l'affichage "(MEMO)" au lieu des valeurs, dans le 2ème champ (type 'DATE') je n'ai rien alors que sous Sqlite administrator j'ai tout.
    J'ai essayé avec tous les types possibles de valeurs Sqlite, rien n'y fait, même VACHAR a un comportement étrange. Qu'st-ce que j'ai loupé ? Je précise que c'est la 1ère fois que j'utilise Sqlite avec Lazarus puisque jusqu'à maintenant j'utilisais le composant TDBF qui me donnait entièrement satisfaction.

    Je pense que je vais peut-être continuer même si cette techno est très obsolète car je n'y comprends rien avec Sqlite...

    Si vous avez une idée...

    Merci d'avance.
    Images attachées Images attachées  

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 785
    Points : 5 916
    Points
    5 916
    Par défaut
    Bonjour,

    Tout simplement , la raison y est donnée...
    Date et DateTime sous Lazarus

    Ensuite en conservant ces composant, on peut jouer avec la propriété SQL du composant :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select 
      NOMPRENOM,
      cast(DATENAISSANCE as varchar(10)) as DATENAISSANCE,
      RESPLEGAL
    from MA_TABLE
    mais il va falloir aussi gérer les insert et update... sinon la table contiendra des dates sous forme de chaines, de nombres, de dates, bref le foutoir.

    Comme le dit la FAQ, il vaut mieux utiliser les composants open source ZEOS.
    --
    Philippe.

  3. #3
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 475
    Points : 779
    Points
    779
    Par défaut
    Merci pour cette réponse qui éclaircit le problème du type 'DATE' mais toujours pas celui de l'affichage d'un champ 'TEXT' en "(MEMO)' comme indiqué par la capture d'écran.
    C'est là mon principal problème bien que celui du champ 'DATE' était subsidiaire.
    J'ai lu la effectivement mais je n'ai rien trouvé sur ce sujet.

    Je préfèrerais utiliser les composants natifs plutôt que ZEOS mais je n'en fais une question de principe... sans compter que sous ZEOSLIB le problème apparaît également si j'en crois ce forum :
    http://zeos.firmos.at/viewtopic.php?t=1377

    Bref, est-ce que quelqu'un a une idée ?

  4. #4
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Points : 1 100
    Points
    1 100
    Par défaut
    Bonjour

    Eh bien la solution est indiquée dans le fil lié à celui que tu cites dans le forum Zeos...

    Le type TEXT est prévu pour stocker une très grande quantité de caractères, et il me parait normal que, par défaut, une dbgrid n'en affiche pas la totalité, ni même le début (comme SqlLite Admin) qui n'est généralement pas très significatif.

    S'il y a seulement une chaîne courte, telle que nom+prénom à stocker, les types varchar sont bien plus indiqués. S'il n'est pas possible de changer ce type, alors on peut bricoler avec On GetText pour afficher le début seulement.

  5. #5
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 475
    Points : 779
    Points
    779
    Par défaut
    Citation Envoyé par tintinux Voir le message
    Bonjour

    Eh bien la solution est indiquée dans le fil lié à celui que tu cites dans le forum Zeos...
    Merci beaucoup ... simplement je n'utilise pas les composants ZEOS mais les composants natifs comme je l'ai dit plus haut. Donc solution inopérante (j'avais lu le fil).

    Citation Envoyé par tintinux Voir le message
    Le type TEXT est prévu pour stocker une très grande quantité de caractères, et il me parait normal que, par défaut, une dbgrid n'en affiche pas la totalité, ni même le début (comme SqlLite Admin) qui n'est généralement pas très significatif.
    Cela n'est pas mon problème qui est exposé dans la copie d'écran attachée. Je n'ai rien d'autre que "(MEMO)" dans chaque cellule.

    Citation Envoyé par tintinux Voir le message
    S'il y a seulement une chaîne courte, telle que nom+prénom à stocker, les types varchar sont bien plus indiqués. S'il n'est pas possible de changer ce type, alors on peut bricoler avec On GetText pour afficher le début seulement.
    J'avais déjà essayé mais cela ne donnait rien.

    En fait j'ai résolu mon pb en utilsant à la fois des 'VARCHAR' et en exportant la base SQLite comme "format SQL" ce qui, je suppose, convertit les types dynamiques en types statiques SQL. Toujours est-il qu'ainsi ça fonctionne.

  6. #6
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 475
    Points : 779
    Points
    779
    Par défaut
    J'ai désormais un autre problème : dans mon TDBGRID quand je compile mon projet, je peux naviguer dans toutes les colonnes d'une ligne sans pb mais quand je veux changer de ligne avec la touche fléchée ou la souris, j'ai droit à un runtime error 202.

    Quelqu'un a-t-il déjà rencontré ce pb ?


    (PS : inutile de me préciser que cette erreur est un débordement de pile, je le sais déjà, ce que je voudrais savoir c'est pourquoi cette erreur se produit dans les conditions décrites).

  7. #7
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 475
    Points : 779
    Points
    779
    Par défaut
    Je me réponds à moi-même : c'était une erreur de code. J'avais fixé la propriété Mastersource du composant Sqlite3Dataset1 à Dataset1. Il a suffi que j'enlève cette valeur pour que tout fonctionne bien.

    Je suppose que cela devait produire une sorte de récurrence ce qui faisait déborder la pile.

    Si cela peut servir à d'autres néophytes en base de données SQL ...

  8. #8
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Points : 1 100
    Points
    1 100
    Par défaut
    Citation Envoyé par Richard
    Merci beaucoup ... simplement je n'utilise pas les composants ZEOS
    Tu n'as pas compris... Même si elle est indiquée dans le forum Zeos, les solutions proposées fonctionnent avec tout type de connection, et tous les SGBD.

    Citation Envoyé par richard
    Je n'ai rien d'autre que "(MEMO)" dans chaque cellule
    Oui, un DbGrid n'affiche pas, par défaut le contenu d'un Memo, mais seulement la chaine Memo à la place. Là encore ce n'est pas propre à Zeos ni à SqlLite.

    Citation Envoyé par Richard
    "format SQL" ... , je suppose, convertit les types dynamiques en types statiques SQL
    Quid ???

  9. #9
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 475
    Points : 779
    Points
    779
    Par défaut
    Citation Envoyé par tintinux Voir le message
    Quid ???

    Je faisais allusion au format interne des données dans SQLite qui est différent de celui des autres SGBD puisque SQLite utilise le typage dynamique. Le reste est purement une hypothèse personnelle mais la conversion en "Format SQL" sous SQLite est peut-être une conversion en typage statique (mais peut-être pas).

    Datatypes In SQLite Version 3

    Most SQL database engines (every SQL database engine other than SQLite, as far as we know) uses static, rigid typing. With static typing, the datatype of a value is determined by its container - the particular column in which the value is stored.

    SQLite uses a more general dynamic type system. In SQLite, the datatype of a value is associated with the value itself, not with its container. The dynamic type system of SQLite is backwards compatible with the more common static type systems of other database engines in the sense that SQL statement that work on statically typed databases should work the same way in SQLite. However, the dynamic typing in SQLite allows it to do things which are not possible in traditional rigidly typed databases.
    Merci pour le reste, cela améliore ma culture très pauvre en base de données, je n'utilisais jusqu'à présent que le composant TDBF pour ce genre de programme.
    J'ai résolu mon problème (jusqu'au suivant ...)

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

Discussions similaires

  1. Outils graphique sous windows pour gérer les bases SQLite
    Par Louis Griffont dans le forum SQLite
    Réponses: 8
    Dernier message: 21/04/2008, 14h09
  2. [PDO] ouverture d'une base SQLite
    Par amy0o0 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/09/2007, 15h08
  3. connexion a une base sqlite via php
    Par guiguitte dans le forum SQLite
    Réponses: 4
    Dernier message: 11/07/2007, 11h31
  4. Compresser/Compacter une base Sqlite
    Par Gold.strike dans le forum SQLite
    Réponses: 1
    Dernier message: 18/07/2006, 10h12

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