Bonjour à tous !
Je suis en train de finaliser, grâce à votre aide, un quizz visuel, basé sur le glisser/déposer d'images sur des emplacements imposés.
Je désire à présent créer une base de données pour que des utilisateurs inscrits puissent se connecter et être identifiés par un mot de passe.
J'ai pour l'instant créé une bdd de 3 utilisateurs pour tenter de me "dégrossir sur sqlite.
Je vous joins un pdf qui relate la problématique et le code que j'ai exploité sur embarcadero et modifié un peu....
Je souhaite que lorsqu'un utilisateur identifie par son nom et mot de passe, je récupère ces données dans ma bdd pour valider ou non la connexion.
Quand je fais une identification sur "id", tout est ok, et ca marche sur DB Brower et Delphi10.3 (vcl)
Mais par "nom" ou "mdp", ca fonctionne bien sur les requêtes de DB Browser, mais pas en dans Delphi.
C'est d'autant plus improbable dans le cas de "nom", il y a des apostrophes qui encadrent le nom dans la requête DB Browser, ce qui est très
ardu sous Delphi où les apostrophes sont en plus des éléments d'interprétation du langage...
1/ Peut-on réaliser une identification d'un utilisateur par le nom ou le mdp sous delphi, ou suis-je condamné à passer l'id?
2/ Sur les tutos, beaucoup sont orientés vers une lecture de champs communs en liste, par exemple tous les noms ou tous les prénoms, ceux qui équivaut à une lecture par colonne. Pourquoi pas des tutos pour une lecture par ligne, c'est à dire, tous les champ d'un seul utilisateur (son nom, son prénom, son mdp)? Est-ce inutile souvent ou difficile?
Merci à tous pour vos éclairages potentiels......
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137 nit bdd_27_03; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Extctrls, StdCtrls, Data.SqlExpr, Data.DbxSqlite, Data.FMTBcd, Data.DB; type TForm8 = class(TForm) bpConnect: TButton; bpExecute: TButton; SQLConnection1: TSQLConnection; OutputMemo: TMemo; SQLQuery1: TSQLQuery; procedure bpConnectClick(Sender: TObject); procedure bpExecuteClick(Sender: TObject); procedure ShowSelectResults(); private { Déclarations privées } public { Déclarations publiques } end; var Form8: TForm8; implementation {$R *.dfm} //----------------CONNEXION----------------------------------------- procedure TForm8.bpConnectClick(Sender: TObject); begin SQLConnection1.Params.Add('Database=h:\test_mars_2020.db'); try // Establish the connection. SQLConnection1.Connected := true; // etablit la connexion bpExecute.Enabled := true; outputMemo.Text := 'Connection établie!'; except on E: EDatabaseError do ShowMessage('Exception raised with message' + E.Message); end; end; //--------------------Analyse requetes--------------------------------------------- procedure TForm8.bpExecuteClick(Sender: TObject); var ma_requete : string; begin outputMemo.ClearSelection; ma_requete := 'SELECT * FROM utilisateurs where nom = DUPONT' ; try SQLQuery1.SQL.Text := ma_requete; // toute la requete est contenue dans query SQLQuery1.Active := true; // Données débloquées ou pas except on E: Exception do outputMemo.Text := 'Exception raised with message: ' + E.Message; end; ShowSelectResults(); // procedur montrer les résultats end; //----------------------------------------------------------------------- procedure TForm8.ShowSelectResults(); var ma_liste: TStringList; currentField: TField; currentLine: string; i : integer; begin showmessage (' j''arrive dans showresults'); if not SQLQuery1.IsEmpty then // si la le retour n'est pas vide alors faire... begin SQLQuery1.First; // le pointeur se place sur le premier enregistrement. ma_liste := TStringList.Create; // Créer la liste de chaine nommée "ma-liste" try SQLQuery1.GetFieldNames(ma_liste); // récupère les champs dans ma_liste //currentLine := ''; for i := 0 to ma_liste.Count - 1 do // pour chaque valeur récupérée faire... begin currentField := SQLQuery1.FieldByName(ma_liste[i]); showmessage (' je traite la valeur indexée i' + (currentfield).AsString + ' ' + i.ToString ); // choix du champ traité "i" currentLine := currentLine + ' ' + currentField.AsString; showmessage(' j''ajoute un nouveau champ dans currentline traitée'); // ajouter à la chaine la valeur du champ traité end; outputMemo.Lines.Add(currentLine); showmessage (' je viens de finir ma ligne et je l''afiche'); // ajoute la valeur de la ligne sur l'affichage finally // IMPERATIF A LA FIN ma_liste.Free; //supprimer l'objet liste de chaine end; end; end; end.
Partager