AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Oracle Bug oder bin ich zu blöd?
Thema durchsuchen
Ansicht
Themen-Optionen

Oracle Bug oder bin ich zu blöd?

Ein Thema von BeerBear · begonnen am 2. Aug 2006 · letzter Beitrag vom 4. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von BeerBear
BeerBear

Registriert seit: 23. Aug 2005
Ort: Lübeck
85 Beiträge
 
#1

Oracle Bug oder bin ich zu blöd?

  Alt 2. Aug 2006, 10:41
Datenbank: Oracle • Version: 8 • Zugriff über: BDE
Moin,

ich habe ein sehr merkwürdiges Problem mit dem Oracle 8 Client.
Ich benutze TUpdateSQL und wenn ich in ein Feld schreibe, das noch den Wert NULL enthält, klappt alles wie es soll.
Führe ich jedoch ein weiteres Update auf ein weiteres NULL Feld durch, wird dieses nicht mehr in die Datenbank geschrieben.

Hier mal ein Codebeispiel: (alle Felder enthalten den Wert NULL)
Delphi-Quellcode:
  with Query1 do
    begin
      Edit;
      FieldByName('GANZZAHL').AsInteger := 10;
      Post;
      ApplyUpdates;
      CommitUpdates;

      Edit;
      FieldByName('DATUM').AsDateTime := StrToDate(Edit3.Text);
      Post;
      ApplyUpdates;
      CommitUpdates;

      Edit;
      FieldByName('TEXT').asString := 'Ich bin der Text';
      Post;
      ApplyUpdates;
      CommitUpdates;
    end;
Mit diesem Code würde nur im Feld GANZZAHL eine 10 erscheinen. Alle anderen blieben leer. Unabhängig vom Datentyp. Es wird nur das erste Update ausgeführt.
Updates auf Felder, die bereits Werte enthalten, werden wie erwartet weggeschrieben.

Komischerweise tritt dieses Problem nicht mit dem Oracle 7 Client auf.
Kennt jemand das Problem?
Ist es ein Bug im Oracle 8 Client?
Oder gibt es noch irgendwelche Konfigurationen, die dieses Problem hervorrufen?
Der Fehler sitzt immer vor dem Bildschirm.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Oracle Bug oder bin ich zu blöd?

  Alt 2. Aug 2006, 20:32
1, Schmeiß die BDE weg und nimm eine nativen Oracle-Komponente wie z.B. von Core Labs.

2, Oracle hat in jeder Version genügend Bugs. Es genügt aber nicht nur die Hauptversion anzugeben sondern du mußt die Version bis zur letzten Versionstelle angeben da zwischen Miniupdates der Fehler auftreten kann bzw. verschwinden kann

3, Wieso wird jedes einzlene Feld direkt geschrieben. Geht nicht folgendes?

Delphi-Quellcode:
with Query1 do
    begin
      Edit;
      FieldByName('GANZZAHL').AsInteger := 10;
      FieldByName('DATUM').AsDateTime := StrToDate(Edit3.Text);
      FieldByName('TEXT').asString := 'Ich bin der Text';
      Post;
      ApplyUpdates;
      CommitUpdates;
    end;
end;
Wobei ich nicht weiß ob überhaupt ApplyUpdates bzw. CommmitUpdates nötig sind. Liegt vieleicht auch daran das ich schon seit jahren nur noch mit INSERT/Update-SQL-Statements arbeite.

Ich vermute mal das nach Post, ApplyUpdates, CommitUpdates die Client oder die BDE nicht mehr den Datensatz erkennt und die falsche SQL-Updateanweisung zur DB schickt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von BeerBear
BeerBear

Registriert seit: 23. Aug 2005
Ort: Lübeck
85 Beiträge
 
#3

Re: Oracle Bug oder bin ich zu blöd?

  Alt 3. Aug 2006, 09:49
1.
Welchen Aufwand würde das Bedeuten bei einer großen Datenbankanwendung mit mehr als 600000 Zeilen? Ich glaube das ist kaum möglich.

