Fehler 7038

Advantage Database Server

Moderator: Moderatoren

Antworten
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Fehler 7038

Beitrag von ramses »

Hallo



seit einiger Zeit häuft sich beim Verschieben der Navigationsbar im Browser folgende Fehlermeldung:

Code: Alles auswählen

ADS          : 7038: Error 7038:  Invalid record number.
oError:args         :
         -> VALTYPE:N
VALUE:        39.10
canDefault   : T
canRetry     : F
canSubstitute: F
cargo        : 
description  : 
filename     : 
genCode      :       8999
operation    : DbGoPosition
osCode       :          0
severity     :          2
subCode      :       5381
subSystem    : BASE
thread       :          1
tries        :          0

CALLSTACK:
----------
Called from XBP2BROWSE:NAVIGATE(3486)

Code: Alles auswählen

 
 // Die Zeile 3486
   Eval( ::GoPosBlock, Mp2, self )
          
// Die Var ist bestückt mit 
  oBrowse:goPosBlock    := {|n| DbGoPosition(n/10) }          
          
Hat jemand eine Idee dazu ?
Valar Morghulis

Gruss Carlo
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: Fehler 7038

Beitrag von HaPe »

Hallo Carlo !
VALUE: 39.10
...
oBrowse:goPosBlock := {|n| DbGoPosition(n/10) }
Ich denke da sollte noch ein INT vor die Divison kommen:
DbGoPosition(INT(n/10))
damit keine Datensatz-Nummer 39.10 raus kommt :roll:
--
Hans-Peter
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Fehler 7038

Beitrag von Tom »

Nein, DbGoPosition nimmt einen Prozentwert und sollte deshalb eigentlich auch mit Nachkommastellen hantieren können.
Herzlich,
Tom
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Fehler 7038

Beitrag von ramses »

Hallo Hans-Peter

den Code habe vor langer Zeit ich aus den Alaska Beispielen genommen.
Mit dem Wert 39.10 wird die DbGoPosition() aufgerufen.

Ich baue da mal ein Int() ein. Und lasse den Kunden testen. Weil was ich auch mit dem Browse anstelle ich bekomme den Fehler nicht ....
Valar Morghulis

Gruss Carlo
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Fehler 7038

Beitrag von Tom »

Ich kann auf einer beliebigen, via ADS geöffneten Tabelle auch problemlos ein DbGoPosition(39.10) auslösen, mit Xbase++ 1.9 SL1 und mit Xbase++ 2.0. Und, nein, da muss kein Integer hin. Die Funktion erwartet einen Prozentwert und ermittelt daraus dann die anzuspringende Ordinalposition. Aber vielleicht tritt der Fehler auf, wenn die Tabelle genau 100 Datensätze hat? :wink:
Herzlich,
Tom
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Fehler 7038

Beitrag von ramses »

Hallo Tom

die betroffene Tabelle hat etwas über 1900 Datensätze und einen Index auf einem Datenbankfeld das nicht angezeigt wird und einen Filter der etwa 150 Sätze auswählt.

Beides soll ja nach der Funktionsbeschreibung möglich sein.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Fehler 7038

Beitrag von Tom »

Schau mal, Carlo. Das sagt die ADS-Hilfe zu Fehler 7038:
7038 Invalid record number
Problem: Attempted to read a record and the record number is greater than the number of records in the file. This error often results from using an index that contains more keys than the table has records. This can occur if a Pack or Zap is performed on the table when the index file(s) was closed.
Herzlich,
Tom
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Fehler 7038

Beitrag von ramses »

Hallo Tom

der Index ist nachgeführt passt zur DBF und ist aktuell.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Fehler 7038

Beitrag von Tom »

Mmh. Und wenn es was mit dem Filter zu tun hat? Eigenartig.
Herzlich,
Tom
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Fehler 7038

Beitrag von ramses »

Hallo Tom
Tom hat geschrieben: Mi, 01. Jul 2020 18:06 Mmh. Und wenn es was mit dem Filter zu tun hat? Eigenartig.
Genau das ist es. Der Filter. Ohne Filter keine Probleme.
Meine aktuelle Lösung: den Teil der Angezeigt werden soll in eine Temporäre Datei kopieren und dann diese anzeigen. Problem beseitigt.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Fehler 7038

Beitrag von Tom »

Es gab mit Filtern im ADS-Kontext immer mal wieder Probleme, und da sich Alaska lange sehr damit zurückgehalten hat, an der DBE etwas zu machen, sind sie auch lange in der ADSDBE verlieben. Wenn man z.B. einen Filter klassisch setzt und dann zu einer Datensatznummer springt, die durchaus der Filterbedingung genügt, steht EoF() weiter auf TRUE, es sei denn, man löst vor dem DbGoto() ein DbGoTop() aus. Mit allen anderen DBEs geht das EoF() - richtigerweise - auf FALSE. Das kann man mit einem Dreizeiler nachstellen.
Herzlich,
Tom
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Fehler 7038

Beitrag von ramses »

Hallo Tom

ADS hat schon einige Besonderheiten das ist wahr. Besondes auch Filter benötigten immer besondere Beachtung. In den vielen Jahren in welchen ich Programme zum Einsatz unter ADS geschrieben habe lehrte ich damit umzugehen. Als die erste Fassung 6.0 kam war dies ein ganz geniales Tool. Seitdem hat sich die Welt ein wenig geändert.

In unserer Agenda stand eigentlich der endgültige Abschied von ADS bereits fest. Nicht nur weil die ADS Zukunft unbestimmt ist sondern auch weil schon weite Teile der Programme auf PG portiert sind. Leider hat uns Corona die Agenda ein "wenig" durcheinander gebracht.

Ich kann aber gut mit dem aktuellen Stand der ADSDBE leben. Mit obiger Anpassung läuft es jetzt einwandfrei.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Fehler 7038

Beitrag von Tom »

Hallo, Carlo.

Oh, die ADSDBE ist sehr robust, keine Frage. Man muss nur ein paar Kleinigkeiten umschiffen, das ist alles.
Herzlich,
Tom
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Fehler 7038

Beitrag von ramses »

Hallo Tom
Tom hat geschrieben: Fr, 03. Jul 2020 12:36 Oh, die ADSDBE ist sehr robust, keine Frage. Man muss nur ein paar Kleinigkeiten umschiffen, das ist alles.
Das stimmt absolut.
Valar Morghulis

Gruss Carlo
Antworten