Re-Bonjour
J'ai une deuxième question sur le livebinding en runtime et le remplissage depuis une liste de données provenant d'une BDD. Depuis que j'ai reçu le livre de Cary Jensen "Delphi in Depth : FireDac" je comprend mieux certaine choses (et je n'ai pas encore fini de le lire, mais je n'ai pas encore eu le déclic en ce qui concerne l'utilisation du TFDUpdateSQL. Ca va venir
)
Pour mon projet professionnel j'ai besoin de gérer des tables de données (MySQL, SQLLite et exportation vers JSON). Je dois concevoir deux applications. Une pour Desktop et l'autre pour Mobile. Ces deux applications seront amener à manipuler ces tables de données. A l'heure actuelle j'ai trouvé une solution qui me convient pour la manipulation des BDD avec une approche "MVC" dans les grandes lignes et qui me permet d'avoir une structure réutilisable.
Pour l'affichage des données (pour le moment) j'utilise un TListView que je rempli en runtime comme ceci (version simplifiée)
Ma question est la suivante à la place de remplir le ListView est-ce possible de remplir un TBindSourceDB en runtime automatiquement en le liant au FFDQuery ou dois-je avoir un "FDQuerySelect" toujours actif et le lier simplement ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 function TDBClientController.GetAllItems(aList: TClientModelList) : Integer; Var LData : TClientDataModel; begin Result := -1; if aList = nil then exit; FFDQuery.SQL.Clear; FFDQuery.SQL.Add('SELECT ID, FirstName, LastName, EMail, GenderID FROM '+ cTableName); // + 'ORDER BY FirstName ASC'); Try FFDQuery.Open(); while not(FFDQuery.Eof) do begin LData.ID := FFDQuery.FieldByName('ID').AsInteger; LData.FirstName := FFDQuery.FieldByName('FirstName').AsString; LData.LastName := FFDQuery.FieldByName('LastName').AsString; LData.EMail := FFDQuery.FieldByName('EMail').AsString; LData.GenderID := FFDQuery.FieldByName('GenderID').AsInteger; aList.Add(LData); FFDQuery.Next; end; Finally Result := FFDQuery.RecordCount; FFDQuery.Close; End; end; procedure TDBClientView.RefreshList; var LDataList : TClientModelList; LData : TClientDataModel; Litem: TListViewItem; begin LDataList := TClientModelList.Create; if FOwner.GetAllItems(LDataList) > -1 then begin Try FListView.Items.Clear; for LData in LDataList do begin LItem := FListView.Items.Add; LItem.Tag := LData.ID; LItem.Objects.FindObjectT<TListItemText>('FirstName').Text := LData.FirstName; LItem.Objects.FindObjectT<TListItemText>('LastName').Text := LData.LastName; LItem.Objects.FindObjectT<TListItemText>('EMail').Text := LData.EMail; end; Finally FreeAndNil(LDataList); End; end; end;
Ou dois-je passer par un TPrototypeBindSource et/ou TAdapterBindSource. Quelle serait selon vous la meilleure méthode ?
(j'espère que j'ai été assez clair dans ce que je souhaite réaliser)
D'avance merci de vos conseils
Partager