2017-02-02 4 views
2

Salut, EveryBody!Formulaire de connexion Delphi à l'aide du partage de connexion d'application en se connectant à la base de données SQLite

Je suis novice en programmation!

J'ai besoin de votre aide.

J'ai 2 projet:

1. page de connexion du projet. Utilisation de la fonction Tethering d'application et de 2 boutons (le bouton Connect => se connecte au serveur ET le bouton de connexion => Envoie une requête au serveur pour vérifier le nom d'utilisateur et le mot de passe valides).

2. Page Project Server. Dans une page de serveur à l'aide de l'attache d'application et FDQuery + (SQLite base de données test.db). Lorsque le client se connecte au serveur et envoie une requête au serveur pour vérifier le nom d'utilisateur et le mot de passe valides, le résultat est incorrect. plz aidez-moi à faire fonctionner correctement.

Client And Server

1 Code du projet:

procedure TfAuth.bLogin(Sender: TObject); 
begin 
    tAProfile.SendString(tManager.RemoteProfiles.First,'Login',tLogin.Text); 
    tAProfile.SendString(tManager.RemoteProfiles.First,'Password',tPassword.Text); 
end; 

2. Code du projet: I CREAT var global

private 

    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 

    aLogin, aPassword:string; 

implementation 


{$R *.fmx} 

Je mets mis ce code sur TetherAppProfile => OnResourceReceived:

procedure TfServerPage.tAProfileResourceReceived(const Sender: TObject; 
    const AResource: TRemoteResource); 
    begin 

    if AResource.Hint='Login' then 
     begin 
     aLogin:=AResource.Value.AsString; 
     end; 

    if AResource.Hint='Password' then 
     begin 
     aPassword:=AResource.Value.AsString; 
     end; 
rQuery.Close; 
     rQuery.SQL.Clear; 
     rQuery.SQL.Add('select * from authoriation where name='+QuotedStr(aLogin)+'and password='+QuotedStr(aPassword)); 
     rQuery.Open; 
     if rQuery.RecordCount=0 then // No record found for user 
     ShowMessage('Be sure user name and password is correct') 
     else 
     begin 
      ShowMessage('Success!'); 
     end; 
+0

à faire les deux Login et mot de passe atteignent le tAProfileResourceReceived en même temps, ou ce que le client deux exécutions de tAProfileResourceReceived (un par tAProfile.SendString)? – mjn42

+0

Du côté client J'ai deux demande (nom d'utilisateur, mot de passe) au serveur. Sur le serveur, un seul Receiver tAProfileResourceReceived. –

+0

Quelles valeurs le serveur reçoit-il réellement? – mjn

Répondre

1

Modifier votre code comme suit:

Dans client

procedure TfAuth.bLogin(Sender: TObject); 
var 
    s: string; 
begin 
    s := tLogin.Text + #13 + tPassword.Text; 
    tAProfile.SendString(tManager.RemoteProfiles.First,'Login',s); 
// tAProfile.SendString(tManager.RemoteProfiles.First,'Login',tLogin.Text); 
// tAProfile.SendString(tManager.RemoteProfiles.First,'Password',tPassword.Text); 
end; 

Note Il utilise la ressource du serveur nommé 'Connexion'.

Dans le serveur

procedure TfServerPage.tAProfileResourceReceived(const Sender: TObject; 
    const AResource: TRemoteResource); 
var 
    s: string; 
begin 
// replace current code before rQuery.Close with the following 
    s := AResource.Value.AsString; 

    aLogin := copy(s, 1, Pos(#13, s)-1); 
    aPassword := copy(s, Pos(#13, s)+1, Length(s)); 

    rQuery.Close; 
// continue with rQuery 
// ... 
end; 

Alternative dans le serveur en utilisant SplitString()

uses System.Types, System.StrUtils ...; 

procedure TFrmLoginServer.ServTetProfResourceReceived(const Sender: TObject; 
    const AResource: TRemoteResource); 
var 
    ss: TStringDynArray; 
begin 
    ss := SplitString(AResource.Value.AsString, #13); 
    aLogin := ss[0]; 
    aPassword := ss[1]; 
end; 
+0

Bro, je ne comprends pas 1, -1, + 1, longueur (s) .Y at-il une autre option pour rendre compréhensible ??? plz –

+0

Merci mon frère!) –

+0

Que faire si s: = tLogin.Texte + # 13 + motPasse.Texte + # 13 + Édition1.Texte + # 13 + Édition2.Texte; aLogin: = copie (s, 1, Pos (# 13, s) -1); APassword: = copie (s, Pos (# 13, s) +1); aV: = ??????? aB: = ??????? –