2.
Oracle Client: Version 8.1.7 August 2000
Delphi: 3.0 (Build 5.83)
BDE: Ursprünglich 5.01 mit Update auf (5.11 oder 5.1.1)? Zeigt aber immernoch 5.01 an.

3.
Sicher, so würde es auch funktionieren.
Aber bei meinem Code handelt es sich nur um einen Beispielcode zum besseren Verständnis meines Problems. In der Betroffen Anwendung wird auf verschiedene Ereignisse reagiert, bei denen jeweils so ein einzelner Block ausgeführt wird.
Der Fehler sitzt immer vor dem Bildschirm.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Oracle Bug oder bin ich zu blöd?

  Alt 3. Aug 2006, 10:23
Zitat von BeerBear:
1.
Welchen Aufwand würde das Bedeuten bei einer großen Datenbankanwendung mit mehr als 600000 Zeilen? Ich glaube das ist kaum möglich.
Und was machst Du wenn mit dem August-Update von MS bei einem kritischen Update die BDE nicht mehr gehen würde?
Außerdem sollte man die DB-Abhänigigkeiten nicht auf 1000 Units verteilen. Wir haben 1,2 Mio. Quellcodezeilen (ok, mit Kaufkomponenten) und unsere Oracle-Abhänigkeiten sind in ca. 1000 Zeilen komprimiert.

Zitat von BeerBear:
Oracle Client: Version 8.1.7 August 2000
Haben wir auch und keine dramatischene Probleme damit

Zitat von BeerBear:
Sicher, so würde es auch funktionieren.
Aber bei meinem Code handelt es sich nur um einen Beispielcode zum besseren Verständnis meines Problems. In der Betroffen Anwendung wird auf verschiedene Ereignisse reagiert, bei denen jeweils so ein einzelner Block ausgeführt wird.
Kannst Du eigentlich kontrollieren was auf Oracle-Seite ankommt?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von BeerBear
BeerBear

Registriert seit: 23. Aug 2005
Ort: Lübeck
85 Beiträge
 
#5

Re: Oracle Bug oder bin ich zu blöd?

  Alt 3. Aug 2006, 11:01
Zitat von Bernhard Geyer:
Und was machst Du wenn mit dem August-Update von MS bei einem kritischen Update die BDE nicht mehr gehen würde?
Das ist aber sehr weit hergeholt.
Aber was ich machen soll, würde mir dann mein Vorgesetzter sagen.

Zitat von Bernhard Geyer:
Außerdem sollte man die DB-Abhänigigkeiten nicht auf 1000 Units verteilen.
Hab noch nie etwas anderes als die BDE benutzt. Deshalb frage ich ja, wie groß der Aufwand wäre. Also was müsste ich tun, um sie nicht zu benutzen?

Zitat von Bernhard Geyer:
Haben wir auch und keine dramatischene Probleme damit.
Wir benutzen den Client auch schon etwas länger, das Problem ist nur noch nicht aufgefallen. Mal getestet, ob das Problem bei euch ebenfalls Auftritt?

Zitat von Bernhard Geyer:
Kannst Du eigentlich kontrollieren was auf Oracle-Seite ankommt?
Versuche gerade das Tracing am Client in Gang zu bekommen. Das will aber nicht so wirklich.
Gibt es am Server auch eine Möglichkeit?
Der Fehler sitzt immer vor dem Bildschirm.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Oracle Bug oder bin ich zu blöd?

  Alt 3. Aug 2006, 11:08
Zitat von BeerBear:
Das ist aber sehr weit hergeholt.
Aber was ich machen soll, würde mir dann mein Vorgesetzter sagen.
Wieso weit hergeholt? Wenn man sieht was MS teilweise mit Fixes verbockt (Schon mal eine CHM-Datei von Netzwerklaufwerk gestartet) würde mich nichts wundern. Und es geht darum was der Kunde sagt (wenn die Anwendung verkauft wird).

