PDA

Vollständige Version anzeigen : Tabelle gesperrt - warum?


dancer1970
24.10.2003, 11:16
Hallo,
ich habe da so ein Problem mit einer update-Funktion.
Nach Ausführung dieses Codes bekomme ich die Meldung Tabelle ist gesperrt! Warum?
access_select_pkey_behaelter ist eine Tabellenerstellungsabfrage, die die Datengrundlage für das Formular display_pkey_behaelter ist.
Das Formular wird geschlossen und soll mit neuen Daten geöffnet werden.
Wo liegt mein denkfehler?

Das ganze läuft unter Access 97 und Oracle 8


DoCmd.OpenQuery "SQL_UPDATE_PKEY_BEHAELTER", acNormal, acEdit 'Aktualisierungsabfrage
Call CreateSPT("SQL_SELECT_PKEY_BEHAELTER", "select * from v_behaelter where v_b_keynr = " & Forms![display_pkey_behaelter]![V_B_KEYNR], True) ' neue Daten werden aus DB geholt
DoCmd.SetWarnings False 'Warnmeldungen aus
DoCmd.close acForm, "display_pkey_behaelter" 'Formular schließen
DoCmd.OpenQuery "access_select_pkey_behaelter", acNormal, acEdit 'Tabellenerstellung ausführen
DoCmd.close acQuery, "access_select_pkey_behaelter" 'wieder schließen
DoCmd.SetWarnings True 'warnmeldungen wieder ein
DoCmd.OpenForm "display_pkey_behaelter", acNormal, acEdit 'Formular mit neuen Daten wieder öffnen

Bärbel Ritzi
24.10.2003, 11:37
versuche es hinter

DoCmd.close acQuery, "access_select_pkey_behaelter" 'wieder schließen

mal mit der Zeile

DoEvents

vielleicht ist die Verarbeitung noch nicht ganz abgeschlossen.


Gruß
Bärbel

dancer1970
24.10.2003, 11:52
Nützt nichts!

Bei
DoCmd.OpenQuery "access_select_pkey_behaelter", acNormal, acEdit

fliege ich mit der Meldung, dass die Tabelle von einem anderen Benutzer gesperrt ist raus.
Ich bin aber der einzige Benutzer weit und breit.
Also muß für Access irgendwie noch ein Zugriff besten.
Alle Formulare sind zumindest rein optisch geschlossen!
Muß das Schließen eines Formulares irgendwie bestätigt werden?
Wenn das Ganze per Hand ausführe (Formular schließen, Abfrage starten) geht alles ganz super.

Macht
DoCmd.close acform
das Formular denn nicht richtig zu?

Stefan

dancer1970
27.10.2003, 10:03
Hat denn keiner ne Idee?

Stefan

dancer1970
05.11.2003, 11:51
Weiß denn niemand denn Grund für diese Meldung?
Wäre ganz toll, wenn das jemand beantworten könnte.

Stefan

dancer1970
07.11.2003, 07:37
zur Erklärung:

Die Daten kommen mit einer Passthrough Abfrage aus einer Oracle DB.
SELECT * FROM V_BEHAELTER WHERE KEYNR = 56;

In diese Selects kann aber nicht geschrieben werden. Daher wird der Selektierte Datensatz mit einer Tabellenerstellungsabfrage in eine Access Tabelle geschrieben, kann dort verändert werden und wird per update Anweisung an die Oracle DB zurückgesendet, anschließend neu abgefragt, damit die veränderten Daten (teilweise verknüpft) auch korrekt im Formular angezeigt werden.

Datengrundlage für das Formular ist halt diese editierbare Tabelle, die neu erstellt wird.

Aber vielleicht gibt es eine ganz andere Lösung wie man Datensätze nur mit Passtrough Abfragen selectieren, editieren und speichern kann.

Eingebundene Tabellen sind nicht erlaubt.

Alexander Jan Peters
07.11.2003, 08:51
Hallo,

schalt mal die Warnungen an und verrat mir mal an welcher Stelle der Code den Fehler auswirft.
Es könnte sein, das das Formular noch nicht entladen ist, dann müßte das hier aber Abhilfe schaffen:
<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Dim</span> frm <span class="TOKEN">As</span> Form
<span class="TOKEN">Dim</span> strSource <span class="TOKEN">As</span> <span class="TOKEN">String</span>
&nbsp;
<span class="REM">'// 1. Aktualisierungsabfrage</span>
&nbsp;
<span class="REM">'// Tabellenerstellungsprozedur</span>
&nbsp;
<span class="TOKEN">Set</span> frm = Forms(&quot;display_pkey_behaelter&quot;)
<span class="TOKEN">With</span> frm
.Visible = <span class="TOKEN">False</span>
<span class="REM"> '// Datenherkunft loesen</span>
strSource = .RecordSource
.RecordSource = &quot;&quot;
<span class="TOKEN">End</span> <span class="TOKEN">With</span>
&nbsp;
<span class="REM">'// 2. Aktualisierungsabfrage</span>
&nbsp;
<span class="TOKEN">With</span> frm
<span class="REM"> '// Datenherkunft wieder anbinden</span>
.RecordSource = strSource
.Visible = <span class="TOKEN">True</span>
<span class="TOKEN">End</span> <span class="TOKEN">With</span>
&nbsp;
<span class="TOKEN">Set</span> frm = <span class="TOKEN">Nothing</span></pre></div>
Dabei wird kurzzeitig die Datenbindung des Formulars aufgehoben. Oder aber prüf mit IsLoaded(DeinFormular) den Ladezustand, die IsLoaded-Prozedur findest Du in der Nordwind.mdb.

Gruß Alex

dancer1970
07.11.2003, 08:59
Danke

Der Fehler tritt in der Zeile


DoCmd.OpenQuery "access_select_pkey_behaelter", acNormal, acEdit 'Tabellenerstellung ausführen

auf

Das mit dem isloaded sehe ich mir an.

dancer1970
07.11.2003, 10:18
Hallo,
habe das Ganze gerade getestet.
isloaded liefert mit

MsgBox IsLoaded("display_pkey_behaelter")

den wert falsch. Das Formular ist nach dem close also geschlossen.

Mit Deiner Funktion mit der Record source klappt das wie gewünscht.
Ein kurzes flackern und die neuen Daten werden angezeigt.

Super. Vielen Dank für deine Hilfe.

Stefan