XClass++: inkrementelle Suche bei dsBrowseSingleChoice

Moderator: Moderatoren

Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Olaf,
irgendwie klappt das nicht richtig...
Ich habe jetzt einen zweiten Index erzeugt und auch mit in die Liste der Indizes aufgenommen:

Code: Alles auswählen

OrdCreate( quellpfad + "xxx", , "national + plz + ort", {|| iif( ( recno() % 10 ) == 0, oProgress:Advance(10), NIL), national + plz + ort })
OrdCreate( quellpfad + "xxxx", , "upper( ort )", {|| iif( ( recno() % 10 ) == 0, oProgress:Advance(10), NIL), upper( ort ) })
OrdListClear() 
OrdListAdd("xxx") 
OrdListAdd("xxxx")
Beim Aufruf der Seek-Funktion:

Code: Alles auswählen

if oBrowse:Server:seek( cSeek, .F., , @nRec, 2 )
kommt jedoch diese Fehlermeldung:
------------------------------------------------------------------------------
FEHLERPROTOKOLL von "C:\EASYDOGW\easydogw.EXE" Datum: 30.05.2008 14:02:03

Xbase++ Version : Xbase++ (R) Version 1.90.331
Betriebssystem : Windows XP 05.01 Build 02600 Service Pack 2
------------------------------------------------------------------------------
oError:args :
-> VALTYPE: N VALUE: 1
-> VALTYPE: C VALUE: B
-> VALTYPE: L VALUE: .F.
-> VALTYPE: U VALUE: NIL
-> VALTYPE: N VALUE: 0
-> VALTYPE: N VALUE: 2
oError:canDefault : N
oError:canRetry : N
oError:canSubstitute: J
oError:cargo : NIL
oError:description : Parameter hat falschen Typ
oError:filename :
oError:genCode : 2
oError:operation : seek
oError:osCode : 0
oError:severity : 2
oError:subCode : 1025
oError:subSystem : BASE
oError:thread : 1
oError:tries : 0
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Aufgerufen von _PLZBROWSE:DOSEARCH(4733)
Aufgerufen von (B)PLZBROWSE:INIT(4853)
Aufgerufen von DSXBROWSE:KEYBOARD(7561)
Aufgerufen von DSXBROWSE:HANDLEEVENT(8472)
Aufgerufen von DSDIALOG:SHOWMODAL(2858)
Aufgerufen von EDITIEREPLZ(4953)
Aufgerufen von (B)AENDEREMENU(991)
Aufgerufen von APPEXEC(208)
Aufgerufen von MAIN(775)
Die Zeile 4733 ist genau die oben zitierte mit dem Aufruf von seek - da ist aber doch der erste Parameter (in der Fehlermeldung eine 1) gar nicht angegeben!?
Wo kommt der denn her?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Ich arbeite mit xClass 3.7. Laut Hilfe:

Seek( uSearch, [lSoftSeek], [lPos], [@nFoundRec], [uIndex])
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Martin,

ich habe häufig bei Methoden gesehen, dass in der Errorlog der 1. Parameter das Objekt ist an den die Message soll (oder ist es die Message selbst ?) und erst danach die Parameter folgen die ich selbst als Parameter übergeben habe.

In solchen Fällen ist es dann schon vorgekommen, dass gar keine Parameter aufgeführt wurden aber dennoch ein Parametertypfehler moniert wurde. Meist hatte ich dann ein Problem mit dem Objekt dass die Methode ausführen sollte ...

Es könnte aber natürlich auch so sein, dass XClass intern einen Parameter erzeugt und weitergibt. Hast du den Quellcode ?
Gruß
Hubert
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

So aus der Hüfte: Du erzeugst 2 Index-Dateien? Dann ist ist unter nIndex der Indexdatei-Name anzugeben.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Hubert,
habe ich.
Aber die Fehlermeldung besagt eindeutig, dass der Fehler in der Zeile 4733 in meiner Funktion liegt.
In der Zeile 4733 steht:

Code: Alles auswählen

if oBrowse:Server:seek( cSeek, .F., , @nRec, 2 )
cSeek ist "B"
nRec ist 0
Die Fehler in dem Errorlog entsprechen also meinen Parametern - jedoch um eins nach rechts verschoben!
Ich gebe 5 Parameter mit, es werden sechs angemeckert!?
Naja, ich bin jetzt erstmal Urlaubsreif.

@Olaf: Ich nutze 4.1

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Olaf,
hatte ich auch schon probiert - sowohl den Namen mit als auch ohne Erweiterung.
Gleiche Fehlermeldung...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Für einen CDX-Index mit Tags:

