Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Interbase (https://www.delphipraxis.net/57872-interbase.html)

MasterBasti 28. Nov 2005 08:47

Datenbank: Interbase • Version: 7 • Zugriff über: IBComponenten

Interbase
 
Hallo zusammen,

irgendwie ist es mir nicht möglich gleichzeitig zur Laufzeit mit 2 verschiedenen Rechnern auf einen DAtenbank zuzugreifen....
Der erste Rechner kann Problemlos mit meinem Programm zur DB connecten. Geht auch ganz flott, jedoch schafft ein 2ter
Rechner das gleiche zur selben Zeit nicht, das programm lädt und lädt und lädt und es passiert einfach nichts....

Wenn ich jedoch aus Delphi direkt versuche einen Connect zur DB herzustellen, obwohl noch ein anderer User connected ist,
dann klappt es... :( Aber nur in der Entwurfsphase, während der Laufzeit sieht das dann wieder schlecht aus...

Muss ich noch irgendetwas beachten ?
Freigeben, etc ?

Bitte dringend um Hilfe...

Gruß

MasterBasti

[Edit]
Habe noch etwas rausgefunden.
Folgendes wird ausgeführt, nachdem ich mich erfolgreich angemeldet habe:

Delphi-Quellcode:
if Edit1.Text = DataModule1.IBBenutzer.FieldByName('Passwort').AsString then begin
  Form9.ModalResult := mrok;
  DataModule1.IBBenutzer.Edit;
  DataModule1.IBBenutzer.FieldByName('LastLogin').AsDateTime := Date;
  DataModule1.IBBenutzer.Post;
  //Form10.Close;
  end else begin
  Inc(i);
  Edit1.Clear;
  Messagedlg('Falsches Passwort, bitte versuchen Sie es nochmal!',mterror, [mbok],0);
Nach diesem Schritt kann ich mich dann übrigens auch mit keinem anderen Benutzer mehr in die Tabelle
IBBenutzer einloggen. Ich muss also was freigeben, aber was ?

MasterBasti 28. Nov 2005 08:50

Re: Interbase
 
Achja, das steht übrigens für das öffnen der DB und der Tabellen....

Delphi-Quellcode:
DataModule1.IBDatabase1.Connected := False;

DataModule1.IBDatabase1.Connected := True;

DataModule1.IBTransaction1.Active := True;
DataModule1.StammdatenD.Active := True;
DataModule1.DomainpreiseDB.Active := True;
DataModule1.AuftragDB.Active := True;
DataModule1.AuftragDB.FetchAll;
DataModule1.KundenDB.Active := True;
DataModule1.KundenDB.FetchAll;
DataModule1.DomainDB.Active := True;
DataModule1.DOMAINDB.FetchAll;
DataModule1.RechnungDB.Active := True;
DataModule1.RECHNUNGDB.FetchAll;
DataModule1.ServerDB.Active := True;
DataModule1.SERVERDB.FetchAll;
DataModule1.PaketDB.Active := True;
DataModule1.PAKETDB.FetchAll;
DataModule1.BeuzugsquellenDB.Active := True;
DataModule1.Auftragssuche.Active := True;
DataModule1.Drucken.Active := True;
DataModule1.Kundensuche.Active := True;
DataModule1.Ibbenutzer.active := True;
DataModule1.IBBenutzer.FetchAll;

DataModule1.Tempauftrag.Active := True;
DataModule1.Tempdrucker.Active := True;
DataModule1.Zugangsdaten.Active := True;
DataModule1.NachrichtenDB.Active := True;

DataModule1.ZTable2.Active := True;
DataModule1.RechnungenExtDB.Active := True;
DataModule1.LogindatenDB.Active := True;
DataModule1.Kundendaten.Active := True;
DataModule1.NewsDB.Active := True;
DataModule1.Auftragsdaten.Active := True;

GeraldK 28. Nov 2005 12:18

Re: Interbase
 
Hallo,


welche IB Version ist im Einsatz ?
Denn mit der Single User (Desktopversion) wird ein weiterer connect wahrscheinl. Probleme machen.

LG
Gerald

MasterBasti 28. Nov 2005 12:55

Re: Interbase
 
Interbase 7.5 (sollte eine ServerEdition sein)
Diese Version ist zumindestens in der Anzahl der Benutzer nicht beschränkt, sodass dies
keine Probleme darstellen sollte. Ich vermute vielmehr, dass es mit den Transactions zusammenhängt,
da ich erst nicht mehr auf eine bestimmte Tabelle zugreifen kann, wenn Ihr Daten mittels (Insert/Post) zugefügt wurden.

Garby 28. Nov 2005 13:16

Re: Interbase
 
Wie sieht denn dein ConnectionString aus?

MasterBasti 29. Nov 2005 13:34

Re: Interbase
 
DB-Einstellungen
user_name=SEBASTIAN
password=*******
lc_ctype=ISO8859_1
sql_role_name=3

Databasename
Ghostings-c2:c:\DB\DATA.GDB

shmia 29. Nov 2005 15:51

Re: Interbase
 
Zitat:

Zitat von MasterBasti
Achja, das steht übrigens für das öffnen der DB und der Tabellen....
Delphi-Quellcode:
DataModule1.IBDatabase1.Connected := False;
DataModule1.IBDatabase1.Connected := True;
DataModule1.IBTransaction1.Active := True;
... u.s.w.

Das ist ja grausam.
Du öffnest alle Abfragen (oder noch schlimmer alle Tabellen) ohne zu beachten, ob die Datasets überhaupt schon benötigt werden.
Wenn du dies schon tun musst, dann solltest du eine Methode im Datenmodul haben,
die dies lokal erledigt:
Delphi-Quellcode:
procedure TDataModule1.OpenAllQueries;
begin
   IBTransaction1.Active := True;
   ...
end;
Ein Datenmodul ist nicht nur ein Container für Datenbankkomponenten, sondern muss auch Methoden haben, um zumindest eine gewisse Kapselung zu erhalten !!

MasterBasti 29. Nov 2005 16:00

Re: Interbase
 
Hallo shmia,

was soll unten stehende Methode bewirken ?
Sorry der blöden Fragen ;-)

Aber man könnte das aktiveren der Transaction doch dann auch einmal am Anfang machen und nicht
in jedem meiner 20 DatenModule wieder neu ??!?!?!?!

Gruß und danke

MAsterBasti

shmia 29. Nov 2005 16:22

Re: Interbase
 
Zitat:

Zitat von MasterBasti
was soll unten stehende Methode bewirken ?
Sorry der blöden Fragen ;-)

