DELETE TAG

12/12/2008 - 00:50 von Matthias Kahlert | Report spam
Ich steh grad etwas aufm Schlauch, vielleicht könnt ihr mir weiterhelfen.

Ich will eigentlich nur (vor einem größeren Datenimport) die Indizes
einer Tabelle löschen, dann die Daten importieren, und dann die Indizes
neu erstellen.

Zuerst wollte ich es ganz einfach machen: Vor dem Import ein DELETE TAG
ALL, dann der APPEND, und am Ende ganz einfach wieder eine INDEX ON...

Aber: Sporadisch (vor allem bei großen Tabellen) bekam ich dann immer
wieder den Fehler 1561 "Database is invalid. Please validate" und er
meckert mir eine der Tabellen an, dass die Indizes nicht passen.

Also gut, dachte ich mir, lösche ich halt nur die ganzen Indizes und
lass nur meinen Index auf DELETED() drin, dann is der Index wenigstens
schön klein.
Aber denkste: Der DELETE TAG Befehl haut irgendwie nicht hin...

Eigentlich simpel:

PROCEDURE DeleteTagOfTable ( tcTable AS String )
LOCAL lnC, lnI, llXDel, lcCmd, lcTag
LOCAL ARRAY laTags[1,1]
lnC = ATAGINFO(laTags, tcTable)
FOR lnI = 1 TO lnC
IF ALLTRIM(LOWER(laTags[lnI,1])) <> "x_del" THEN
lcTag = ALLTRIM(laTags[lnI,1])
lcCmd = "DELETE TAG "+lcTag+" OF "+tcTable
&lcCmd
ENDIF
ENDFOR
ENDPROC

Das tolle ist nun:
In der Entwicklungsumgebung funktioniert's, aber in der EXE geht es
nicht! Da kommt der Fehler 1683 "Indexname wurde nicht gefunden".

Ich hab schon alles probiert, den Indexnamen in Anführungszeichen,
voller Pfad zur CDX, mit ".cdx" hinten dran und ohne, nur mit relativem
Pfad, etc.
Eigentlich kann man doch da nicht viel falsch machen?

Matthias Kahlert
[MaxPro] Software
http://www.max-pro.de
 

Lesen sie die antworten

#1 Jochen Wilberding
12/12/2008 - 02:37 | Warnen spam
Matthias Kahlert schrieb:

Ich will eigentlich nur (vor einem größeren Datenimport) die Indizes
einer Tabelle löschen, dann die Daten importieren, und dann die Indizes
neu erstellen.



mal ne ganz blöde Idee:

i) du importierst nicht in die Originaltabelle, sondern in eine *freie Tabelle*
ii) du schließt die Datenbank
iii) kopierst die *freie Tabelle* auf den Originalnamen
iv) ersetzt im Header den DB-Namen und cdx (da war doch was)
v) du machst n Reindex...



bis die tage
jochen

PS: bitte melden Sie sich, wenn Sie diese Nachricht NICHT erhalten haben!

Ähnliche fragen