1 pièce(s) jointe(s)
DELPHI et requetes SQLITE
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......:oops:
Code:
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. |