Du hast eine Klasse vom Typ TDataModule1.
Davon gibt es eine Instanz namens DataModule1.
Stell dir vor es gäbe mehr davon:
Delphi-Quellcode:
var
   DataModule1A, DataModule1B, DataModule1C : TDataModule;
Dann stell du müsstest jetzt mit jedem der 3 Objekte das Gleiche machen; nämlich 10 Tabellen öffnen.
Wie würdest du dann vorgehen ?? So doch wohl nicht, oder ?
Delphi-Quellcode:
DataModule1A.Tabelle1.Open;
...
DataModule1A.Tabelle10.Open;
DataModule1B.Tabelle1.Open;
...
DataModule1B.Tabelle10.Open;
DataModule1C.Tabelle1.Open;
...
DataModule1C.Tabelle10.Open;
Du siehst, extrem viel Schreibarbeit. Sollte eine Tabelle dazukommen, dann kann man leicht eine Anweisung für ein Objekt vergessen und schon ist der Fehler da.
Ein schlauer Programmierer würde dann nur schreiben:
Delphi-Quellcode:
DataModule1A.OpenAllQueries;
DataModule1B.OpenAllQueries;
DataModule1C.OpenAllQueries;

MasterBasti 3. Dez 2005 12:33

Re: Interbase
 
Ich verstehe.... haste du auch wieder Recht.... weiß auch nicht, warum ich das jetzt nicht gemacht habe.... :(
Danke auf jeden Fall für diesen Hinweis.. ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:07 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