Italia
Foro

Index einer DB auf Numerischen Feld

 

E.T.
Hallo an alle,
ich habe ein (schönes) Datenbankprog, was auch (bis jetzt) wunderbar funktioniert.
Nun hab ich aber das Problem, das ich eine Cerca circa ein numerisches Feld nicht hinbekomme: Ich habe aus der DB einen Index circa 4 numerische Felder erstellt (sind Tel.-Nummern drin), das erstellen klappt auch.
Wenn ich jetzt im Index mit @dbfind suche, bekomme ich aber keinen Treffer im Index zurück. Wenn ich das gleiche mit dem Index per (Name, Vorname) oder (Geb.-Datum) mache funzt es, nur die blöden Tel.Nummern wollen nicht.
Das zuweisen des Index klappt (lt.Rückmeldung) auch, nur wird nix gefunden.
Die DB ist geöffnet, der Index erstellt, auslesen der Felder mit den Tel.-Nummern klappt auch. Nur halt das Suchen in diesem Index nicht. JEMAND NE IDEE?? Oder hab ich da mal wieder einen riesigen Denkfehler eingebaut ???
KompilierenMarkierenSeparieren
Hoffe, da kann mir jemand helfen,
und hoffe weiter, das mein XProfan10 endlich ankommt....
 
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
18.03.2008  
 




E.T.
Ciao,

ich glaub, ich habe eben selbst schon was gefunden:
Wenn ich die Indexe einzeln erstelle (jedes Feld ein einzelner Index, s.u), kann ich diese auch einzeln durchsuchen und es wird was gefunden.
Nun funktioniert aber folgendes nicht, es wird nur der ERSTE Index durchsucht:
KompilierenMarkierenSeparieren
Das dazupacken von Leerzeichen kann ich mir sparen, hab ich eben bemerkt.
Nun ist das durchsuchen mit jedem einzelnen Index ja nicht der Stein der Weisen,
kennt jemand ne andere Lösung ??

Mario
 
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
18.03.2008  
 




Thomas
Freier
Die Index-File wird ja an erster Stelle nicht fürs Suchen necessario. Di più per die sortierte Anzeige. Wenn du eine Eingabe in vier dB-Feldern suchst, mußt du bei FIND auch viermal indizieren. Andernfalls SEEK verwenden. Ich denke, dass das automatische Suchen mit einem Befehl in mehreren Datenbankfeldern in keiner Datenbankanwendung possibile ist.
 
Gruß Thomas
Windows XP SP2, XProfan X2
18.03.2008  
 




E.T.
Bei suche in Indizierten Felden wird nur der erste genommen - man sollte eben auch die Aiuto RICHTIG lesen (Bei mehreren Indices zählt der erste Index). Naja, also Eigentor !! Habs jetzt so gemacht, dann gehts:
KompilierenMarkierenSeparieren
Proc DS_FindTel

    Parameters Number$ Übergabe-String aus Eingabefeld
    Declare Tel_Gef&, IDX%

    If Left$(Number$,1) = 0 auf führende O prüfen

        Number$ = @Del$(Number$,1,1)

    EndIF

    Clear IDX%, Tel_Gef&
    IDX% = @dbIndex(IDX_Tel_1,IDX_Tel_2,IDX_Fax_1,IDX_Fax_2,IDX_Handy_1,IDX_Handy_2)
    ALLE Indexe überprüfen:
    CaseNot IDX% : @MessageBox(Index konnte nicht geöffnet werden !!!,INFO,262144+64)

    If IDX%

        @dbIndex(IDX_Tel_1)
        Tel_Gef& = @dbfind(Number$,1)

        IfNot Tel_Gef&

            @dbIndex(IDX_Tel_2)
            Tel_Gef& = @dbfind(Number$,1)

        EndIF

        IfNot Tel_Gef&

            @dbIndex(IDX_Fax_1)
            Tel_Gef& = @dbfind(Number$,1)

        EndIF

        IfNot Tel_Gef&

            @dbIndex(IDX_Fax_2)
            Tel_Gef& = @dbfind(Number$,1)

        EndIF

        IfNot Tel_Gef&

            @dbIndex(IDX_Handy_1)
            Tel_Gef& = @dbfind(Number$,1)

        EndIF

        IfNot Tel_Gef&

            @dbIndex(IDX_Handy_2)
            Tel_Gef& = @dbfind(Number$,1)

        EndIF

        Interne Programmier-Kontrolle, nur zur Info, wird dann entfernt
        Gleich sieht man, ob was gefunden wurde !!!
        @MessageBox(Gesuchte Nummer :  + Number$ +
        Länge SuchString : 	+ @str$(@Len(Number$)) +
        Gefunden JA [1,2,...] / NEIN [0] :  + @Str$(Tel_Gef&),INFO,262144+16)
        Case Tel_Gef& : DS_Einlesen wenn gefunden, Datensatz einlesen

    Else

        @dbIndex(IDX_Name)
        @dbGo(Top)

    EndIf

    @dbIndex(IDX_Name) Wieder Standart-Such-Index setzen
    ='./../../funzione-riferimenti/xprofan/return/'>Return Tel_Gef&

