Précédent   Forum des professionnels en informatique > Autres langages > Pascal > Lazarus
Lazarus Forum d'entraide sur Lazarus, l'EDI RAD multiplateforme basé sur Free Pascal
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/02/2012, 15h27   #1
Membre expérimenté
 
Inscription : avril 2002
Messages : 424
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 424
Points : 536
Points : 536
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
Type de fichier : jpg captecran1.jpg (185,8 Ko, 13 affichages)
__________________
"Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
richard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2012, 19h12   #2
Membre chevronné
 
Philippe
Inscription : avril 2002
Messages : 456
Détails du profil
Informations personnelles :
Nom : Philippe
Localisation : France

Informations forums :
Inscription : avril 2002
Messages : 456
Points : 688
Points : 688
Envoyer un message via ICQ à Ph. B.
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 :
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.
Ph. B. est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/02/2012, 21h02   #3
Membre expérimenté
 
Inscription : avril 2002
Messages : 424
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 424
Points : 536
Points : 536
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 ?
__________________
"Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
richard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2012, 08h43   #4
Membre confirmé
 
Développeur informatique
Inscription : janvier 2010
Messages : 185
Détails du profil
Informations personnelles :
Âge : 54

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2010
Messages : 185
Points : 233
Points : 233
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.
__________________
Cordialement,
Tintinux

Initiateur de Gestinux, une comptabilité gestion open-source, pour Linux, Windows et Mac OS.
Elle est en cours de développement, avec Lazarus. Vous pouvez peut-être aider à la tester, la traduire et même à la développer.
tintinux est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/02/2012, 23h14   #5
Membre expérimenté
 
Inscription : avril 2002
Messages : 424
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 424
Points : 536
Points : 536
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.
__________________
"Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
richard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2012, 23h18   #6
Membre expérimenté
 
Inscription : avril 2002
Messages : 424
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 424
Points : 536
Points : 536
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).
__________________
"Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
richard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2012, 00h52   #7
Membre expérimenté
 
Inscription : avril 2002
Messages : 424
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 424
Points : 536
Points : 536
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 ...
__________________
"Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
richard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2012, 13h35   #8
Membre confirmé
 
Développeur informatique
Inscription : janvier 2010
Messages : 185
Détails du profil
Informations personnelles :
Âge : 54

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2010
Messages : 185
Points : 233
Points : 233
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 ???
__________________
Cordialement,
Tintinux

Initiateur de Gestinux, une comptabilité gestion open-source, pour Linux, Windows et Mac OS.
Elle est en cours de développement, avec Lazarus. Vous pouvez peut-être aider à la tester, la traduire et même à la développer.
tintinux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2012, 14h13   #9
Membre expérimenté
 
Inscription : avril 2002
Messages : 424
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 424
Points : 536
Points : 536
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).

Citation:
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 ...)
__________________
"Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
richard est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h11.


 
 
 
 
Partenaires

Hébergement Web