Code: Alles auswählen

 
bIndex := {;
{|| OrdCreate( quellpfad + "xxxx", "1", "national + plz + ort", {|| iif( ( recno() % 10 ) == 0, oProgress:Advance(10), NIL), national + plz + ort })},;
{|| OrdCreate( quellpfad + "xxxx","2" , "upper( ort )", {|| iif( ( recno() % 10 ) == 0, oProgress:Advance(10), NIL), upper( ort ) })}
for i:=1 to len( bIndex )
   EVAL( bIndex[i])
next
BTW: Ich dachte, du willst nach einer PLZ inkrementell suchen, Du aber nach dem Ort Inizierst?
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Olaf,
bei dem Browse geht es darum, den Gesamtbestand an Plz und Orten zu überarbeiten (wenn gewünscht).
Da ist ein Suchen über den Ort sicherlich sinnvoller.
Die Sortierung soll sinnvollerweise nach Nationalität+PLZ+Ort sein.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Funktioniert

Code: Alles auswählen

Local cIndex := quellpfad + "xxx.ntx"
oBrowse:server:Seek( c, .F., .F., @nRec, cIndex )
nicht???
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Martin Altmann hat geschrieben:Aber die Fehlermeldung besagt eindeutig, dass der Fehler in der Zeile 4733 in meiner Funktion liegt.
In der Zeile 4733 steht:

Code: Alles auswählen

if oBrowse:Server:seek( cSeek, .F., , @nRec, 2 )
cSeek ist "B"
nRec ist 0
Die Fehler in dem Errorlog entsprechen also meinen Parametern - jedoch um eins nach rechts verschoben!
Ich gebe 5 Parameter mit, es werden sechs angemeckert!?
Hallo Martin,

ich wollte doch nur erklären, dass der 1. Parameter bei Methodenaufrufen vom System (oder Xclass) selbst erzeugt wird. Der Aufruf einer Methode ist ja wie das Versenden einer Nachricht mit dem (ja was nun) Object/Methode als 1. Parameter an das Object SERVER, das seinerseits dann an oBrowse weiterleitet. Ich kanns nicht besser erklären, da ich ja nur Anwender von Xbase++ bin. Ähnlich dem Aufruf von AppEvent()...
2 Parameter für die Parameter, und der dritte für das aufrufende Objekt = self wird zu self:handleEvent(....) umgelenkt.

Sicher ist, dass dein Codeblock verarbeitet wurde indem die Parameter gelesen und weitergegeben wurden. Ob aber der falsche Parameter einer von deinen 5 ist oder doch der erste, das ist nicht klar !

Eventuell ist die 1 im ersten Parameter ja auch der Selectbereich, der oBrowse:server: representiert, das müsste man dann im XClass Quellcode nachsehen können. Wenn dann XClass z.B. dies ausführt und an den Browser übergibt, aber tatsächlich kein Selectbereich existiert, da du ja ein Array hast, entsteht ein Problem. Das ist jetzt aber Spekulation.
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Olaf,
leider ändert das nichts.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Ich habe gerade Marcus mal eine Mail geschrieben und ihn gefragt, wo mein Fehler liegt.
Mal sehen, was er antwortet...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

So,
kleines Update:
Dieter hat XClass++ jetzt dahingehend erweitert, dass die Suche allgemein gültig sein soll. Bisher funktioniert sie nur für die Server-Variante!
Da ich den dsXbrowse ja über die Workarea verbunden hatte, ging das bei mir nicht.
Mal sehen, wenn das Update da ist, ob es dann geht...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo allerseits,
mit dem Update funktioniert es jetzt - leider nicht in meinem Programm :(
Und ich weiß nicht, warum!
Dieter bat mich um ein kleines Beispiel und ich habe alle relevanten Programmteile in ein extra prg ausgelagert, kompiliert und getestet - da geht es!
Merkwürdig.
Keine Ahnung, warum es bei meinem "richtigen" Programm nicht geht.
Da kann ich jetzt leider keine weitere Zeit investieren...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Der Vollständigkeit halber:
Habe doch noch ein wenig Zeit investiert und es nunmehr hinbekommen.
Es waren drei Datensätze doppelt vorhanden, was wohl den Index ein wenig durcheinander brachte.
Nachdem ich die gelöscht hatte und ausserdem sowohl Softseek als auch den Parameter zum Umpositionieren auf .t. gesetzt und den Tagnamen der Indexdatei angegeben hatte, ging es endlich!
Die betreffende Zeile lautet also in meinem Fall:

Code: Alles auswählen

lRet := oBrowse:seek( cSeek, .T., .T., @nRec, "XXXX" )
Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Antworten