brandelh hat geschrieben:Warum könnte also ein APPEND BLANK fehlschlagen, auch wenn die Datei auf einem lokalen Laufwerk liegt ?
Xbase++ unter Win7/8
brandelh hat geschrieben:Zu behaupten ein LOCK wird nur im NETZWERK und nur beim ZWEITEN Benutzer benötigt ist schlicht falsch !
wo liest du das ???
"eigentlich" kein extra locking benötigt. NetErr() "müsste" immer .F. (echt) zurück geben.
ein APPEND BLANK / Rlock(), wenn ich alleine bin, "müsste" immer gelingen.
Erst beim zweiten Benutzen können SMB Probleme auftauchen die ein locking verhindern könnten.
da nun Markus (Satmax) aber wohl alleine gearbeitet hat der Hinweis das sich Xbase++ DbAppend()
unter Win 7/8 sich nicht nicht so verhält wie Cl*pper.
Markus hat das Phänomen geschildert das der Datensatz zu fehlen "scheint".
hierbei hat er nun "normalen" Cl*pper Code verwenden wobei er sich darauf verlässt das nun ein Rlock() bestehen würde
wie unter Cl*pper üblich. da er das Problem mit RECNO() hatte habe ich es mit dem Source aus meiner SMB2 Demo
verglichen und mir fiel auf das er zwar NetErr() hatte ( ohne weiter Behandlung ) aber kein explizites DbRlock(nRec)
nach dem DbAppend() wofür ich RECNO() verwendet habe was ja ging.
APPEND BLANK ist ein Schreibzugriff
der einen erfolgreichen Sperr Vorgang erfordert die danach bestehen bleiben sollte und NetErr() = .F. zurück gibt.
was aber wenn NetErr() = .T. ?
weil APPEND BLANK nicht ausgeführt wurde oder weil RLock() nicht gelang ?
hier sollte man sich dann die Ergebnisse der DBF von Cl*pper und Xbase++ ansehen.
Netzwerk "locking" :
wie ich im SMB2 Thread dargestellt habe ( dort gibt es auch den vollen Source ) "fehlt" bei Xbase++ ein solcher Datensatz
des 1st. Client wenn er auf "Level 2 OpLocks" umschalten und den Cache leeren soll.
das Ergebnis von NetErr() = .T. beruht dann auf ein fehlgeschlagenes APPEND BLANK ( weil Datensatz nicht vorhanden )
Lokal SMB2 :
unter SMB2 ist noch ein Cache dazu gekommen den man mittels SMB2 Patch "ausschalten" soll um das eigentliche Problem zu umgehen ...
http://technet.microsoft.com/en-us/libr ... 10%29.aspx
da sich die 3 Registry Einträge auf "\Lanman
Workstation" beziehen geht es also um lokale SSD / HDD Aktionen.
ein lokales APPEND BLANK sollte ja keine SMB Probleme bereiten ... aber da gibt es noch den Index
ich sagte ja "scheint" zu fehlen ... wenn man die DBF mit (defekten) Index öffnet ...
wenn man den Index löscht und in die lokale DBF sieht ist dieser Datensatz mit Inhalt doch vorhanden ?!
ein NetErr() = .T. kommt hier also nicht vom APPEND BLANK sondern weil das sperren für den Index nicht richtig ausgeführt wurde
Cl*pper Applikationen, was man über eine Shell starten muss, haben das Phänomen nicht ... auch ohne SMB2 Patch.
auch der Norton Commander (!) hat beim anlegen/löschen/moven keine Probleme in der CMD Shell... Update funktioniert.
es muss also an der fehlenden "Directory Change Notifications" liegen worauf sich die 3 Registry Einträge
beziehen welche Xbase++ (und andere Sprachen auch) nicht "kennt" aber wohl die CMD Shell.
jetzt gibt es aber eine Ausnahme und das sind ge"share"te Ordner die man per UNC-Path anspricht.
man arbeitet lokal aber trotzdem nach Netzwerk SMB Bedingungen und damit funktioniert es IMHO auch ohne SMB2 Patch.