Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Verzweiflung durch falsches Query-Ergebnis (https://www.delphipraxis.net/43168-verzweiflung-durch-falsches-query-ergebnis.html)

PASST 30. Mär 2005 07:47

Datenbank: dbase • Version: 3 • Zugriff über: BDE 5.01

Verzweiflung durch falsches Query-Ergebnis
 
Hi NG.

Delphi 4 (update 3), WinXP Pro (SP2) bzw. WinNT4.0 (SP6a), BDE 5.01 (mit dBase3)

Meine Verzweiflung erreicht langsam ihren Höhepunkt, da ein (von mir geschriebenes) Programm immer mal wieder nachweislich falsche Daten anzeigt. Angezeigt werden Daten in einem DBGrid, die per Datasource mit einem TQuery verknüpft sind. Fange ich den TQuery.SQL.Text während der Laufzeit ab und lasse den String in der DBoberfläche anzeigen, so werden die Daten dort korrekt angezeigt, jedoch nicht im DBGrid. Andererseits, wenn ich die DBF-Datei in ein Test-Pfad kopiere und das Programm mit seiner Query-Anzeige erneut auf diesen Pfad bezogen anzeige, ist der Fehler verschwunden.

Paralleler, mehrfacher Zugriff auf die DBF-Datei seitens der Abfrage konnte ich bisher nicht feststellen.

Kann mir jemand Hinweise geben, in welcher Richtung ich suchen kann?


Gruß
Peter Schoettler

Neelix 30. Mär 2005 07:52

Re: Verzweiflung durch falsches Query-Ergebnis
 
Guten Morgen Peter,

kannst Du das Problem mal etwas detailierter beschreiben (SELECT-Statement, Datenstruktur, Welche Daten sollten kommen und welche werden angezeigt).

Bernhard Geyer 30. Mär 2005 07:57

Re: Verzweiflung durch falsches Query-Ergebnis
 
Schmeiß die BDE und dBase weg und stell (wenn ja scheinbar eine Desktopdatenbank reicht) auf ADS Local Server um. Die Programmierung ist sehr ähnlich, aber alle BDE-Probleme (Zerschossene Indexe, Probleme mit Optimistischen Sperrverfahren neuerer Windows-Versione, ...) gehören der Vergangenheit an. Die Umstellung ist sehr einfach durchzuführen (Für die DB-Konvertierung kann das ARC32-Tool (entspricht Datenbankoberfläche bei BDE) verwendet werden.

PASST 30. Mär 2005 09:03

Re: Verzweiflung durch falsches Query-Ergebnis
 
@Bernhard
Aus diversen Gründen möchte ich mich im Augenblick nicht von der BDE trennen.

@Neelix
Ok, dann will ich mal ins Detail gehen.
Der SQL-String sieht so aus:
Delphi-Quellcode:
SELECT
kund_nr, matchcode, lgschein, datum, leertyp, leername, schloss_nr, anzahl, hin_rueck,
sbh_uga2.bemerkung, miete, id, erfassdate, uebergabe, sbhnr, sbh_uga2.export
FROM sbh_kdns
INNER JOIN sbh_uga2 
ON sbh_kdns.kund_nr=sbh_uga2.kund_nr
INNER JOIN sbh_uga3 
ON sbh_uga2.leernr=sbh_uga3.leernr
WHERE datum>="28.02.2005"
AND datum<="30.03.2005"
AND leernr=2 
AND kund_nr=1016053 
ORDER BY
leername, schloss_nr, datum DESC, kund_nr, hin_rueck DESC
Ich konnte bisher erst zweimal den Fehler genauer beobachten. Dabei sind mit dem obigen SQL-String (Parameterwerte sind austauschbar) in der DBoberfläche alle Daten korrekt angezeigt worden, während im Programm einige Einträge nicht mit angezeigt wurden.
Der SQL-String ist korrekt, was die Abfrage in der DBoberfläche beweist. Irgendwo hapert es in der Darstellung im Programm. Ich muss gestehen, dass ich dort beim Fehlverhalten nicht die Anzahl der Ergebnisrecords überprüft habe. Was das Fehlen einzelner Records bestätigen würde oder das Grid als Fehlerursache entlarven würde.
Ich weiß aber nicht wirklich weiter wo ich suchen soll, insb. da der Fehler nicht reproduzierbar ist.

Nebenbei bemerkt, stürzt das Programm ab und an auf dem User-PC ebenso sporadisch ab, was bei mir nicht passiert. Dass dies die Ursache für den Fehler ist, bezweifle ich aber, da ich den Fehler, wenn er auftritt auch von meinem Rechner aus bestätigen konnte.

mschaefer 30. Mär 2005 09:10

Re: Verzweiflung durch falsches Query-Ergebnis
 
Moin, moin,

natürlich hat Bernhard recht. Aber vielleicht hilft es auch die Query explizit auf readonly zu stellen, wenn die Daten nur angezeigt werden sollen. Vermeide es auf einem Rechner mehr als ein BDE-Programm gleichzeitig laufen zu lassen. Die BDE passt nicht zur NT-Speicherverwaltung und bekommt hier von Zeit zu Zeit Probleme die nur schwer nachzuvollziehen sind. Hintergurnd ist, das die BDE zum Datenaustausch mit den Programmen bestimmte Speicherblöcke braucht, die offensichtlich im unteren Speichersegment zu finden sind und diese konkurrieren unter den NT-Systemen mit Treibern. Da habe ich lange leidvolle Erfahrungen mit Paradoxdatenbanken gemacht.

Grüße // Martin

PASST 30. Mär 2005 13:16

Re: Verzweiflung durch falsches Query-Ergebnis
 
@mchaefer:
ich versuch das mal mit dem readonly = requestlive:=false.
Irgendwie wundert es mich schon, dass es an der BDE liegen soll. Dies ist die erste Anwendung, wo die BDE Zicken machen soll. Wobei es sich hier um eine Art kleine Stückzahlen-Verwaltung handelt, mit Bestandsübersicht etc.

PASST 31. Mär 2005 08:46

Re: Verzweiflung durch falsches Query-Ergebnis
 
:) Ich habe den Fehler gefunden. Jetzt weiß ich nicht ob er :oops: ist oder ob ich :wall: bin.
Auf jeden Fall liegt die falsche Anzeige von Daten daran, dass der TQuery.DatabaseName im Pogramm immer nur auf Testdaten gezeigt hat. Während alle andere TDataSet-Objekte auf die in einer ini-Datei eingetragene BDE-DB zugreifen.
Sei's drum, sollte jetzt nicht wider Erwarten ein anderer Fehler sich eingeschlichen haben, so kann ich diesen Thread abschließen!

Gruß und danke an alle.
Peter PASST


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