Seite 1 von 1

1.9 RC1, MS SQL - Internal data structures corrupted

Verfasst: Di, 08. Nov 2005 11:46
von andreas
Hallo Leute,

Ich habe versucht, unser Programm auf XBase++ 1.9 RC1 von 1.82 umzustellen.
Die Daten liegen auf dem Microsoft SQL Server und in FoxCdx-Dateien. Da das Programm im Netzwerk benutzt wird, gehen ständig die Indexdateien kaputt. Deswegen wollte ich mit der neuen Extended-Sperrung aus der neuen Version versuchen, das Problem zu beseitigen. Leider bekomme ich bei dem Zugriff auf SQL-Daten schon beim
Ansprechen eines Text-Feldes (Memo) in mehereren Tabelle folgenden Fehler:

Code: Alles auswählen

oError:args         :
           -> NIL
oError:canDefault   : N
oError:canRetry     : Y
oError:canSubstitute: N
oError:cargo        : NIL
oError:description  : Internal data structures corrupted
oError:filename     :
oError:genCode      :         41
oError:operation    :
oError:osCode       :          0
oError:severity     :          2
oError:subCode      :          5
oError:subSystem    : BASE
oError:thread       :          5
oError:tries        :          1
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Aufgerufen von DATENTHREAD:VERLAUFDATEN(1689)
Aufgerufen von DATENTHREAD:ERSTELLENOFFEN(2124)
Aufgerufen von DATENTHREAD:EXECUTE(180)
Die Zeile, wo der Fehler auftritt, sieht so aus:

Code: Alles auswählen

if len(alltrim((DBVERLAUF)->V_BEMERKUN))>50
Was kann das sein? Ist das ein Bug in XBase und was kann ich dagegen tun, um
die Umstellung durchzuführen?

Verfasst: Di, 08. Nov 2005 11:49
von Martin Altmann
Hallo Andreas,
um ein Memofeld zu lesen, gibt es doch die Funktion MemoRead()!?

Viele Grüße,
Martin

Verfasst: Di, 08. Nov 2005 11:53
von andreas
Hallo Martin,

Memoread() ist zum Lesen der Dateien da.
Die Memofelder kannstu immer direkt wie auch die andere ansprechen, was anscheinend bei meinem Problem nicht funktioniert, obwohl es in der 1.82-Version funktioniert.

Verfasst: Di, 08. Nov 2005 12:09
von Martin Altmann
Andreas,
ich hatte Deinen Source so verstanden, dass Du wissen willst, wie viel Text in Deinem Memofeld steht - und das geht doch nur mit MemoRead(), oder nicht??
Versuch es doch mal einfach.

Viele Grüße,
Martin

Verfasst: Di, 08. Nov 2005 12:37
von andreas
Hallo Martin,

ich habe ein Tabellenfeld mit dem "Memo"-Typ ("Text" unter SQL). In einer normalen DBF-Datei kann ich das Feld direkt ansprechen und manipulieren. Genauso konnte ich das Feld aus der SQL-Abfrage unter XBase++ 1.82 ansprechen, um die dort gespeicherten Werte abzufragen. Das funktioniert aber unter XBase++ 1.9 RC1 nicht. Egal wie, aber sobald ich das Feld nur anspreche, kommt es zu dem Laufzeitfehler. In der Zeile, die ich aus meinem Quelcode eingetragen habe, möchte ich nur abhängig von der Länge des eingegeben Wertes unterschiedliche Funktionen ausführen lassen. Das Programm bricht aber in dieser Zeile ab, die mit der Nummer 1689 in der Fehlermeldung aufgeführt ist.

Memoread ist nur zum lesen einer z.B. Textdatei von einem Laufwerk da, die mir hier nicht bringen wird.
Ich muss nur wissen, warum das Programm beim ansprechen eines Tabellenfeldes abstürzt, um das Problem zu beseitigen.

Verfasst: Di, 08. Nov 2005 12:43
von Martin Altmann
Sorry, dann kann ich Dir leider auch nicht weiterhelfen.

Viele Grüße,
Martin

P.S. Das heißt, ich habe mal was darüber in den Alaska-Newsgroups gelesen (Data-Access, glaube ich) und das war (meiner Meinung nach) auch schon vor dem RC1. Habe es mir aber nicht gemerkt, da es mich nicht betraf...

Verfasst: Di, 08. Nov 2005 19:38
von Martin Altmann
Hallo Andreas,
kannst Du Dein Konstrukt mal ein wenig auseinanderziehen und Dir die einzelnen Ergebnisse im Debugger anschauen?
Also statt

Code: Alles auswählen

if len(alltrim((DBVERLAUF)->V_BEMERKUN))>50
schreibst Du

Code: Alles auswählen

bla := (DBVERLAUF)->V_BEMERKUN
if len(alltrim(bla))>50 
Im Debugger setzt Du den Breakpoint auf die IF-Zeile und schaust Dir mal den Inhalt von der Variablen bla an.
Wahrscheinlich wird dort NIL stehen!
Es gibt in der Knowledgebase von Alaska einige Einträge zu der ODBCDBE und Memofeldern.

Viele Grüße,
Martin

Verfasst: Di, 08. Nov 2005 22:14
von Tom
Hallo, Andreas.

Ich muß ehrlich sagen, ich scheitere schon an der Ausgangssituation:
Die Daten liegen auf dem Microsoft SQL Server und in FoxCdx-Dateien.
:shock:

Auf einem SQL-Server, aber in FOXCDX-Dateien? Wie geht denn das?

Verfasst: Mi, 09. Nov 2005 8:59
von andreas
Hallo Tom,
Auf einem SQL-Server, aber in FOXCDX-Dateien? Wie geht denn das?
ich meinte die FoxPro-Dateien (dbf und cdx).

Verfasst: Do, 10. Nov 2005 19:07
von andreas
Hallo Leute,

das Problem hat sich erledigt.
Alaska ist noch dabei, die ODBC-Umstellung auf die neue Version durchzuführen.