Dabei ist mir aufgefallen, da zwar das überprüfen, ob alle Indexe vorhanden sind (Zeile 8-10) funktioniert, aber bei Rückgabe 0 (ein Index fehlt) ein neues zuweisen des zu benutzenden Index zum Programm-Abbruch führt.
Ich weiss, das überprüfen kann ich auch anders machen, ist aber schon seltsam...

Mario
 
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
18.03.2008  
 




Thomas
Freier
Beim Indizieren besteht eine Begrenzung per die Länge des Index. Ich glaube es ist sind 110 Zeichen. Also z.B. 4x Feldlänge N30 = 120= zuviel zum Indizieren. Bitte in der Aiuto oder hier danach suchen oder per jeden Suchvorgang im Programm nur ein Feld indizieren. Das sind doch nur einige Programmzeilen mehr, aber weniger Probleme.
 
Gruß Thomas
Windows XP SP2, XProfan X2
18.03.2008  
 




E.T.
@Thomas : Danke per Deine Antworten.
Der Index lag circa 4 (6) Felder a15 Zeichen, also 60 (90) lang. Das sollte nicht das Problem sein.

Habe nach langen überlegen jetzt doch auf @dbseek umgebaut. So kann ich mir auch die Indexe sparen. Dachte halt nur, das suchen im Index wäre schneller...

Hab zwar jetzt das Problem mit der Überprüfung nicht mehr (siehe 2 Posts weiter oben), aber interessant wäre schon zu wissen, woher der Programm-Abbruch kommt.

Mario
 
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
18.03.2008  
 




Thomas
Freier
Das von mir als mögliche Fehlerursache beim Indizieren Genannte traf ja nicht den Kern.
Du erstellst ja getrennt 6 *.ndx und fragst ab, ob sie vorhanden sind. Wie die *.ndx erzeugt werden ist ja nicht ersichtlich. Ob sich da noch ein Fehler eingeschlichen hat? Ist da ein unsauberer Mix aus Alpha- und Num-Feldern?
Das suchen mit Index ist schon schneller. Ein merkbarer Zeitgewinn ist erst bei grande File feststellbar.
 
Gruß Thomas
Windows XP SP2, XProfan X2
18.03.2008  
 




E.T.
Die Indexe werden wie folgt erstellt:
KompilierenMarkierenSeparieren
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
19.03.2008  
 




