![]() |
Datenbank: Microsoft SQL Server • Version: 2000 • Zugriff über: ADOTable + DataSet
Zwei Anwendungen, eine Datenbank - Synchronisieren???
Hallo!
Ich habe zwei verschiedene Programmchen, die mithilfe ADO mit einer und deselben Microsoft SQL Server 2000-Datenbank verbunden sind. Eine Anwendung benutzt die Datenbank für die Login-Funktion. Diese hat auch einen mit der ADOTable verbundenen DBGrid. Das zweite Programm läuft auf einem entfernten PC und dient als Userverwaltung. Damit gebe ich in die Datenbank neue User ein, die sich nacher in die erste Programm einloggen müssen. Das Problem ist: wenn ich neue User-Konten über die Verwaltungsprogramm eingebe, werden diese nicht sofort für Login-Programm erreichbar. Ich muss entweder das Programm neustarten oder Activ-Eigenschaft der ADOTable zuerst auf False und dann wieder auf True setzen, erst dann werden die Daten im aktualisiert. Kann man irgendwie so machen, dass über eine Programm in die SQL-Datenbank eingegebene Daten sofort für das andere Programm, das den gleichen Datenbank nutzt, erreichbar sind? Natürlich kann man das mit einem Timer lösen, der mit den regelmäßigen Abständen die ADOTable deaktiviert und sofort wieder aktiviert. Ist diese primitive und unsichere Methode den einzige Lösung für mein Problem? Denke ich nicht. Danke! MfG, Ralf |
Re: Zwei Anwendungen, eine Datenbank - Synchronisieren???
Schreibe dir doch eine Stored Procedure, der du als Parameter den Benutzernamen übergibst und gleichzeitig über einen OUTPUT-Parameter das Passwort aus der DB holst ...
Das hat folgende Vorteile ... - dein Problem mit dem Refresh löst sich in Luft auf - die durch ADO gefetchte Datenmenge ist extrem klein (und somit schnell) - du kannst tausende User Anlegen ohne das die "Abfrage" spührbar langsamer wird - du sparst Locate bzw. Lookup in deiner ADOTable ... spart noch mal Zeit ... [EDIT] Kleines Beispiel SQL SERVER ...
SQL-Code:
In Delphi ...
CREATE PROCEDURE GetPasswd
@Username varchar(20), -- Input Parameter, muss durch dein Prog übergeben werden @Passwd OUTPUT varchar(20) -- da landet dein Passwort drin. Den Parameter kannst du mit Delphi auswerten AS -- Benutzertabelle abfragen und Variable @Passwd füllen SELECT @Passwd = EncryptedPasswd FROM Benutzertabelle WHERE UPPER(FELD_Benutzername) = UPPER(@Username) RETURN GO
Delphi-Quellcode:
[/EDIT]
function Login(Username,Password:String):boolean;
var SP: TAdoStoredProc; pw:Variant; begin // ungetestet // gibt true zurück wenn User und DB übereinstimmen Result:=False; // TADOStoredProc zur Laufzeit erstellen SP := TAdoStoredProc.Create(nil); try // SP mit deiner TADOConnection verbinden SP.Connection := deine_Adoconnection; // SP mit der Stored Procedure 'GetPasswd' verbinden SP.ProcedureName := 'GetPasswd'; // Parameterlisten holen SP.Parameters.Refresh; // Input Parameter 'Username' füllen SP.Parameters[1].Value := Username; // SP ausführen und offen halten (nicht SP.Execute, da du den Output Parameter noch abfragen musst ... SP.Open; // Output Parameter aus SP lesen pw:=SP.Parameters[2].Value; // SP Schließen SP.CLose finally // SP freigeben FreeAndNil(SP); end; // Wenn der Benutzer nicht in der DB gefunden wurde ist der Output Parameter der SP = NULL if vartype(pw) = vtNULL then begin result:=false; Showmessage('Hi, dich kenne ich nicht... '+#13#10+ 'Wenn du neu bist melde dich bitte beim Admin !'+#13#10+ 'Falls du dich vertippt hast, versuche es noch einmal.'); exit; end; // vergleichen ob das Passwort aus der DB mit Password übereinstimmt ... Result:= ((Decrypt(PW)=Password); end; :hi: Schöne Grüße, Jens |
Re: Zwei Anwendungen, eine Datenbank - Synchronisieren???
@romber:
Was du in deinem Titel mit Synchronisieren benennst, ist in der Datenbankbranche was anderes. Damit ist das Synchronisieren von 2 gleichen Datenbanken mit unterschiedlichen Datenbeständen gemeint. Auch unter Replikation bekannt. Sowas kann der MSSQL Server von Haus aus... Aber das ist ja nicht dein Problem gewesen. Wenn ich dich richtig versteh, verwaltest du deine Userkonten über eine eigens angelegte Tabelle. Das macht bei so einem mächtigen DBMS wie MSSQL keinen Sinn. Warum nutzt du nicht die interne Userverwaltung. Dann bist du auch sicherheitstechnisch auf der sicheren Seite. Aber damit ist dein Problem immer noch nicht gelöst... 2 unterschiedliche Rechner kriegen nix voneinander mit. Will heissen, wenn Rechner A einen neuen Datensatz einfügt, so kriegt das Rechner B nicht mit. Erst nach einer neuen Query klappt das. Das ist so in allen mir bekannten DBMS. MSSQL (und alle anderen Systeme auch) bietet dir nur die Sicherheit, daß nicht 2 Rechner parallel an einem Datensatz was rumfuschen. |
Re: Zwei Anwendungen, eine Datenbank - Synchronisieren???
Danke! Werde es ausprobieren!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz