Lazare: DBGrid montrant “(MEMO)” comme la valeur des champs de type chaîne dans SQLite 3
Je suis en train d'écrire une simple SQLite 3 application à l'aide de Lazare et de l'SQLdb composants.
J'ai réussi à connecter à la base de données et remplir une TDBGrid
. Le problème est que toutes les colonnes qui sont des champs de texte d'affichage de la valeur "(MEMO)" plutôt que sur la chaîne dans la DB.
- changement des types de colonnes dans la base de données de bugs, voir ma réponse
Vous devez vous connecter pour publier un commentaire.
Comme dit sur IRC, vous avez probablement besoin d'ajouter les champs de votre requête pour la forme, (de sorte que le "champ" composants sont générés pour eux) et de mettre en œuvre l'
TMemoField.GetText
événement.Voir si l'entrée "champs" dans l'inspecteur d'objet apporte un éditeur de générer les composants (c'est Zeos iirc).
Champs mémo ne peuvent pas être affichés dans le
TDBGrid
. AjouterTDBMemo
de la forme et de la connecter à la mêmeTDataSource
. Vous verrez le texte de votre mémo dans ce cas.J'ai oublié la source de cela, mais c'est ce que je fais avec les champs mémo tdbgrid.
bleuâtre est juste sur la gettext événement, c'est la façon de mettre en œuvre dans le code:
Créer une classe appelée MemoDifier:
À la section mise en œuvre de votre code, mettez ceci:
Puis cliquez sur le contrôle tdbgrid dans votre formulaire et à la Inspecteur d'Objet(IDE Lazarus), cliquez sur l'onglet Événements, faites défiler ci-dessous pour trouver les OnPrepareCanvas événement. Double-cliquez dessus pour générer le code. Ensuite, modifier le code pour l'adapter à vos besoins tels que le nom de votre contrôle tdbgrid:
La variable MemoFieldReveal points à la classe MemoDifier. N'oubliez pas de modifier l'index (les Éléments de[x]) pour pointer vers votre numéro d'index de l'tdbgrid articles/champs qui montre l' (MEMO) le texte.
J'ai le même dans MySQL et Tgrid donc j'espère que la réponse est la même que c'est assez simple 🙂
Dire si s est le champ de la cause du problème alors au Lieu d'écrire
écrire
Dans un très vieux sujet du forum, j'ai trouvé une solution qui a fonctionné pour moi (allemand/anglais):
SqLite, Zeos und keine Textanzeige, im DbGrid steht (MEMO) - Zeoslib Portail
Si vous modifiez les types de champs dans la base de données SQLite à partir de
text
envarchar
, le texte s'affiche comme prévu dans leTDBGrid
.changement de SQLite colonnes
Comme vous le savez peut-être, SQLite ne vous permet pas de modifier le champ types de colonnes. Donc, si vous avez déjà de précieuses données stockées dans la base de données, utilisez les étapes décrites dans ce tutoriel
SQLite ALTER TABLE & Comment Surmonter Ses Limites
Ici est une autre option
sqlite3 your.db .dump >your.sql
)s/\<text\>/varchar/
)sqlite3 your2.db <your.sql
)Cet article donne une solution: Affichage et modification des champs MÉMO en Delphi TDBGrid.
Ici, je résume ce que vous avez à faire:
OnGetText = MyDataSetMyFieldGetText
à laTMemoField
(ici nomméMyField
) appartenant à un ensemble de données (par exemple unTTable
, ici nomméMyDataSet
)dans le .pas >
interface
>type
> à l'intérieur de votre définition du formulaire, ajoutezdans le .pas >
implementation
> ajouter cette méthode