ErrorSys.Prg erweitern

Sonstiges (nicht kategorisierbar)

Moderator: Moderatoren

Daniel

Re: ErrorSys.Prg erweitern

Beitrag von Daniel »

brandelh hat geschrieben:Meine Netzwerkprobleme kamen, als wir auf Server 2008 umgestellt haben. Solange die Rechner nur lokal genutzt werden, sollte XP kein Thema sein.
Genau so war es auch beim wichtigsten Kunden. Das Netzwerk je Filiale hat 3-4 Workstations (v.a. XP +1 Win7) am Server, der von 2003 auf 2008 gewechselt wurde.
Soweit ich weiss, wurden gleichzeitig auch Switch, alle Netzkarten und Kabel ausgetauscht.
Eventuell noch die Dateien direkt mit UNC Name öffnen: \\SERVER\FREIGABE\Pfad\Datei ...
Ja, denkst Du, dass das einen Unterschied macht? Bisher wurde stets mit gemappten Laufwerken gearbeitet.
Und meist mit der Einstellung "SET DEFAULT TO". Wie erwähnt, ist halt das meiste noch 'Clipper-Stil'.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: ErrorSys.Prg erweitern

Beitrag von brandelh »

Nun, mit einem UNC Namen kann nichts schief gehen wenn die Rechnernamen nicht geändert wurden,
die Laufwerkszuordnung kann auch mit externen Datenträgeren verschoben werden, wenn die Buchstaben zu nieder sind.

Ab und zu warte ich z.B. Minuten lang, bis ein neues Gerät im Explorer tatsächlich angezeigt wird, aber mit UNC Namen ist es sofort erreichbar.

Xbase++ kommt gut mit UNC Namen zurecht, bei Clipper bin ich mir nicht sicher.
Allerdings kann es sein, dass du intern von Laufwerksbuchstaben ausgehst und das kann dann Probleme bereiten.

Jimmy meint, dass UNC Namen auch viel schneller sind, da nicht so viel Overhead mitläuft, das habe ich aber nie nachgeprüft.
Auf allen Win 7 / Server 2008 Geräten müssen aber die 3 Einträge in die Registry die die Sperre für Metadateninfos aufheben, sonst sind die Indexdateien (eventuell auch DBF) dauernd defekt.

Info Win 7 directory cache von Microsoft:

:arrow: http://technet.microsoft.com/en-us/libr ... 10%29.aspx

Von Alaska gibt es ein Tool, dass das erledigt, aber aktuell kann ich es nicht auf deren Homepage finden ... :?
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: ErrorSys.Prg erweitern

Beitrag von AUGE_OHR »

Jan hat geschrieben:
AUGE_OHR hat geschrieben:also dann ist es das XP Sp3 Redirector Problem.
Hallo Jimmy,
klär mich bitte mal auf: Was ist denn das jetzt schon wieder?
kurz : kb922120
lang : siehe Antwort an Daniel
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: ErrorSys.Prg erweitern

Beitrag von AUGE_OHR »

Daniel hat geschrieben:Jimmy, meinst Du das hier, im Thread "Netzwerkgeschwindigkeit" ?
http://xbaseforum.de/viewtopic.php?f=24 ... =50#p75539
Ist das noch aktuell?
Wurden diese Einstellungen nicht alle sowieso mit dem XP SP3 automatisch vorgenommen?
Janein ... da geht es ja um "mehr" (Win7/Srv2008 Seite) als nur Kb922120 (XP) ...

es träfe eher das Thema
Netzlaufwerke gehen verloren
http://www.xbaseforum.de/viewtopic.php?f=27&t=3668 zu.

btw. es gibt
WindowsXP-KB922120-v5-x86-DEU.exe für XP SP2
WindowsXP-KB922120-v6-x86-DEU.exe für XP SP3

worum geht es grundsätzlich bei Opportunistic Locking (Problemen) :
... you encounter problems with an open file shared by the LAN Manager such as:
* The file is in use
* The file is already open
* Unable to write to drive U:
* The network drive U: is no longer available
* Data loss
* Data corruption - file size inconsistency
das sind also deine "ist" Probleme welche XP ( alle Versionen incl. Server 2003) mit sich bringen was alles SMB1 Sachen sind für die es eine Menge Registry Tips gibt.

Wenn nun Windows 7/8/10 und/oder Server 2008/2012 im Netzwerk sind ist default SMB2/3 aktive.
SMB2/3 beinhaltet ein implizierte Authentifizierung von jedem Datenpakt d.h. eine Anmeldung per LanManager ist nicht notwendig wenn UNC-Path benutzt wird.

