![]() |
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:
Nach diesem Schritt kann ich mich dann übrigens auch mit keinem anderen Benutzer mehr in die Tabelle
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); IBBenutzer einloggen. Ich muss also was freigeben, aber was ? |
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; |
Re: Interbase
Hallo,
welche IB Version ist im Einsatz ? Denn mit der Single User (Desktopversion) wird ein weiterer connect wahrscheinl. Probleme machen. LG Gerald |
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. |
Re: Interbase
Wie sieht denn dein ConnectionString aus?
|
Re: Interbase
DB-Einstellungen
user_name=SEBASTIAN password=******* lc_ctype=ISO8859_1 sql_role_name=3 Databasename Ghostings-c2:c:\DB\DATA.GDB |
Re: Interbase
Zitat:
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:
Ein Datenmodul ist nicht nur ein Container für Datenbankkomponenten, sondern muss auch Methoden haben, um zumindest eine gewisse Kapselung zu erhalten !!
procedure TDataModule1.OpenAllQueries;
begin IBTransaction1.Active := True; ... end; |
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 |
Re: Interbase
Zitat:
Davon gibt es eine Instanz namens DataModule1. Stell dir vor es gäbe mehr davon:
Delphi-Quellcode:
Dann stell du müsstest jetzt mit jedem der 3 Objekte das Gleiche machen; nämlich 10 Tabellen öffnen.
var
DataModule1A, DataModule1B, DataModule1C : TDataModule; Wie würdest du dann vorgehen ?? So doch wohl nicht, oder ?
Delphi-Quellcode:
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.
DataModule1A.Tabelle1.Open;
... DataModule1A.Tabelle10.Open; DataModule1B.Tabelle1.Open; ... DataModule1B.Tabelle10.Open; DataModule1C.Tabelle1.Open; ... DataModule1C.Tabelle10.Open; Ein schlauer Programmierer würde dann nur schreiben:
Delphi-Quellcode:
DataModule1A.OpenAllQueries;
DataModule1B.OpenAllQueries; DataModule1C.OpenAllQueries; |
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 20:02 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-2025 by Thomas Breitkreuz