DAO, MultiIndex und Seek

  • VB6

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ZiG.

    DAO, MultiIndex und Seek

    Hi Leute.

    Hab hier wieder ein Problem mit DAO, wo ich keine Lösung finde.
    Ich lasse beim Programmstart überprüfen ob die Datenbank existiert und gegebenenfalls erstellen.

    Also alles Spalten und dazu einen Index.
    Gut. Das funktioniert auch tadellos und das auffinden von Einträgen per Seek stellte auch nie ein Problem dar.

    Jetzt bräuchte ich es aber so, das für zwei Spalten ein Index erzeugt wird.
    Das hab ich auch noch hinbekommen. Denke ich jedenfalls.

    Quellcode

    1. Set nTableDef = HDb.TableDefs("NameTable")
    2. 'Index erstellen
    3. Dim nIndex As DAO.Index
    4. Set nIndex = nTableDef.CreateIndex("NameIndex")
    5. With nIndex
    6. .Primary = True
    7. .Required = True
    8. .IgnoreNulls = False
    9. End With
    10. '1. Spalte
    11. Set nField = nIndex.CreateField("Vorname")
    12. nIndex.Fields.Append nField
    13. '2. Spalte
    14. Set nField = nIndex.CreateField("Nachname")
    15. nIndex.Fields.Append nField
    16. Set nField = Nothing
    17. 'Index Hinzufügen
    18. nTableDef.Indexes.Append nIndex
    19. Set HDb = Nothing
    20. Set nTableDef = Nothing


    Alle Variablen sind natürlich deklariert und es wird auch ohne Probleme ausgeführt.

    So. Jetzt dachte ich, es werden bei einer Suche per Seek beide Spalten "Vorname" und "Nachname" durchsucht.
    Aber es gibt mir dann immer nur die Einträge aus Vorname aus.

    Quellcode

    1. Tb.Index = "NameIndex"
    2. Tb.Seek Chr$(61), strInput
    3. If Not Tb.NoMatch Then
    4. '...
    5. Else
    6. '...
    7. End If



    Auf Seek möchte ich hier eigentlich nicht verzichten, da es schneller ist als Tb.Find...
    Aber wenn es anders nicht geht muß ich wohl darauf verzichten.

    Ich hoffe es kann mir jemand von euch einen Tipp geben.

    mfg, ZiG
    Hoffe mal dass dies nicht verboten ist.
    Nach 20 Tagen hat sicher keiner ein Problem damit.

    Ich hab leider nüsse die Ahnung von DAO :(
    Du meinst ja, dass es mit .Find geht, warum machst dus nicht damit? Ist die Datenbank so groß, dass es zu langen Wartezeiten kommt?
    Ja, die Db ist schon relativ groß.
    Und mit .FindFirst etc. müßte ich einmal in Vorname und einmal in Nachname suchen lassen.
    Die Wartezeit würde sich also gleich verdoppeln.

    Aber mir bleibt wohl nichts anderes übrig.

    Danke trotzdem. ZiG
    Hey ZiG,

    was mir so ad hoc in Deinem Quellcode auffällt ist, dass Du zwar einen zusammengesetzten Index definiert, aber die entsprechenden Felder nicht angegeben hast. So würde ich

    Visual Basic-Quellcode

    1. Set nIndex = nTableDef.CreateIndex("Name")
    2. nIndex.Fields = "Nachname;Vorname" ' Fehlt diese Zuweisung bei Dir!?

    einfügen, um dann später mit

    Visual Basic-Quellcode

    1. Tb.Index = "Name"
    2. Tb.Seek Chr$(61), strInputNachname,strInputVorname

    darin mit Seek zu suchen.

    Das Ganze nur als Denkanstoß - ich hab es nicht ausprobiert!
    mfG DHB

    Ich meine:
    :P Es sollten nur ernstzunehmende Beiträge eingestellt werden!
    :( Beiträge, die nur deren Anzahl in die Höhe treiben sollen, stehlen Lesern deren Zeit und schenken nur Frust.
    ;) Wenn ein Autor sein Thema für erledigt hält, sollte er dies kurz als letzten Eintrag vermerken.
    8) Leser wüssten dann, dass hier weitere Beiträge nicht mehr sinnvoll sind.
    Dachte jetzt eigentlich auch das könnte der Grund sein, aber nein, es funktioniert trotzdem nicht.
    Hab noch bisschen rumprobiert, aber mir fällt nichts mehr ein.

    Vielleicht finde ich noch per google eine Erklärung zum Index erstellen mehrerer Tabellen.


    Edit//

    Ist schon sehr eigenartig.
    Alles was ich bisher mit google gefunden habe ist eigentlich das selbe wie ich es gemacht habe. Nur oft verkürzt.

    Beispiel1:

    Visual Basic-Quellcode

    1. Set Idx = TD.CreateIndex("idxIDPos")
    2. Idx.Fields.Append TD.CreateField("ID")
    3. Idx.Fields.Append TD.CreateField("Pos")


    Beispiel2:

    Visual Basic-Quellcode

    1. Set ix = tdef.CreateIndex("Name")
    2. ix.IgnoreNulls = False
    3. ix.Primary = False
    4. ix.Required = True
    5. ix.Unique = True
    6. 'define index field(s)
    7. Set fd = ix.CreateField("Surname")
    8. ix.Fields.Append fd
    9. Set fd = ix.CreateField("FirstName")
    10. ix.Fields.Append fd


    Index erstellen funktioniert meiner Meinung nach auch wunderbar, nur Seek durchsucht immer nur das erste zugewiesene Feld.
    Vielleicht verstehe ich da was falsch. Ich dachte mir eigentlich man könnte so per Seek auch mehrere Spalten durchsuchen.

    Ich werds wohl dabei belassen und einen anderen Weg versuchen.

    Vielen Dank nochmal, ZiG

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ZiG“ ()