ein NET USE zum "mappen" eines Laufwerkes geht aber über den LanManager und damit wird SMB1 aktive ... und alle SMB1 Probleme "könnten" sich auswirken.

nun kann (theoretisch) Windows 7/8/10 und/oder Server 2008/2012 auch mit SMB1 arbeiten was NICHT für gemeinsam genutzte Dateien zu empfehlen ist weil in der Praxis ( ohne KB922120 ) durch die XP Workstationen trotzdem SMB1 Probleme auftauchen. siehe dazu auch Thread über den Alaska SMB2 "Hotfix" ( 3 Registry Keys für Win7/8 Workstation)
http://www.xbaseforum.de/viewtopic.php?f=24&t=4649

man kann eine XP Version NICHT mit SMB2 versehen ... aber mit KB922120 was für ein "SMB1.5"*** sorgt indem es weitere Ports ( > 10xxx) aufmacht und damit das SMB2 Verfahren (beschränkt) nutzen kann wenn man UNC-Path verwendet.
***es gibt KEINE offizielle Version 1.5 !

also stell dem Kunden ein Win 7/8 PC hin und du kannst dich auf deine eigentliche Arbeit konzentrieren welche du durch deine Errorsys bekommst.
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: ErrorSys.Prg erweitern

Beitrag von brandelh »

brandelh hat geschrieben: Info Win 7 directory cache von Microsoft:

:arrow: http://technet.microsoft.com/en-us/libr ... 10%29.aspx

Von Alaska gibt es ein Tool, dass das erledigt, aber aktuell kann ich es nicht auf deren Homepage finden ... :?
so ich habe den LINK gefunden ... im Softwaremanager gibt es einen LINK zu der INFO Seite und dort kann man das Tool auch downloaden.
Es geht um den SMP2 Cache der Metadaten.

:arrow: http://www.alaska-software.com/fixes/smb2/overview.shtm
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: ErrorSys.Prg erweitern

Beitrag von AUGE_OHR »

Daniel hat geschrieben:Ist "Liefer->lieferNr" sicher, oder wäre es besser, SELECT-> anzugeben: "4->lieferNr" ?
- Weil XBase ja intern, wenn die DBF mehrmals geöffnet wird, für ALIAS() die SELECT an den Filenamen anhängt.
ein ALIAS darf NICHT numerisch sein ...
deshalb lässt sich unter Xbase++ keine DBF mit "numerischen Namen" ohne ALIAS öffnen

Code: Alles auswählen

USE 1234.DBF              -> Error ALIAS
USE 1234.DBF ALIAS "1234" -> OK
du kannst ALIAS Angaben wie folgt machen

Code: Alles auswählen

PROCEDURE MAIN
LOCAL cAlias := ""

SELECT 1
USE TIMEWORK.DBF ALIAS "1"
IF !NetErr()
   ? cAlias := ALIAS()

   ? a->AKTION 
   ? ("1")->AKTION 
   ? (cAlias)->AKTION 
ENDIF
WAIT

RETURN
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: ErrorSys.Prg erweitern

Beitrag von brandelh »

Den Alias zu verwenden ist tatsächlich problematisch sicherer ist es den Selectbereich anzugeben :!:
Ich mache das so:

Code: Alles auswählen

local nSelect 
use (cFile) NEW // kein Alias ... NEW nur wenn eine neue Datei zusätzlich aufgemacht wird.
if neterr()
   ...
endif
nSelect := select()
...
(nSelect)->MyField
(nSelect)->(MyFunc())
Bei einem alten Clipperprogramm kann man die Selectbereiche manuell bestimmen ("1"), bei einem GUI Programm ist das kein guter Weg.
Besser dynamisch ermitteln und in einer Variablen verwenden. Ich nutze da normalerweise sprechende Namen und iVars:

nKunde, nArtikel etc.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: ErrorSys.Prg erweitern

Beitrag von brandelh »

AUGE_OHR hat geschrieben: deshalb lässt sich unter Xbase++ keine DBF mit "numerischen Namen" ohne ALIAS öffnen

Code: Alles auswählen

USE 1234.DBF              -> Error ALIAS
USE 1234.DBF ALIAS "1234" -> OK
Hast du das probiert ?

Code: Alles auswählen

   DbCreate( "1234.DBF", {{"Test","c",20,1}} )
   msgbox("create")
   use 1234
   msgbox("Use")
   if neterr()
      msgbox("neterr")
   else
      msgbox("OK "+alias())
   endif
Das zeigt bei mir folgendes an:
create
Use
OK 1234
Denn natürlich nutzt Xbase++ den Namen der DBF (1234.dbf) als Alias und der Name ist ein String.

