AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Zwei Anwendungen, eine Datenbank - Synchronisieren???
Thema durchsuchen
Ansicht
Themen-Optionen

Zwei Anwendungen, eine Datenbank - Synchronisieren???

Ein Thema von romber · begonnen am 14. Feb 2005 · letzter Beitrag vom 14. Feb 2005
Antwort Antwort
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Zwei Anwendungen, eine Datenbank - Synchronisieren???

  Alt 14. Feb 2005, 00:27
Datenbank: Microsoft SQL Server • Version: 2000 • Zugriff über: ADOTable + DataSet
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
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#2

Re: Zwei Anwendungen, eine Datenbank - Synchronisieren???

  Alt 14. Feb 2005, 01:47
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:
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
In Delphi ...

Delphi-Quellcode:
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;
[/EDIT]


Schöne Grüße,
Jens
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Zwei Anwendungen, eine Datenbank - Synchronisieren???

  Alt 14. Feb 2005, 02:23
@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.
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#4

Re: Zwei Anwendungen, eine Datenbank - Synchronisieren???

  Alt 14. Feb 2005, 03:03
Danke! Werde es ausprobieren!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz