PDA

Vollständige Version anzeigen : Cache umgangen Trotzdem Schreibkonflikt


MarcH870
05.11.2001, 17:38
Hallo Leute,

es sieht so aus, ich habe ein Hformular mit einem Uformular . das Hformular hat die Felder "Kundenname" und "Status" . wenn der user in das Feld "Kundenname" was reinschreibbt wird folgende prozedur ausgeführt:

Dim db As Database
Dim rs As Recordset
Dim SQL As String

Me.fStatus.Value = "K"

Set db = CurrentDb()
SQL = "SELECT * FROM tBestellungE WHERE [SAP Nr:]=" & Me.SAP_Nr_.Value
Set rs = db.OpenRecordset(SQL, dbOpenDynaset)


With rs
.Edit
rs![Kunden Name] = Me.Kunden_Name.Value
rs!Status = Me.fStatus.Value
.Update
End With
rs.Close
Set db = Nothing

DBEngine.Idle dbRefreshCache
End sub

wenn der user jetzt auf das Uform klickt oder auf die Navigatitionsschaltflächen des Hformulars kommt die Meldung schreibkonflict

Wie kann das sein ?? mit "DBEngine.Idle dbRefreshCache" ist doch alles sofort auf der platte ,so dass es doch keinen konflikt geben kann zwischen der änderung im Fled "Kundenname" und "Status"
wäre jedenfalls sehr froh wenn es da einen weg giebt diese Änderungen so abzudaten ,dass es nicht zu dieser meldung kommt

gruss marc


getKundenName = Me.Kunden_Name.Value

getKundenName ist eine pubVariable hat mit diesem Problem nichts zu tun, habs deshalb weggenommen

[Dieser Beitrag wurde von MarcH870 am 05.11.2001 editiert.]

MarcH870
05.11.2001, 18:10
Hi Sascha,

besten dank , muss zugeben habe es genau umgekehrt betrachtet,

da es aber leztlich um Mehrben. gehen wird und es wichtig wäre ,dass die Status änderung möglichst mit geringer verzögerung für andere user zusehen ist , wie liesse sich das machen??

was mir da (ganz naiv) einfällt -bei jedem form öffen "refresh" setzen , und dann noch einen timer der alle paar minuten refresh aufruft , aber das ist best. nicht die beste lösung

gruss marc

Sascha Trowitzsch
05.11.2001, 18:32
Zunächst mal setzt du in den Optionen die Zeit für die "Anzeigeaktualisierung" herab, z.B. auf 15 sec.
Aber Änderungen an den Tabellen siehst du so im Formular noch nicht, also wenn jemand z.B. einen neuen DS hinzufügt.
Da bleibt tatsächlich nur ein Requery mit Timer.

Ciao, Sascha

WalterS
05.11.2001, 20:32
Hi Marc!
ich gehe einmal davon aus, dass die Felder Kundenname und Status ungebundene Texztfelder sind ( ist fStatus ein Schreibfehler ??)

statt rs.close
würde ich auch ein
set rs = nothing
verwenden und dann ein

me.refresh

Damit hohlst du dir den aktuellen Datenbestand für dein Formular und es sollte keine Problem geben.

MarcH870
07.11.2001, 09:48
Hallo Leute,

die Felder "fStatus" und Kundenname" sind gebunden , es mag sicherlich blödsinnig erscheinen dann die update methode zu verwenden ,
die sache ist die , dass es auf dem Hformular einen button gibt der einen bericht öffnent, der bericht soll mit dem kunden namen filtern ,das geht natürlich nur wenn der name schon in der tabelle steht,
in irgendeiner phase des experimentierens war ich schon mal soweit dass nacheintragen des namens und "enter" drücken- der name dann auch in der tabelle stand , nur dann hatte ich halt das problem mit dem schreibkonflikt,
habe es auch gerade noch mal versucht mit
set rs = nothing, aber dann habe ich die meldung schreibkonflikt sofort nach "enter" auf dem schirm

habe den ersten Beitrag noch mal editiert , "getKundenname" ist eine "public-variable", die hier mit dem problem nichts zu tun hat

also hoffentlich bis bald

marc

erwin
08.11.2001, 09:17
also, wenn die Felder "fStatus" und "Kundenname" gebunden sind, dann schiesst du dir mit diesem Code natürlich "selbst in's Knie" !

Man kann doch nicht, solange ein DS per Formular noch "in Bearbeitung" ist, per Code denselben Datensatz updaten - bzw. man kann schon, wird aber klarerweise mit einem Konflikt, je nach Lockingstrategie beim pessimistisch 1. (bzw. optimistisch 2.) Update "belohnt" !

Im Feldereignis Kundenname_AfterUpdate reicht doch ein

Docmd.RunCommand accmdsaverecord

so long erwin...

MarcH870
08.11.2001, 09:55
Hallo Erwin,

damit gehts super, was ich da probiert hab war natürlich (wie ich oben geschr) nicht der stein der weisen ,
kann mir vorstellen dass es dir manchmal weh tun muss ;) was manchereiner so für ideen probiert

also vieln dank für deien hilfe

gruss marc

erwin
08.11.2001, 10:15
ich kann Schmerzen ertragen, vorallem, wenn's die Schmerzen sind, die andere haben :D :D

so long erwin...