Ich meine, dass unter DOS keine Namen mit Ziffern anfangen durften und ein Name mit einer Ziffer könnte den Compiler auch ins schwitzen bringen.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: ErrorSys.Prg erweitern

Beitrag von AUGE_OHR »

brandelh hat geschrieben:
AUGE_OHR hat geschrieben: deshalb lässt sich unter Xbase++ keine DBF mit "numerischen Namen" ohne ALIAS öffnen

Code: Alles auswählen

USE 1234.DBF              -> Error ALIAS
USE 1234.DBF ALIAS "1234" -> OK
Hast du das probiert ?
JA
oError:args :
-> NIL
oError:canDefault : N
oError:canRetry : J
oError:canSubstitute: N
oError:cargo : NIL
oError:description : Datenbank-Alias existiert nicht/ist ungültig
oError:filename :
oError:genCode : 66
oError:operation : ->
oError:osCode : 0
oError:severity : 2
oError:subCode : 8021
oError:subSystem : BASE
oError:thread : 1
oError:tries : 1
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Aufgerufen von MAIN(11)
wobei es um das ALIAS geht

p.s. das mit (nSelect)-> hab ich noch nicht probiert ...
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: ErrorSys.Prg erweitern

Beitrag von brandelh »

Jimmy,

wie du an meinem Code sehen kannst, ist es erlaubt eine "1234.dbf" zu erstellen und man kann sie in allen Formen öffnen.
Auch Alias() gibt den erwarteten Wert ("1234") zurück.

Wenn dein Code also aussteigt, dann hast du einen Syntaxfehler bei deinem Zugriff !

PS: wie geschrieben, ich nutze keine ALIAS-> Zugriffe sondern nur über Variablen mit dem zur Laufzeit gültigen Select-Bereich.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: ErrorSys.Prg erweitern

Beitrag von AUGE_OHR »

Code: Alles auswählen

PROCEDURE MAIN
LOCAL cAlias := ""
LOCAL nSelect := 0

SELECT 1
USE 1234.DBF                  // hier ohne ALIAS "1"
IF !NetErr()
   ? cAlias := ALIAS()
   ? VALTYPE(cAlias)
   ? nSelect := SELECT()

   ? a->AKTION 
   ? ("1")->AKTION 
   ? (nSelect)->AKTION 
   ? (cAlias)->AKTION        // Zeile 15

ENDIF
WAIT

RETURN
oError:args :
-> NIL
oError:canDefault : N
oError:canRetry : J
oError:canSubstitute: N
oError:cargo : NIL
oError:description : Datenbank-Alias existiert nicht/ist ungültig
oError:filename :
oError:genCode : 66
oError:operation : ->
oError:osCode : 0
oError:severity : 2
oError:subCode : 8021
oError:subSystem : BASE
oError:thread : 1
oError:tries : 1
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Aufgerufen von MAIN(15)
es ging ja um die Frage "wie" der "Alias" vor dem "->" aussehen müsste.

interessant ist das es auch mit "(nSelect)->" funktioniert was ich nicht gedacht hätte.
gruss by OHR
Jimmy
Daniel

Re: ErrorSys.Prg erweitern

Beitrag von Daniel »

brandelh hat geschrieben:... sicherer ist es den Selectbereich anzugeben :!:

Code: Alles auswählen

local nSelect 
use (cFile) NEW   // kein Alias ... NEW nur wenn eine neue Datei zusätzlich aufgemacht wird.
if neterr()
   ...
endif
nSelect := select()
...
(nSelect)->MyField
(nSelect)->(MyFunc())
... die Selectbereiche ... besser dynamisch ermitteln und in einer Variablen verwenden.
Ich bin auch zum Schluss gekommen, dass das ein guter Weg ist.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: ErrorSys.Prg erweitern

Beitrag von Jan »

Ich persönlich benutze ungerne Select(). Denn das gibt wieder nur eine Nummer zurück, die mir im Debuger nichts sagen wird. Deswegen benutze ich lieber Alias(), das mir einen sprechenden Namen gibt. Und das kann ich ebenfalls benutzen, um die dbf korrekt anzusprechen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: ErrorSys.Prg erweitern

Beitrag von brandelh »

Hallo Jan,

der Sprechende Name kommt bei mir durch die Variable, die den Select-Bereich speichert.

Code: Alles auswählen

use Kunden NEW
...
nKunden := select()

use Adressen NEW
...
nAdressen := select()
wobei ich bei GUI Fenstern natürlich iVAR nutze.
Gruß
Hubert
Antworten