Anzeige:
Ergebnis 1 bis 8 von 8

Thema: trigger, sequence, increment, ORACLE + ACCESS ... inkrementiert keinen primar-key

  1. #1
    Registrierter Benutzer
    Registriert seit
    04.04.2008
    Beiträge
    50

    Exclamation trigger, sequence, increment, ORACLE + ACCESS ... inkrementiert keinen primar-key

    Hallo!

    Ich habe folgendes Problem, an dem ich schon ein paar Tage am knappern bin ... aber irgendwie komme ich hier einfach nicht weiter. Selbst zeitaufwändige google-Suche hat mir nicht weiterhelfen können.


    Ich habe via sequence und trigger über den primärschlüssel ein increment laufen. wenn ich via sql statement einen datensatz hinzufüge funktioniert das mit dem inkrementieren auch.

    Nur sobald ich mit access einen datensatz via formular hinzufügen möchte, werden zwar alle daten in die datenbank übertragen ... nur der primärschlüssel nicht inkrementiert. Es wird immer der erste Datensatz überschrieben.

    Ich ging eigentlich davon aus das ich mich um die Primärschlüssel nicht mehr kümmern müsste, da sich die trigger dieser annehmen. nur irgendwie habe ich das Gefühl das über ACCESS die Trigger nicht "angestoßen" werden, wenn ich einen Datensatz in die Datenbank speichere.


    Hier mal der Code:

    PHP-Code:
    CREATE SEQUENCE person_inkrement
        START WITH 10
        INCREMENT BY 1
    ;

    CREATE TRIGGER person_inkrement_trigger
            BEFORE INSERT ON person
            
    FOR EACH ROW
                BEGIN
                    SELECT person_inkrement
    .NEXTVAL INTO :NEW.pnr FROM DUAL;
                
    END;

    get ../plsql/person_inkrement_trigger;
    run    



    insert into person
    (p_personalp_namep_vornamep_gekennp_gebdatp_berufvalues (124,'max','mustermann','m''01.01.2008''maurer'); 

    also ... beim INSERT kann ich auf die spalte des primärschlüssel gänzlich verzichten. Das funktioniert ja auch alles bestens.



    NUR ECCESS macht mir Probleme.

    Ich bin für jede Hilfe sehr Dankbar! Ich will endlich verstehen an was das wohl liegen könnte.

    Vielen Dank für eure Zeit


    Gruss Chito

  2. #2
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    schalte mal den ODBC-Trace ein und schau Dir an, was Access da an Oracle rüberschickt (die Oracle-DB ist ja wohl per ODBC eingebunden?).

    Jan

  3. #3
    Registrierter Benutzer
    Registriert seit
    04.04.2008
    Beiträge
    50
    Vielen Dank für Deine Hilfe!

    Dachte schon dieses Problem schreck zu viele ab.

    Also ... die Oracle-DB ist per ODBC eingebunden.

    Tabelle: person

    Attr: pnr (Primärschlüssel), alter, haarfarbe, name

    (ist ein Beispiel...)

    Der Primärschlüssel wird ja über den Trigger hochgezählt (Funktioniert via sql-statement) - so dass nur die Attr alter, haarfarbe, name


    Via ECCESS werden auch nur diese daten an die db übermittelt --- nur immer in die erste zeile der datenbank geschrieben (Primärschlüssel '1') -- also überschrieben.

    Wie funktioniert dieser Tracert?

    Wie könnte ich denn via ACCESS die höchste Zahl des PNR ermitteln und + 1 addieren (incrementieren)? ... wäre zwar nicht schön, aber eine alternative.


    Vielen Dank

  4. #4
    Registrierter Benutzer
    Registriert seit
    04.04.2008
    Beiträge
    50

    Red face

    Ich bin einen kleinen Schritt weiter gekommen.

    ACCESS kenn leider keine Trigger, deshalt funktioniert das so nicht.


    Nun muss ich versuche das ganze in Microsoft Visual Basic umzusetzen.

    Hier eine Möglichkeit der Realisierung:

    Du benötigst dafür eine Änderungsabfrage, in der Du den Wert des Feldes jeweils aktualisierst, wenn der Wert eines anderen Feldes geändert wird. Wie das im Einzelnen funktioniert, hängt davon ab, wie Du Änderungen an den Werten durchführst.


    Hier muss also dann der Wert in PNR - Feld um 1 incrementiert werden, sobald der Wert eines anderen Feldes geändert wird.


    So die Theorie. Nun gut ... also der Trigger und die Sequence in ORACLE muss jetzt nachgebaut werden.



    Nur ... wie setze ich das in Microsoft Visual Basic in ACCESS um?
    Ich habe absolut keine Ahnung wie das funktionieren soll.
    Ein wenig habe ich ja schon programmiert ... aber das wird mir jetzt doch sehr kompliziert.


    Kann mir bitte jmd helfen?

  5. #5
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    Zitat Zitat von Chito Beitrag anzeigen
    ACCESS kenn leider keine Trigger, deshalt funktioniert das so nicht.
    das verstehe ich jetzt nicht. Ist das nun eine Oracle-DB, in die Du schreibst oder eine Access-DB? Wenn Du die Oracle-Tabellen in Access verknüpfst (NICHT importierst), dann schreibst Du nach Oracle - und dann muss auch der Trigger ziehen, völlig unabhängig davon, aus welchem Frontend der SQL abgefeuert wird; der Trigger und die Sequence liegen auf dem Server, nicht auf dem Client.

    Nur wenn Du die Tabellen importiert hast, dann gehen der Trigger und die Sequence natürlich verloren. Dann schreibst Du aber nicht mehr nach Oracle, sondern in die importierte Access-DB.

    Mit VB kann ich Dir leider nicht helfen, meine Kenntnisse darin sind sehr stark eingerostet. Aber in einer Access-DB hast Du die Möglichkeit, den Primary Key als Autoincrement zu definieren, dann sparst Du Dir das ganze Geraffel.

    Den ODBC-Trace schaltest Du in der Systemsteuerung -> Verwaltung -> Datenquellen (ODBC) ein, da gibt es einen Reiter dafür (weiß jetzt aus dem Kopf nicht, wie der heisst).

    Jan

  6. #6
    Registrierter Benutzer
    Registriert seit
    04.04.2008
    Beiträge
    50
    hey jan ... vielen dank für deine hilfe. ich weiß es wirklich sehr zu schätze das du für mich ein wenig zeit opferst.


    also ... es handelt sich um eine oracle-datenbank ... mit trigger und sequence ... auch wurde der trigger kompiliert.

    Die tabellen wurden mit access verknüpft. ich schreibe also von access aus in die oracle datenbank. ich verstehe das ja auch nicht wieso das increment via trigger von access aus nicht funktioniert. für mich ist das alles auch total unlogisch. also habe ich das wohl falsch verstanden ... das access keine trigger kennt ... das ist wohl wahr ... nur arbeite ich ja hier in der tat mit einer oracle-db.

    tja ... nun frag ich mich natürlich wie und wo sich ein fehler einschlich. schließlich sollte das ja so funktionieren ... was es aber nicht tut.


    es ist echt ein jammer.
    was empfielst du mir in so einer situation. ich habe auch die datenbank nochmal komplett neu aufgebaut ... nützte aber nichts. lud auch schon .unl in die db ... aber das sollte access ja auch nicht wirklich stören.

    wieso müssen mir immer so unangenehme dinge passieren.


    wenn du mir noch einen guten rat geben kannst ...

    gruss maik

  7. #7
    Registrierter Benutzer
    Registriert seit
    04.04.2008
    Beiträge
    50
    also ... der ordnung wegen.
    Ich sprach mit jmdm der sich damit ganz gut auskennt und dieser einer meinte das es am ODBC-Treiber liegen könnte. Schwierig ist es auch wenn mehrere Klienten auf parallel auf die Tabelle zugreifen.


    Ich werde an der Sache mal dran bleiben

  8. #8
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    wie stehts denn nun mit dem ODBC-Trace??? Rumstochern und per MUP (*) planlos dies und jenes zu unternehmen, bringt Dich nicht wirklich vorwärts. Ich weiss, dass der Trigger-Sequence-Mechanismus in Oracle über ODBC normalerweise funktioniert - es muss also was mit dem Access-Frontend zu tun haben. Aber ohne aussagekräftiges Log kommst Du nicht weiter.

    Jan

    (*) Methode des Unbekümmerten Probierens.

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •