Seite 1 von 1

INDEX ON "1" to TEST record 10 [Erledigt]

Verfasst: Mi, 09. Aug 2017 19:13
von BJelinek
Hallo zusammen.

Ich habe mal wieder ein Migrations-Problem.

Ich erzeuge ein Temporären Index mit einem Record.

INDEX ON "1" to TEST record 10

Unter Clipper hat das wunderbar funktioniert.
Laut Beschreibung in Xbase++ sollte es auch so funktionieren.

Tut es aber bei mir nicht.
Xbase++ (R) Version 2.00.817

Mit dem Workaround
dbgoto(10)
INDEX ON "1" to TEST while recno() = 10
geht es.

Habs an Alaska gemeldet.

Code: Alles auswählen

PROC MAIN
// Irgend eine test.dbf sollte da sein
use test exclusive
do while lastrec() < 20
 append blank
enddo
nRecNr := 10
clear screen
@0,0 say "Ohne Index"
dbedit(01,00,24,79)
// Lief bis jetzt unter clipper
index on "1" to test  record (nRecNr)
OrdListClear()
set index to test
clear screen
@0,0 say "Mit Index und record"
dbedit(01,00,24,79)
// Workaround()
OrdListClear()
index on "1" to test  while recno() = nRecNr
OrdListClear()
set index to test
clear screen
@0,0 say "Mit Index und Workaround"
dbedit(01,00,24,79)
return

Re: INDEX ON "1" to TEST record 10

Verfasst: Mi, 09. Aug 2017 20:35
von AUGE_OHR
BJelinek hat geschrieben: Mi, 09. Aug 2017 19:13 Ich erzeuge ein Temporären Index mit einem Record.

INDEX ON "1" to TEST record 10
heisst das Feld "1" ?

Code: Alles auswählen

INDEX ON FIELD->"1" to TEST record 10

Re: INDEX ON "1" to TEST record 10

Verfasst: Mi, 09. Aug 2017 23:53
von BJelinek
Hallo Jimmy,

Nein "1" ist ein Konstanter Wert. Könnte auch "Hugo" heißen.

Der Index-Wert ist ja egal, es soll ja nur ein Index mit einem Satz erzeugt werden.

Re: INDEX ON "1" to TEST record 10

Verfasst: Do, 10. Aug 2017 1:14
von AUGE_OHR
BJelinek hat geschrieben: Mi, 09. Aug 2017 23:53 Nein "1" ist ein Konstanter Wert. Könnte auch "Hugo" heißen.
Der Index-Wert ist ja egal, es soll ja nur ein Index mit einem Satz erzeugt werden.
also nur der RecNO() = 10

ich habe es mit der v1.9x probiert und auch dort funktioniert das nicht

Code: Alles auswählen

   INDEX ON "1" TO "TEST.NTX" RECORD 10 NEXT 1
zumindest mit NEXT 1 dachte ich das es gehen müsste ... aber der zeigt alles an.

ein möglicher Workaround wäre auf Xbase++ CUSTOM Index umschreiben wenn es mit SCOPE nicht passt.

Code: Alles auswählen

PROCEDURE MAIN
LOCAL nRecNr := 10
   USE TIMEWORK.DBF
   BROWSE()

#IFDEF __XPP__
   // use Custom Index
   INDEX ON "1" TAG "MyCustom" TO "TEST.NTX" CUSTOM
   GOTO(nRecNr)
   OrdKeyAdd( "MyCustom")
#ELSE
   INDEX ON "1" TO "TEST.NTX" RECORD 10 NEXT 1
#ENDIF

   OrdListClear()
   set index to test
   go bottom
   BROWSE()
RETURN

Re: INDEX ON "1" to TEST record 10 [Erledigt]

Verfasst: Do, 10. Aug 2017 14:10
von BJelinek
Hallo zusammen.

Wer lesen kann ist echt im Vorteil.

Ist laut Alaska in der NTXDBE dokumentiert.

RECORD wird in Xbase++ in der NTXDBE nicht unterstützt.
im Gegensatz zu Clipper.

!!! Achtung beim Mirgrieren. Clipper --> Xbase++ !!!

Re: INDEX ON "1" to TEST record 10 [Erledigt]

Verfasst: Do, 10. Aug 2017 22:18
von DelUser01
BJelinek hat geschrieben: Do, 10. Aug 2017 14:10Ist laut Alaska in der NTXDBE dokumentiert. RECORD wird in Xbase++ in der NTXDBE nicht unterstützt.
Woher hast Du die Info?
In der Doku der Help 20 steht:
  • INDEX ON <IndexKey> [TAG <cTagName>] ;
    TO <cIndexFile> ;
    [FOR <lForCondition>] ;
    [WHILE <lWhileCondition>] ;
    [NEXT <nCount>] ;
    [RECORD <xRecordID>] ;
    [EVAL <bBlock> [EVERY <nStep>] ] ;
    [REST] ;
    [ALL] ;
    [UNIQUE] ;
    [ASCENDING | DESCENDING] ;
    [ADDITIVE] ;
    [CANDIDATE] ;
    [SUBINDEX] ;
    [CUSTOM]

    <xRecordID>
    <xRecordID> is an optional record ID (for DBF files, it is the record number). If it is specified, only the specified record is copied into the index.

Re: INDEX ON "1" to TEST record 10 [Erledigt]

Verfasst: Do, 10. Aug 2017 22:21
von AUGE_OHR
DelUser01 hat geschrieben: Do, 10. Aug 2017 22:18
BJelinek hat geschrieben: Do, 10. Aug 2017 14:10Ist laut Alaska in der NTXDBE dokumentiert. RECORD wird in Xbase++ in der NTXDBE nicht unterstützt.
Woher hast Du die Info?
NTXDBE (ORDER-Komponente)
Spezifikation für NTX-Dateien

Element Spezifikation
Dateigröße Limitiert auf den Offset für Satzsperren
Der Standard ist 1 GB (10^9 Bytes)
Datentypen C, D, L, N, kein Memo
Maximale Länge für:
- Indexausdruck 255 Zeichen
- FOR Bedingung 255 Zeichen
- TAG Name 10 Zeichen
Indizes pro Datei Einer
FOR Ausdruck Wird unterstützt
TAG Ausdruck Wird unterstützt
WHILE Ausdruck Wird unterstützt *)
EVAL..EVERY Option Wird ignoriert
RECORD Option Wird ignoriert
ALL..NEXT..REST Option Wird ignoriert

SET CHARSET Index basiert immer auf dem OEM Zeichensatz

*) Ab Xbase++ Version 1.9

Re: INDEX ON "1" to TEST record 10 [Erledigt]

Verfasst: Do, 10. Aug 2017 22:53
von DelUser01
Hallo Jimmy,

da muss einer wirklich an allen Stellen suchen und alle Zeilen lesen.

Bestimmt gibt es noch (alte) Dokus für die Umstellung Clipper -> Xbase++ die Bernd helfen solche Hürden zu nehmen.