Zitat von BeerBear:
Hab noch nie etwas anderes als die BDE benutzt. Deshalb frage ich ja, wie groß der Aufwand wäre. Also was müsste ich tun, um sie nicht zu benutzen?
Erst mal solltest Du deinen Code soweit überarbeiten das der DB-Abhänige Teil auf Wenige Units konzentriert ist. Mich wundert es das bei der größe der Anwendung noch keine diesen Teil überarbeitet hat und das eh schon versucht hat.
Anschließend kannst Du mittels Abstraktion versuchen eine DB-Unabhänige (hier meine ich das keine BDE/Oracle-Spezialitäten mehr "nach außen" sichtbar sind) Schnittstelle zu definieren.
Jetzt kannst Du eine neue DB-Zugriffsklasse implementieren welche diese Schnittstelle implementiert und z.B. native mit CoreLab-Komponenten auf die DB zugreift.

Zitat von BeerBear:
Versuche gerade das Tracing am Client in Gang zu bekommen. Das will aber nicht so wirklich.
Gibt es am Server auch eine Möglichkeit?
Für MS SQL Server kenn ich die Möglichkeiten. Aber Oracle ... wird sicherlich wieder ein schreckliches Konsolenprogramm sein.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von BeerBear
BeerBear

Registriert seit: 23. Aug 2005
Ort: Lübeck
85 Beiträge
 
#7

Re: Oracle Bug oder bin ich zu blöd?

  Alt 3. Aug 2006, 14:20
Zitat:
Erst mal solltest Du deinen Code soweit überarbeiten das der DB-Abhänige Teil auf Wenige Units konzentriert ist. Mich wundert es das bei der größe der Anwendung noch keine diesen Teil überarbeitet hat und das eh schon versucht hat.
Anschließend kannst Du mittels Abstraktion versuchen eine DB-Unabhänige (hier meine ich das keine BDE/Oracle-Spezialitäten mehr "nach außen" sichtbar sind) Schnittstelle zu definieren.
Jetzt kannst Du eine neue DB-Zugriffsklasse implementieren welche diese Schnittstelle implementiert und z.B. native mit CoreLab-Komponenten auf die DB zugreift.
O.K. vergessen wir das wieder.

Das Tracing läuft nun endlich

Habe den Trace mal angehängt. Dabei handelt es sich nur um den Teil, der während des oben genannten Bespielcodes entsteht. (Trace.txt)

Außerdem habe ich daraus noch die Netwerkaktivität herausgefiltert. (PacketsCU.txt)
Scheinbar wird die SQL Anweisung nur einmal abgeschickt.
Angehängte Dateien
Dateityp: txt packetscu_601.txt (15,1 KB, 6x aufgerufen)
Dateityp: txt trace_134.txt (26,2 KB, 9x aufgerufen)
Der Fehler sitzt immer vor dem Bildschirm.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Oracle Bug oder bin ich zu blöd?

  Alt 3. Aug 2006, 14:41
Hallo,

funktioniert der BDE sql monitor nicht bei dir ?


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von BeerBear
BeerBear

Registriert seit: 23. Aug 2005
Ort: Lübeck
85 Beiträge
 
#9

Re: Oracle Bug oder bin ich zu blöd?

  Alt 3. Aug 2006, 15:36
Doch, der funktioniert. Zeigt aber keine Auffälligkeiten. Dort taucht auch die SQL Anweisung noch 3 mal auf.

Nur mit der Anziege von Integern hat er scheinbar ein Problem, das ist aber immer der Fall.
Miniaturansicht angehängter Grafiken
sql_monitor_120.jpg  
Der Fehler sitzt immer vor dem Bildschirm.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Oracle Bug oder bin ich zu blöd?

  Alt 3. Aug 2006, 15:41
Um es mal lappidar zu sagen: Hier scheint es inkompatiblitäten zwischen dieser Oracle-Version und der installierten BDE-Version zu geben. Da bei Softwaren vom Hersteller (in dieser Version) vom Hersteller nicht mehr gepflegt werden wird dir nichts übrig bleiben als:

1, Diese als Nicht-Lauffähig zu deklarieren und den Anwender eine Update nahezu legen
2, (Mal wieder) die BDE als eine Fehlerquelle abzulösen.
3, Dein Programm umzuschreiben das solche Konstrukte nicht mehr vorkommen (z.B. eigene Update-SQL-Scripte schreiben)
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:58 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