oCursor:seek() findet nur 1. Zeichen

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

oCursor:seek() findet nur 1. Zeichen

Beitrag von satmax »

Ich kämpfe mit SQL Express... :)

Code: Alles auswählen

 
oCursor := SQLSelect():new("SELECT * FROM Adressen where KundenNR > 0 ORDER BY Name1", oConn,SQL_CONCUR_VALUES, SQL_CURSOR_DYNAMIC)
... some code

lFound:=:=oCurs:seek('b',,.t.)
Finden den ersten Eintrag in der DB:

B & H .....

Gebe ich mehr als ein Zeichen an wird nichts mehr gefunden und lFound ist immer .f.

Code: Alles auswählen

 lFound:=:=oCurs:seek('bm',,.t.)
 lFound:=:=oCurs:seek('bmw ag',,.t.)
In der MMC finde ich mit

Code: Alles auswählen

SELECT Name1, KundenNr, ort1, strasse1  FROM Adressen where Name1 like 'bmw ag'
sehr wohl einen Datensatz.
Gruß
Markus
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:

Re: oCursor:seek() findet nur 1. Zeichen

Beitrag von brandelh »

warum suchst Du nicht per select genauer nach dem Datensatz, das ist doch viel schneller ?

:=:= :?:
Gruß
Hubert
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: oCursor:seek() findet nur 1. Zeichen

Beitrag von satmax »

brandelh hat geschrieben:warum suchst Du nicht per select genauer nach dem Datensatz das ist doch viel schneller ?
Weil ich heute noch nicht weiß was mein Kunde morgen sucht.. :) :) :)

Spass beiseite, ich zeige die Stammdaten an und öffne zum Suchen einen Browser, im Browser wird nach jedem Tastendruck (ASCII Zeichen) der Suchstring sofort ausgewertet und das Ergebnis angezeigt (Inkrementelle Suche ). Mit dbSeek() hat das super funktioniert.

Außerdem, es muss ja einen Grund geben warum oCursor:seek() das nicht findet.

Gruß
Markus
Gruß
Markus
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:

Re: oCursor:seek() findet nur 1. Zeichen

Beitrag von brandelh »

sorry ich habe dies so noch nicht benutzt.
PS: ich tippe hier auf dem Smartphone ;-)
Gruß
Hubert
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: oCursor:seek() findet nur 1. Zeichen

Beitrag von satmax »

bist am treffen?
Gruß
Markus
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:

Re: oCursor:seek() findet nur 1. Zeichen

Beitrag von brandelh »

Genau :-)
Gruß
Hubert
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: oCursor:seek() findet nur 1. Zeichen

Beitrag von satmax »

Wenn ich das ganze nur halbwegs richtig kapiert habe, sucht oCurs:seek('b',,.t.) ja gar nicht mehr in der Datenbank sondern nur mehr im Tabellenobjekt im Hauptspeicher (oCurs)?
Gruß
Markus
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:

Re: oCursor:seek() findet nur 1. Zeichen

Beitrag von brandelh »

satmax hat geschrieben:Wenn ich das ganze nur halbwegs richtig kapiert habe, sucht oCurs:seek('b',,.t.) ja gar nicht mehr in der Datenbank sondern nur mehr im Tabellenobjekt im Hauptspeicher (oCurs)?
Ist das jetzt eine Frage ?

genau so !
Gruß
Hubert
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: oCursor:seek() findet nur 1. Zeichen

Beitrag von satmax »

Dann hat das :Seek() ja gar nichts mehr mit der SQL Datenbank zu tun, hier geht es rein um SQL Express. Ich weiß inzwischen das :seek() case sensitv sucht, das erklärt aber auch nicht alles (Sonderzeichen sind da noch nicht im Spiel, denke ich zumindest...). Vor allem möchte ich das umstellen auch nicht case sensitiv finde aber in der Doku keinen Hinweis.

Gruß
Markus
Gruß
Markus
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:

Re: oCursor:seek() findet nur 1. Zeichen

Beitrag von brandelh »

oCursor:Seek() ist xbase syntax und durchsucht die Trefferliste des SQL select Befehles.
Gruß
Hubert
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: oCursor:seek() findet nur 1. Zeichen

Beitrag von satmax »

Select wird richtig ausgeführt und ich habe alle Daten im Browser (sichtbar) und kann durchblättern. Das ganze ist eine simple Adresstabelle, manche Namen sind als ganzes groß geschrieben, bei den meisten nur der Anfangsbuchstabe.

Gebe ich die exakte Schreibweise ein, wird der Datensatz gefunden (Softseek)

B == Bacher
Ba == Bacher
ba == eof

Ist der Name als ganzes groß geschrieben wird gar nichts gefunden:

"BAHNHOF" gib es als Name, lässt sich aber nicht suchen. Lege ich einen Satz mit "Bahnhof" an, kann ich mit "B" oder "Bah" danach suchen.

wie kann ich jetzt :seek() dazu veranlassen die Groß- Kleinschreibung zu ignorieren? IMHO ist das doch ein Standardproblem das jeder haben muss der mit SQLExpress arbeitet.

Gruß
Markus
Gruß
Markus
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: oCursor:seek() findet nur 1. Zeichen

Beitrag von georg »

Hallo, Markus -


viele Fragen ...

1. alle Vergleichsoperationen INNERHALB von Xbase++ (und damit auch innerhalb von SQLExpress) verlaufen nach Xbase++-Regeln, und da wird nach Gross- und Kleinschreibung unterschieden.

2. vielleicht ist der Ansatz falsch?

Code: Alles auswählen

SELECT COUNT(*) FROM table WHERE Feld < 'Suchbedingung'
Du bekommst ein Result Set mit einem Feld zurück, und dieses Feld gibt an, wieviele Sätze VOR dem gesuchten Satz liegen. Diese Auswertung ist oft schneller als das Durchsuchen des Result Sets. Think SQL!

3. SQLSelect():seek() funktioniert nur auf das Feld, das in der SELECT-Anweisung als ORDER BY definiert wurde.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: oCursor:seek() findet nur 1. Zeichen

Beitrag von satmax »

Das wird schwierig....

keine Chance das mit :seek() hinzuekommen? Wobei auch bei XBase Syntax (Vergleich), nicht erklärbar ist, warum "Bahnhof" mit der Suche nach "Bah" gefunden wird, "BAHNHOF" aber weder mit "BAH" oder "BAHNHOF" gefunden wird.

Das mit :seek() ist echt schade und macht unnötig viel Arbeit...

Du meinst ich hole mir mit SQLSelect():New() ein 2. Cursorobject, das liefert mir dann einen Zähler mit 4711 Sätzen.
Im Browser gehe ich dann auf top() + 4711 (+1)
Gruß
Markus
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: oCursor:seek() findet nur 1. Zeichen

Beitrag von georg »

Hallo, Markus -


ja, genau das ist mein Ansatz: frage den SQL-Server, und richte Dich danach.

Ansonsten: Du kannst bei Boris die Professional Version kaufen (heisst irgendwie anders), dann bekommst Du den Quelltext, den kannst Du dann an Deine Wünsche anpassen. Mein Arbeitgeber hat diese Lizenz, daher konnte ich eben mal in die entsprechende Funktion reinschauen.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
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:

Re: oCursor:seek() findet nur 1. Zeichen

Beitrag von brandelh »

Unter Xbase ist Groß-/Kleinschreibung normalerweise eben nicht gleich !
Eventuell ist :locate() mit upper/lower sinnvolle.

SQL muss man lernen und je genauer man sucht SQL umso schneller wirf es laufen
Gruß
Hubert
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: oCursor:seek() findet nur 1. Zeichen

Beitrag von satmax »

georg hat geschrieben: 2. vielleicht ist der Ansatz falsch?

Code: Alles auswählen

SELECT COUNT(*) FROM table WHERE Feld < 'Suchbedingung'
Du bekommst ein Result Set mit einem Feld zurück, und dieses Feld gibt an, wieviele Sätze VOR dem gesuchten Satz liegen. Diese Auswertung ist oft schneller als das Durchsuchen des Result Sets. Think SQL!
DANKE Georg, das hat super funktioniert! Dabei waren nur wenige Zeilen Codeänderung erforderlich!

Ich habe Dich in meinem Sourcecode für ewig vermerkt! ;)

Gruß
Markus
Gruß
Markus
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:

Re: oCursor:seek() findet nur 1. Zeichen

Beitrag von brandelh »

eben habe ich auf einer Web-Site zu SQL gelesen, dass UCASE, LEFT etc. ... Funktionen sind, die man beim Select einsetzen kann, versuche doch mal:

Code: Alles auswählen

... WHERE ucase(name) like 'XYZ%'
das müsste alle finden, die linksbündig mit XYZ egal ob Groß-/Kleinbuchstaben anfangen ...
Du solltest dir auch Georgs Vortrag zu MySQL ansehen, vieles dort gilt für alle SQL (Server) - Anwendungen
Gruß
Hubert
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: oCursor:seek() findet nur 1. Zeichen

Beitrag von satmax »

Danke, das mit SQL und TD Inkrementellen Suche funktioniert schon ganz gut. Clayton will das sogar ins nächste Release übernehmen. Nur er hat noch einen Fehler, der tritt aber nur bei Ihm auf. Wahrscheinlich weil er eine älterer SQLExpress Version verwendet. Wenn ich seinen Beispielprogramm compiliere passt es...

Bei der Gelegenheit habe ich TD auch gleich um den Datentype nvarchar erweitert. :)

Das Problem ist die oCursor:seek() Funktion, die kann nicht mehr. Aber mit reinem SQL geht das ganz gut und der Tipp von Georg hat mich voll auf die Sprünge gebracht. :)

Ich muss jetzt zwar alles wieder umdrehen was ich in den letzten Wochen programmiert habe, geht aber schon ganz gut. Der Vorteil ist, ich hatte alle Daten bereits in der SQL Datenbank, der Import war schon fertig (mein Kollege hat das vor einiger Zeit mit VC++ programmiert ). So kann ich gleich voll loslegen.

Wie war das Forentreffen? Alle wieder gesund nach hause gekommen?

Gruß
Markus
Gruß
Markus
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: oCursor:seek() findet nur 1. Zeichen

Beitrag von satmax »

brandelh hat geschrieben: Du solltest dir auch Georgs Vortrag zu MySQL ansehen, vieles dort gilt für alle SQL (Server) - Anwendungen
Wo gibt es diesen Vortrag?
Gruß
Markus
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: oCursor:seek() findet nur 1. Zeichen

Beitrag von Manfred »

im Mitgliederbereich
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
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:

Re: oCursor:seek() findet nur 1. Zeichen

Beitrag von brandelh »

Ach so ...
Gruß
Hubert
Antworten