Schlüsselspalteninformations fehler

  • VB6

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Orakel.

    Schlüsselspalteninformations fehler

    Hi Leute.

    Habe ein Problem mit einer Datenbank abfrage und bräuchte etwas Hilfe

    Ich versuche mit Hilfe einem SELECT Statemant 1 zeile von einer tabelle auszulesen.

    Fehlermeldung kommt diese:
    "Die Schlüsselspalteninformationen sind ungenügend oder inkorrekt. Es sind zuviele Zeilen von der Aktualisierung betroffen!"

    SELECT Zahl FROM tabelle WHERE id = '1'

    so in etwas siehts aus.. wenn ich dann per rs!Zahl = "5" dem Feld den wert zuweiße, kommt die oben genannt fehlermeldung..

    das komische daran ist, das sie einmal kommt und einmal nicht.. wie es gerade kommt -_-

    evtl liegts daran das ab und zu kommastellen drinnen sthen?

    jemand erfahrung?

    mfg
    Hallo Niedi,

    ich nehme mal an, Du verwendest eine Jet-Db (Access).
    Die Tabbellendefinition ist inkorrekt: Du hast kein Primärschlüssel auf der Tabelle.

    Füge eine neue Spalte zur Tabelle hinzu, mit dem Einstellungen ...moment, muß mal selber schauen... Feldname=Key|Felddatentyp=AutoWert.

    Das nachträgliche Hinzufügen wird je nach Anzahl Tupel (Füllhöhe) und Anzahl Splaten eine Weile dauern.

    Danach VB wieder starten und erneut versuchen.
    I'hoffe es hilft.

    <hr>

    I'war zu schnell:
    Die neue Spalte muß natürlich als Primärschlüssel angegeben werden. Im Entwurfsmodus Spalte markieren und entw. über Kontextmenü oder über Schlüssel-Symbol oder im Menü "Bearbeiten" diese Option wählen.

    Ciao:
    GG ;)

    Edit by Agent: Keine Doppelposts, siehe Boardregeln!

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

    hi GG71

    Danke für die Antwort.

    Jedoch stimmt deine Antwort nicht ganz ;) Meine Spalte hat sehrwohl einen Primärschluessel gehabt.

    Der Fehler liegt nicht am Programmtechnischen Teil, so wie es mir nun aufgefallen ist, sondern an einem kleinen Bug von Access..

    Wenn man aus einer Tabelle 1 Spalte seleketiert, dies jedoch nicht der Primärschlüssel ist, so kommt es komischerweiße ab und zu zu fehlern.

    Wenn man jedoch noch die Primärschlüsselspalte dazuseleketiert, ist dieser Fehler weg.

    Liegt also rein Logisch an der Datenbank.

    Dennoch danke für deine Mühe ;)

    Aber da ich bereits ein nächstes Problem habe, erstell ich mal gleich einen neuen Thread :D

    mfg Niedi
    Natürlich ist das kein Bug von Access sondern ein ganz normales (und korrektes) Verhalten von jeder relationalen DB. Wenn du selektierst und im Recordset dann änderst und das update in die Db ausführen willst, wird versucht den korrekten Satz anhand jenem im Recordset wieder zu finden. Nachdem du aber die Primärschlüsselinformation nicht mitselektierst hast du ja keine Verbindung von deinem selektierten Satz und dem zugehörigen Satz in der DB.

    supergreg
    Und wenn du meinen ersten Post lesen würdest, hättest du bemerkt, das der Fehler bei der Selektabfrage auftrat, ohne das ich etwas im recordset verändert habe oder upgedatet habe.

    Demnach ist dieser Fehler nicht wirklich korrekt, da der Fehler ja eigentlich erst auftreten dürfte, wenn ich wieder was reinschreibe, da er sich dann evtl nicht mehr auskennen könnte.

    jedoch wenn ich "SELECT Vorname FROM Tabelle WHERE ID LIKE 1" dann ist es ganz klar, welche Daten ich auslesen möchte, und was nicht.

    deshalb ist es in meinen Augen ein Datenbank bug, der jedoch nicht wirklich schwerwiegend ist.

    Fals das jemand anders sieht, bitte posten. vielleicht habt ihr ne logischere lösung oder was weiß ich ;)

    danke

    mfg Niedi
    Also hier mal meine bescheidene Meinung zu dem Thema. Ein SQL Statement wie "SELECT Zahl FROM tabelle WHERE ID = 1" funktioniert auch in Access (2002) einwandfrei. Und ein Updaute auf die selektierte Spalte erzeugt auch keinen Fehler, wenn das vorherige SELECT statement auch wirklich einen Datensatz gefunden hat. Was mich mir als Programmierer zu denken geben würde ist die Tatsache, dass eine "WHERE ID LIKE" zu keinem Fehler führt.

    Mir stellen sich ganz andere Fragen:

    1) Welche Access Version
    2) Warum wird ID als String gesucht. Ne ID sollte aus meiner Sicht ne Zahl sein.
    3) Wird nach dem SELECT Statement auch auf eine erfolgreiche Ausführung geprüft. Denn ich gebe Supergreg recht. Ist rs.recordcount 0, würde die nächste Anweisung dazu führen, dass alle Zeilen der Tabelle in der Spalte "Zahl" (btw ist Zahl ein Datentyp in Access und hat als Spaltennamen nix zu suchen) mit dem Wert 5 gesetzt werden. Das wiederum könnte dazu führen, dass ein Table-Lock gesetzt werden soll, was bei großen Tabellen wenn die Parameter nicht korrekt gesetzt sind zu Deiner Fehlermeldung führen kann.
    4) Wie sieht die komplette Code Sequenz aus. Fragmente erleichtern eine Fehleranalyse in keinster Weise.

    Gruß
    ein fragendes Orakel

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