1.9 RC1, MS SQL - Internal data structures corrupted

alles was zunächst nicht kategorisierbar ist

Moderator: Moderatoren

Gesperrt
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

1.9 RC1, MS SQL - Internal data structures corrupted

Beitrag 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?
Gruß,

Andreas
VIP der XUG Osnabrück
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Andreas,
um ein Memofeld zu lesen, gibt es doch die Funktion MemoRead()!?

Viele Grüße,
Martin
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Beitrag 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.
Gruß,

Andreas
VIP der XUG Osnabrück
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag 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
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Beitrag 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.
Gruß,

Andreas
VIP der XUG Osnabrück
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag 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...
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag 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
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:

Beitrag 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?
Herzlich,
Tom
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Beitrag von andreas »

Hallo Tom,
Auf einem SQL-Server, aber in FOXCDX-Dateien? Wie geht denn das?
ich meinte die FoxPro-Dateien (dbf und cdx).
Gruß,

Andreas
VIP der XUG Osnabrück
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Beitrag von andreas »

Hallo Leute,

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

Andreas
VIP der XUG Osnabrück
Gesperrt