Bonjour à tous,
Débutant sous Lazarus, je conçois actuellement une application gérant une base de données SQLite 3.x, avec les composants fournis avec Lazarus (version 0.9.24beta sous Ubuntu 8.04 (la version des dépôts officiels) et Windows XP , la version Linux étant couplée avec FPC 2.2 et la version Windows avec le FreePascal embarqué dans l'install
Ce que je souhaite faire est - à priori - simple, mais depuis de nombreux jours et recherches Google sur l'aide Delphi mais aussi Lazarus, je n'ai pas réussi à trouver de solution.
Dans ma base je dispose de deux tables : "Personnage" et "Clan". Dans la table personnage, un champ "perso_clan" (clé étrangère) vient faire référence à la clé primaire "clan_id" de la table clan.
Dans mon TDBGrid, je souhaiterais afficher le nom du personnage et le nom du clan. Problème : je n'arrive à afficher que la clé étrangère (un numéro donc).
J'ai vu que les Tsqlite3DataSet disposaient de deux propriétés "MasterSource" (affecté sur un DataSource ayant lui même un DataSet pointant vers la table des clans), et "MasterFields", qui n'ont visiblement pas eu d'impact.
J'ai aussi essayé de paramétrer la dernière colonne du TDBGrid de la manière suivante :
Dans le code suivant, self.dataSet fait référence à ma table "Personnages" qui vient donc s'alimenter sur la table "Clan" (clansDataset).
J'ai également essayé d'appliquer ces propriétés directement sur le DataSet, en agissant sur le champ correspondant ou même en en ajoutant un nouveau, avec le même résultat. Peut-être y a-t-il un autre moyen ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 with (myGrid.Columns[3] as TColumn).Field do begin FieldName := 'perso_clan'; FieldKind := fkLookup; KeyFields := 'perso_clan'; Name := self.dataSet.Name + FieldName; LookupDataSet := clansDataSet; LookupKeyFields := 'clan_id'; LookupResultField := 'clan_nom'; DataSet := self.dataSet; end;
Quand j'essaie d'affecter ce champ, les composants "TDBEdit" bindés sur d'autres valeurs de la table "Personnages" ne fonctionnent plus, j'obtiens une "EDataBaseError : perso_nom doesn't exist". Il ne détecterait donc plus les autres champs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 FieldTEmp := TStringField.Create(dataset); with FieldTEmp do begin FieldName := 'NewField'; FieldKind := fkLookup; KeyFields := 'perso_clan'; LookupDataSet := clansDataSet; LookupKeyFields := 'clan_id'; LookupResultField := 'clan_nom'; DataSet := self.dataSet; end; self.dataSet.FieldDefs.Add(FieldTemp.FieldName, ftString, 50, false); self.dataSet.Fields.Add(FieldTEmp);
Si quelqu'un peut m'aider à me sortir de ce pétrin, je lui en serais extrêmement reconnaissant
Merci d'avance à tous![]()
Partager