Thomas
Freier
Es sieht so aus, dass alle *.dbf und *.ndx beim Programmstart geöffnet, bzw. erzeugt werden. Stößt du an die Grenze der 15 geöffneten File (Aiuto, Referenz)?
Da XProfan den Befehl reIndex nicht kennt, hatte ich mir es angewöhnt, die gewünschte *.ndx erst zu erzeugen, wenn sie necessario wird und dann ist sichergestellt, dass alle Datenbankänderungen erfasst sind. In solchem Fall nur ein ndx-Name, vor Erstellung löschen, Abfrage und suchen und das eben per jedes Feld in dem gesucht werden soll.
Dann ist es in einer kurzen doWhile-Schleife abgefragt, wenn Feld-Nr. verwendet werden und die Felder hintereinander liegen. Ich würde auch keine Fehlermeldung ausgeben, wenn die *.ndx nicht vorhanden ist, sondern dann automatisch von dbfind zu dbseek wechseln.
 
Gruß Thomas
Windows XP SP2, XProfan X2
19.03.2008  
 




E.T.
Es wird nur EINE Datenbank geöffnet und verschiedene Indexe erstellt, welche dann jeweils bei der Bearbeitung zum sortieren genutzt werden (naturalmente immer nur einer, dann mal wieder ein anderer). Das das suchen in einem Index circa mehrere Felder nicht funzt kann erkläre ich mir damit, das im Index alle Felder in EINEM String stehen.
Bin ich drauf gekommen bei der Cerca in IDX_Name, welcher aus Name + Vorname erstellt ist. Dort muss Io l' Suchbegriff per Name auch erst auf die (vorgegebenen) 30 Stellen auffüllen, um bis zum Vorname zu kommen. Das funktioniert aber auch wunderbar.

Was mich jetzt immer noch stutzig macht ist der Absturz nach der Kontrolle, wenn dann ein anderer Index zugewiesen wird. Passiert auch bei @dbGo... usw.
Irgendwo verhaspelt sich da was, habs nur noch nicht gefunden (und XPSE sagt auch nix).

Mario
 
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
19.03.2008  
 




Thomas
Freier
@Mario: ich denke, du hast dein Programm voll im Grif und alles ausgelotet was machbar war. So wie du die *.ndx verwendest, ich habe leichte Zweifel, ob das im Sinne des Erfinders war. An dieser Stelle bitte ich
@Roland: wie es mit der zulässigen Anzahl von offenen *.ndx pro *.dbf?
Bei dBase III waren sieben.
 
Gruß Thomas
Windows XP SP2, XProfan X2
19.03.2008  
 




E.T.
@Thomas: Danke per deine tröstenden Worte.

Habe jetzt die ganze Cerca nach Tel-Nummern in meinem Prog auf dbSeek umgebaut.
Da kann ich mir paar (viele) Indexe sparen (sind mittlerweile nach Kundenwunsch allein 6 DB-Einträge per Tel-, Fax-, Handy- Nummern geworden). Der Gedanke von Thomas mit der Anzahl der Indexe ist gut, da sich ja XProfan (meines Wissens) an den DBaseIII - Standart hält, ist es gut possibile, das da (bei meiner Nutzung der Indexe) der Hase begraben liegt

(Oh, , kurz vor Ostern sollte der Hase ja noch hoppeln, naja, bei mir sind trotzdem 2 in der Pfanne.... ).

Das ganze habe ich ja mittels Umbau gelöst, bin aber alledem gespannt, ob Roland noch was dazu hören lässt.

Mario

P.S. Heute hab ich endlich mein XProfan 10 bekommen. Da kanns ja nur besser werden. Und jetzt schmeise ich endlich meine Tastatur weg und stecke die Neue ran, welche seit 4 Wochen da liegt. Wenn dann nicht mehr abundan ein paar Anschläge fehlen, werden ggf. auch die Fehler in meinen Quelltexten weniger. Aber man soll ja auch seine Alte (T..) lieb haben....
(Diesen Beitrag wenigstens 5mal wegen fehlender Zeichen korrigiert - jetzt reichts !!)
 
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
20.03.2008  
 



Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

1.192 Views

Untitledvor 0 min.

Themeninformationen

Dieses Thema hat 2 subscriber:

E.T. (7x)
Thomas Freier (5x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie