Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Delphi 3 und dbase-Dateien im Netzwerk, Datensätze fehlen (https://www.delphipraxis.net/112435-delphi-3-und-dbase-dateien-im-netzwerk-datensaetze-fehlen.html)

drigger 21. Apr 2008 11:47

Datenbank: dbase • Version: III • Zugriff über: BDE

Delphi 3 und dbase-Dateien im Netzwerk, Datensätze fehlen
 
Hallo,

kurz vorab: Ich hab die Suchfunktion schon erfolgreich gequält und erfahren dass dbase und BDE im Netzwerk nicht so das wahre sind. Eine Lösung für mein Problem hab ich leider dennoch nicht gefunden. Wäre nett, wenn mir hier jemand weiterhelfen könnte.

Mein Problem:
Wir haben in unserem Verein ein Uraltprogramm, geschrieben in Delphi 3, welches im Netzwerk probleme macht und da der ursprüngliche Entwickler nicht mehr zur Verfügung steht, hab ich die tolle Aufgabe nun den Fehler zu suchen :( :( :(

Folgende Situation:
Das Programm läuft auf zwei Rechnern, die beide in eine dbase-Datei Daten mittels TTable und "appendrecord" Daten schreiben. Die Datei liegt auf dem einen Rechner, das Verzeichnis ist für den anderen Rechner freigegeben und der greift so auf die selbe Datei zu.

Das Problem ist nun, dass die Datensätze, die das Programm schreibt auf dessen Rechner die Datendatei liegt alle da sind. Die Datensätze, die vom verbundenen Rechner geschrieben werden, sind unvollständig. Komischerweise ist es auch nicht so, dass alle Datensätze fehlen, sondern es werden einige Datensätze geschrieben (so ca. 7%).

Im Einplatzbetrieb funktioniert das Programm tadellos. Wenn ich das, was ich im Netz gefunden habe, richtig interpretiere, müsste das Programm dann doch eigentlich auch problemlos im Netzwerkbetrieb laufen, da die BDE sich um das Locking usw. kümmert. ISt das richtig?

Ich hab zu dem Programm auch eine rudimentäre Doku gefunden, in der steht, dass in der BDE Konfiguration bei den dbase-Dateien als BatchCount der Wert 1 eingetragen sein soll. Das ist aber der Fall.

Auch funktionieren die Auswertungen usw. von beiden Rechnern problemlos. Der grundlegende Datenzugriff scheint also zu funktionieren, es scheint so, dass es nur ein Problem beim Schreiben der Daten in die Datei gibt.

Ich hab leider keine Ahnung, wo ich da ansetzen kann.
Sicherlich wäre es am sinnvollsten, das ganze auf SQL umzustellen, aber die Arbeit wollte ich mir eigentlich ersparen, weil dann muss ich die ganzen Auswertungen ja auch neu machen :(
Vor allem bin ich auch nicht so die Leuchte in Delphi, sondern bin die arme Sau, die früher mal was in Pascal gemacht hat und wurde deshalb als Opfer auserkoren.

Nach einem ersten Blick in den Sourcecode hab ich den Eindruck, dass dies vermutlich früher schon mal probleme gemacht haben muss, weil nach jedem "Appendrecord" wird die Tabelle geschlossen ("zeiten.close") und neu geöffnet ("zeiten.open"). Ich denke das müsste doch aber trotz dieser gewöhnungsbedürftigen Programmierung funktionieren, weil bei einem Close müssten doch alle Daten, die noch irgendwo in einem Cache oder ähnlichem sind, geschrieben werden. Oder etwa nicht?

Hat jemand eine Idee, an was dieses Problem liegen kann? Wenn ich das mit möglichst wenig Änderungen am bestehenden Programm oder vielleicht nur durch Konfiguration in den Griff kriegen könnte wäre das toll.

Gruß

drigger

Ach so:
Der Verein hat leider nur eine Lizenz für Delphi 3 und ist wie üblich chronisch Klamm bei Kasse. Ein Upgrade auf eine höhere Delphi-Version oder kostenpflichtige Komponenten werden daher wohl nicht möglich sein ...

Union 21. Apr 2008 12:04

Re: Delphi 3 und dbase-Dateien im Netzwerk, Datensätze fehle
 
Stell doch auf Advantage um. Das sind nur minimale Änderungen (es gibt TAdsConnection, TAdsTable, TAdsQuery) und die lokale Version(netzwerkfähig, aber auf max. 5 User eingeschränkte) ist kostenlos, stabil und sehr schnell.

hoika 21. Apr 2008 12:10

Re: Delphi 3 und dbase-Dateien im Netzwerk, Datensätze fehle
 
Hallo,

unter google "bde peer networking" findest du einige Infos zur Konfiguration.

Nur kurz:

1. Netzlaufwerk
Die Clients müssen beide das gleiche Netzlaufwerk "sehen".
Client 1 (wo die DB ist), muss also auch ein Netzlaufwerk (z.B. Z) haben.
Das geht entweder per
Delphi-Quellcode:
subst
oder
Delphi-Quellcode:
net use
(ab NT)

Endergebnis:
Client 1: z:\data
Client 2: z:\data


2. Puffer
nach dem Schreiben Table.FlushBuffers = DbiSaveChanges(Table.Handle)
vor dem Lesen Table.Refresh


3. andere DB ;) jaja, musste sein


Heiko

Bernhard Geyer 21. Apr 2008 12:11

Re: Delphi 3 und dbase-Dateien im Netzwerk, Datensätze fehle
 
Zitat:

Zitat von drigger
Im Einplatzbetrieb funktioniert das Programm tadellos. Wenn ich das, was ich im Netz gefunden habe, richtig interpretiere, müsste das Programm dann doch eigentlich auch problemlos im Netzwerkbetrieb laufen, da die BDE sich um das Locking usw. kümmert. ISt das richtig?

Eigentlich, jedoch ist die BDE im Kern auf das (Sperr-)Verhalten der (nicht mehr oft anzutreffenden) Novel-Server ausgelegt und kommt nicht mit dem Zurecht was Windows seit 2000 als Sperrverhalten hat.
Die beste Sinnvolle Lösung ist das Programm BDE-Los umzubauen. Sei es nun mit alternativen dBase-Zugriffskomponenten oder günstige/kostenlose SQL Server (Firebird, ...). Falls du keine Kaufkomponenten einsetzt kannst du auch versuchen mit dem kostenlosen Turbo Explorer dein Projekt zum laufen zu bekommen.

NormanNG 21. Apr 2008 12:15

Re: Delphi 3 und dbase-Dateien im Netzwerk, Datensätze fehle
 
Hi,

evtl. liegt die "Netzwerksteuerungsdatei" der BDE des "CLient"-Rechners nicht auf dem gleichen Ort wie die des "Servers".
Kann mit der BDE-Verwaltung unter Konfiguration/Treiber bei der Eigenschaft "NET DIR" eingestellt werden.

RavenIV 21. Apr 2008 12:30

Re: Delphi 3 und dbase-Dateien im Netzwerk, Datensätze fehle
 
In der vorherigen Firma, wo ich gearbeitet habe, hat es auch immer Probleme mit BDE gegeben.

Da waren dann immer diese beiden Stichworte ganz aktuell:
- DbiSaveChanges
- "NET DIR"

Aber wie das im Detail war, weiss ich nicht mehr. Ich will es auch nicht mehr wissen. ;-)

hoika 21. Apr 2008 12:38

Re: Delphi 3 und dbase-Dateien im Netzwerk, Datensätze fehle
 
Hallo,

NET DIR ist Paradox, nicht DBase.
Unter DBase wird direkt der Datensatz gelockt.

DbiSaveChanges ohne Table.Refresh bringt übrigens nur halb was.
Ah so, direkt nach Table.Open ist ein Refresh nat. sinnlos.


Haaach, die gute alte Zeit.


Heiko

drigger 26. Apr 2008 22:01

Re: Delphi 3 und dbase-Dateien im Netzwerk, Datensätze fehle
 
Hallo,

vielen Dank für Eure Antworten.

TurboDelphi wäre schön gewesen, aber das Programm benutzt zur Ansteuerung der Lichtschranke eine externe Komponente und die kann ich da nicht einbauen - leider.

Bei Advantage bin ich aber fündig geworden. Der Local Server reicht uns dicke und die haben sogar noch eine Komponente für das Uralt-Delphi 3 - super!!

Umstellung war dank der mitgelieferten Komponente eine Sache von grad mal einer dreiviertel Stunde (Datenbanken konvertieren, im Code TTAble durch TADSTable ersetzen und ein bisschen feintuning) und so wie ich sehe, funktioniert es perfekt.

Vielen Dank noch mal und viele Grüße

drigger

Bernhard Geyer 26. Apr 2008 22:15

Re: Delphi 3 und dbase-Dateien im Netzwerk, Datensätze fehle
 
Zitat:

Zitat von drigger
TurboDelphi wäre schön gewesen, aber das Programm benutzt zur Ansteuerung der Lichtschranke eine externe Komponente und die kann ich da nicht einbauen - leider.

Gibt es keine Delphi 2006-Version dieser Komponente und habt ihr keinen SourceCode dafür?


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