Inoffizielles deutsches Xbase-Forum • Thema anzeigen - Clipper 97 goes Xbase++ goes MDI ?

Clipper 97 goes Xbase++ goes MDI ?

Auf dem Weg von Clipper, FoxPro u.ä. nach Xbase++

Moderator: Moderatoren

Re: Clipper 97 goes Xbase++ goes MDI ?

Beitragvon Tom am Do, 14. Jan 2010 14:09

Hallo, Klaus.

COMMIT (als Befehl) oder DbCommit() (als Funktionsaufruf) sorgen dafür, dass die Daten durchgeschrieben werden. Das kann man im Prinzip beliebig oft machen, aber es bremst auf Dauer. DbSkip(0) bewirkt ähnliches für einen einzelnen Datensatz. Sinnvoller wäre es allerdings, die Fehler zu beseitigen, die dazu führen, dass Xbase (bzw. eigentlich: Dein Programm) aussteigt. :wink: Man kann solche Prozesse - also das Durchschreiben von Daten - auch in SEQUENCES legen, die dann auch mit Rollbacks ausgestattet sein können. Wenn dann ein Fehler auftritt, wird es z.B. abermals versucht, oder die Ursprungsdaten werden restauriert oder so. Aber, wie gesagt: Fehler ausmerzen!
Herzlich,
Tom
Benutzeravatar
Tom
Foren-Administrator
Foren-Administrator
 
Beiträge: 3824
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin

Re: Clipper 97 goes Xbase++ goes MDI ?

Beitragvon brandelh am Do, 14. Jan 2010 14:51

DBSKIP() schreibt Puffer weg UND liest sie neu ein, somit erhält er auch Änderungen die von anderen Stationen durchgeführt wurden.
COMMIT weißt den Server an die Puffer wegzuschreiben, allerdings nicht den Client seine neu einzulesen.
Änderungen anderer Stationen werden so nicht sofort sichbar.

Eine sequenzielle ID ist ein großes Problem, hier musst du per Programm sicher stellen, dass nicht auch eine andere Station das Gleiche macht:

Problem:

PC1: go bottom, Nr merken, append blank, replace mit nr+1 ...
PC2: go bottom, Nr merken, append blank, replace mit nr+1 ...
PC3: go bottom, Nr merken, append blank, replace mit nr+1 ...

wenn alle genau die gleichen Daten lesen werden hier 3 gleiche IDs vergeben.
wenn einer etwas später ist also zwischen append blank und replace gerät, gibt es mehree mit ID=1 etc.

Denn alle können lesen während ein Satz gesperrt ist.
Ich habe das damals so gelöst, dass ich entweder den letzten Satz mir rlock() oder die ganze Datei mit flock() gesperrt habe,
bevor ich die NR ausgelesen habe. Beim dann folgenden Append Blank wird dieser ja sofort gesperrt und somit ist auch
die rlock() Variante recht sicher, am sichersten bleibt aber flock().
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 6247
Registriert: Mo, 23. Jan 2006 21:54
Wohnort: Germersheim

Re: Clipper 97 goes Xbase++ goes MDI ?

Beitragvon Tom am Do, 14. Jan 2010 19:26

Die Vergabe von eindeutigen Nummern im Netzwerk haben wir schon häufiger diskutiert, zum Beispiel hier:

viewtopic.php?f=24&t=1563

Ich habe für derlei eine Hilfsdatei mit einem Datensatz, die ich nur für die Nummernvergabe öffne. Ich sperre den ersten Datensatz, hole mir meine Nummer, aktualisiere sie im Datensatz und entsperre und schließe dann wieder. Das dauert nur ein paar Millisekunden. Andere Arbeitsplätze warten so lange, bis sie diesen Datensatz ebenfalls sperren können - was keine spürbaren Wartezeiten verursacht. (DO WHILE !Rlock() ; Sleep(0) ; ENDDO). Die Nummer ist dann immer aktuell und richtig.

Ansonsten bietet die FOXDBE auch den Feldtyp "Integer/Autoinc." (Feldtyp "S"). Die Umstellung auf FOX ist bei kleineren Applikationen kein großer Aufwand, und nach einem APPEND BLANK hat das Feld schon die richtige (eindeutige) Nummer.
Herzlich,
Tom
Benutzeravatar
Tom
Foren-Administrator
Foren-Administrator
 
Beiträge: 3824
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin

Re: Clipper 97 goes Xbase++ goes MDI ?

Beitragvon AUGE_OHR am Fr, 15. Jan 2010 0:34

hi,
Code: Alles auswählen
// klappt nicht ?
::nCounter := KUNDEN->IDNO
KUNDEN->IDNO := ::nCounter++

// funktioniert
REPLACE KUNDEN->IDNO WITH KUNDEN->IDNO+1
::nCounter := KUNDEN->IDNO
beides "müsste" doch den "Zähler" erhöhen ... warum klappt bei mir Variante 1 nicht :-k
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 4407
Registriert: Do, 16. Mär 2006 8:55
Wohnort: Hamburg

Re: Clipper 97 goes Xbase++ goes MDI ?

Beitragvon brandelh am Fr, 15. Jan 2010 9:38

Hallo Jimmy,

weil ein nVar++ erst NACH der Zuweisung ausgeführt wird. nVar+1 hingegen oder ++nVar wird zuerst berechnet und dann zugewiesen.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 6247
Registriert: Mo, 23. Jan 2006 21:54
Wohnort: Germersheim

Re: Clipper 97 goes Xbase++ goes MDI ?

Beitragvon Martin Altmann am Fr, 15. Jan 2010 9:42

Geht denn eigentlich ein
Code: Alles auswählen
KUNDEN->IDNO++

Ich denke mal, eher nicht - oder?
Wäre ja doch ein speziellerer Einzelfall...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: http://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: http://meldungen.altem.de/

Mitglied der XUG Berlin/Brandenburg
Mitglied der XUG Osnabrück
2. Vorsitzender des Deutschsprachige Xbase-Entwickler e.V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
 
Beiträge: 7625
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin

Re: Clipper 97 goes Xbase++ goes MDI ?

Beitragvon AUGE_OHR am Fr, 15. Jan 2010 9:52

brandelh hat geschrieben:weil ein nVar++ erst NACH der Zuweisung ausgeführt wird. nVar+1 hingegen oder ++nVar wird zuerst berechnet und dann zugewiesen.
STIMMT !!! ... blame on me

Martin hat geschrieben:KUNDEN->IDNO++
hm ... ich wollte das ++ beim 2nd Beispiel vermeiden (was ja der Fehler war)
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 4407
Registriert: Do, 16. Mär 2006 8:55
Wohnort: Hamburg

Re: Clipper 97 goes Xbase++ goes MDI ?

Beitragvon brandelh am Fr, 15. Jan 2010 10:04

Martin Altmann hat geschrieben:Geht denn eigentlich ein
Code: Alles auswählen
KUNDEN->IDNO++

Ich denke mal, eher nicht - oder?
Wäre ja doch ein speziellerer Einzelfall...

Viele Grüße,
Martin

Code: Alles auswählen
KUNDEN->IDNO++
würde auf jeden Fall den aktuellen Wert zurückgeben, ob aber danach ein automatisches Replace mit dem um 1 erhöhten Wert stattfindet :?
Laut Dokumentation ist das explizit möglich, ich persönlich nutze aber ausschließlich replace um Datenfelder zu schreiben, so kann ich leicht nach Dateizugriffen suchen.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 6247
Registriert: Mo, 23. Jan 2006 21:54
Wohnort: Germersheim

Re: Clipper 97 goes Xbase++ goes MDI ?

Beitragvon Martin Altmann am Fr, 15. Jan 2010 10:14

Hallo Hubert,
genau darauf wollte ich hinaus.
Ich denke mal, das klappt in dem Fall nicht wirklich.
Obwohl es ja eine atomare Operation wäre :!:

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: http://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: http://meldungen.altem.de/

Mitglied der XUG Berlin/Brandenburg
Mitglied der XUG Osnabrück
2. Vorsitzender des Deutschsprachige Xbase-Entwickler e.V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
 
Beiträge: 7625
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin

Re: Clipper 97 goes Xbase++ goes MDI ?

Beitragvon brandelh am Fr, 15. Jan 2010 10:44

Martin Altmann hat geschrieben:Ich denke mal, das klappt in dem Fall nicht wirklich.


wenn der Satz gesperrt wurde (was zum Lesen ja nicht nötig ist) und Alaska das so umsetzt, warum nicht ... müsste man halt mal ausprobieren.
Aber ich mach das nicht, denn der Quellcode ist mir zu unleserlich :D
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 6247
Registriert: Mo, 23. Jan 2006 21:54
Wohnort: Germersheim

Re: Clipper 97 goes Xbase++ goes MDI ?

Beitragvon Markus Walter am Fr, 15. Jan 2010 11:45

KlausXXL hat geschrieben:gibt es eine sichere Möglichkeit sicherzustellen, daß ein Datensatz - der gerade neu angelegt wurde
in der Datenbank abgespeichert ist -- auch wenn kurze Zeit später das Programm mit einer Fehlermeldung
aussteigt ?


sozusagen nach

append blank
...
replace Feld1 with xyz
etc.

und

replace KundNr with Kundnr +1
....

* JETZT ALLES IN DATENBANKEN ABSPEICHERN *

Hintergrund --- wenn xbase durch Fehlermeldung aussteigt sind zu 90% die zuletzt eingegebenen DATEN weg ...
und was noch schlimmer ist eine Kundennummer bzw Terminnummer wird nicht mit +1 abgelegt ,
so daß beim erneuten Start des Programms eine doppelte Terminnummer neu angelegt wird ... was die
ganzen Daten dureinander bringt ....

mfg Klaus


Hallo Klaus,

das hängt meines Erachtens davon ab, ob Du die DBF exlusiv oder geshared geöffnet hast. Bei einem exlusiven Zugriff ist wohl dbcommit() das Mittel der Wahl (wie Tom schon geschrieben hat). Bei shared-Zugriff reicht das Entsperren des Datensatzes (dbunlock() oder DbRUnlock()).
Gruß
Markus

Mitglied der XUG Saarland-Pfalz
Benutzeravatar
Markus Walter
1000 working lines a day
1000 working lines a day
 
Beiträge: 565
Registriert: Di, 24. Jan 2006 11:22
Wohnort: Saarland

Re: Clipper 97 goes Xbase++ goes MDI ?

Beitragvon KlausXXL am Sa, 16. Jan 2010 9:32

Guten Morgen ,

jetzt am Wochenende habe ich wieder etwas Zeit -- da werde ich eure Vorschläge für
eindeutige Nummernvergabe und Datenspeicherung in das Programm einbauen

Danke habt mir sehr geholfen :-)

Jetzt hätte ich da eigentlich nur noch eine Überlegenung --
für die Tabellenansicht der Termine verwende ich DBEDIT ...

z.B. Tbrowse habe ich noch nie Benutzt --
und wie gesagt hätte ich auch express++ noch zur Verfügung !

Was mich in diesem Zusammenhang interresiert !

1.Kann man irgendwie auf einfache Art und Weise die Tabbellenansicht so ändern , daß
die angezeigten Datensätze mit einer abwechselnden z.B. Hntergrundfarbe dargestellt werden

2. wie sieht der Code aus wenn ich DBEDIT durch TBROWSE ersetzen will -- ist Tbrowse schneller ?

3. geht es auch wenn ich express++ verwende --- was muß ich da ändern ?

Beispiel:

DECLARE Felder [10]
Felder[1]="g"
Felder[2]="termin"
Felder[3]="twoche"
Felder[4]="vertrag"
...
DECLARE Kopf[10]
Kopf[1]="G"
Kopf[2]="Termin"
Kopf[3]="WT"
Kopf[4]="S"
...
clear
@ 0,1 say "[ESC]=Zurck [F2]=... [F3]=... "
@ 41,1 SAY "[F1]=šbersicht [F4]=Anfgen [F5]=Žndern [F8]=...."
...
DBEDIT(1,0,40,115,Felder,"editieren","",Kopf)
..
return

FUNCTION editieren
PARAMETERS Modus, Initial
Zeile=COL()
Reihe=ROW()
Rueck = 1
DO CASE

CASE LASTKEY()=-7
set cursor on
clear gets
SET INTENSITY OFF
SET COLOR TO W+
Infield = Felder[Initial]
@ Reihe, Zeile GET &Infield PICTURE "@K"
READ
SET COLOR TO W
SET INTENSITY ON
set cursor off

case lastkey()=-8
do sd1

...

mfg Klaus
KlausXXL
Rookie
Rookie
 
Beiträge: 12
Registriert: Di, 05. Jan 2010 12:27

Re: Clipper 97 goes Xbase++ goes MDI ?

Beitragvon AUGE_OHR am Sa, 16. Jan 2010 10:02

KlausXXL hat geschrieben:Jetzt hätte ich da eigentlich nur noch eine Überlegenung --
für die Tabellenansicht der Termine verwende ich DBEDIT ...

z.B. Tbrowse habe ich noch nie Benutzt --
klar hast du, nur du weist es noch nicht :)

siehe dir mal c:\ALASKA\XPPW32\Source\SYS\dbedit.prg an !
mittels des Source kannst du dir deine eigene DbEdit/Tbrowse bauen OHNE deinen Code zu ändern
KlausXXL hat geschrieben:und wie gesagt hätte ich auch express++ noch zur Verfügung !
kann ich leider nicht mir dienen, aber es gibt ja andere User die helfen können
KlausXXL hat geschrieben:Was mich in diesem Zusammenhang interresiert !

1.Kann man irgendwie auf einfache Art und Weise die Tabbellenansicht so ändern , daß
die angezeigten Datensätze mit einer abwechselnden z.B. Hntergrundfarbe dargestellt werden
im VIO / Hybrid Mode hab ich mich sehr schwer getan, aber im GUI Mode kein Problem
KlausXXL hat geschrieben:2. wie sieht der Code aus wenn ich DBEDIT durch TBROWSE ersetzen will -- ist Tbrowse schneller ?
wie schon gesagt, sie dir den Source an.
Tbrowse ist deutlich "mächtiger" und die Art und Weise gleicht XbpBrowse()
KlausXXL hat geschrieben:3. geht es auch wenn ich express++ verwende --- was muß ich da ändern ?
vermutlich nur wenig ...

Ich "denke", wenn du mit der Command Sprache von Express++ klarkommst, du solltest dich für eins von beiden "entscheiden".
"pure" Xbase++ und Express++ unterscheiden sich im Level gewaltig. Bei "pure" Xbase++ musst du dich "um alles selbst" kümmern
während die 3PP LIB´s wie Express++ dir da schon gewaltig was abnehmen.
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 4407
Registriert: Do, 16. Mär 2006 8:55
Wohnort: Hamburg

Re: Clipper 97 goes Xbase++ goes MDI ?

Beitragvon Juergen am Sa, 16. Jan 2010 23:13

Hallo Klaus,

auch ein sofortiges Schreiben in die Datenbank gibt keine Sicherheit. Beim nächsten Start der Anwendung
sollte der letzte Satz auf Vollständigkeit überprüft werden und die Indizes ggf. erneurt werden.
Früher unter Clipper hatte ich eine Kontrolldatei angelegt um zu dokumentieren ob die Neuanlage eines
Satzes erfolgreich war. Unter DOS konnte man einfach den Bildschirm vor und nach der Aktion sichern.
Heute müsste man dafür alle SLE´s bzw. deren Puffer vor und nach der Änderung sichern.

Gruß
Jürgen
Juergen
UDF-Programmierer
UDF-Programmierer
 
Beiträge: 90
Registriert: Di, 19. Dez 2006 20:37
Wohnort: Düsseldorf

Re: Clipper 97 goes Xbase++ goes MDI ?

Beitragvon brandelh am So, 17. Jan 2010 11:28

Hi,

du könntest eine Datei (NR_....txt) mit den Feldnamen und Inhalten speichern (z.B. XML, aber auch einfach eine Textdatei mit eigenem Aufbau).
Dann den Satz erzeugen und alles schreiben.
Danach die Datei umbenennen (NR_....txt -> OK_....txt).
Wenn du bei Öffnen anzulegende Dateien findest (NR_*.txt ?), dann ging wohl was schief.
In dem Falle, zuerst alle Indexe löschen und aufbauen, dann prüfen ob es den Satz eventuell doch schon gibt ... Zeitstempel wären auch nicht schlecht ...
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 6247
Registriert: Mo, 23. Jan 2006 21:54
Wohnort: Germersheim

Re: Clipper 97 goes Xbase++ goes MDI ?

Beitragvon KlausXXL am Mi, 03. Feb 2010 13:30

Hallo ,
einen wunderschönen Mittag.

Folgende Fehlermeldung gehört auch zu dem Programm - hat jedoch nichts mit der Netzerkfähigkeit zu tun.

AUSLÖSER:

Eingabe von Daten --> FEHLER --> Cursor blinkt im Eingabefeld -- jedoch nichts geht mehr -- kein Tastendruck / NIX

Lösung: Alt -C

habe ich im Moment öfters - kann mir bitte jemand sagen wo der FEHLER liegt -

XBASE Fehlermeldung:

FATAL ERROR LOG
Abort with Alt-C
SYS Thread-ID: 644
Module: EVM
Error Codes: EH: 11 Sub: 0(0) OS: 0 XPP: 0
Call Stack of Thread 1 (500):
TLSA(7)
VEDIT(718)
(B)DBEDIT(0)
DBEDIT(187)
FILTERUNG(785)
EDITTERM(351)
(B)DBEDIT(0)
DBEDIT(187)
PSICHT(200)
AK1(95)
A1(33)
MAIN(360)
File: C:\XB7\project.EXE
TimeStamp: 20100203 11:48
End of FATAL ERROR LOG.

Für Hilfe wäre ich sehr DANKBAR
mfg
KlausXXL
Rookie
Rookie
 
Beiträge: 12
Registriert: Di, 05. Jan 2010 12:27

Re: Clipper 97 goes Xbase++ goes MDI ?

Beitragvon Martin Altmann am Mi, 03. Feb 2010 13:33

Was ist TLSA?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: http://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: http://meldungen.altem.de/

Mitglied der XUG Berlin/Brandenburg
Mitglied der XUG Osnabrück
2. Vorsitzender des Deutschsprachige Xbase-Entwickler e.V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
 
Beiträge: 7625
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin

Re: Clipper 97 goes Xbase++ goes MDI ?

Beitragvon brandelh am Mi, 03. Feb 2010 14:01

Hallo,

ich vermute mal dass der PC als solcher nicht hängt. ALT+C geht ja auch noch.
Somit schließe ich ein Hardwareproblem aus.

Ein "hängendes" Programm ist meist in einer Endlosschleife, die die Eventverarbeitung blockiert.

Zeig uns doch mal deine Event Schleife und den Code deines Eingabefeldes (also Keyboard Slot / Funktion, Plausi ...).
Nutzt du Tools ?
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 6247
Registriert: Mo, 23. Jan 2006 21:54
Wohnort: Germersheim

Re: Clipper 97 goes Xbase++ goes MDI ?

Beitragvon KlausXXL am Mi, 03. Feb 2010 14:34

Code: Alles auswählen
procedure tlsa
local malen
pzusatz=space(25)
select 3
use lager1 index lnr
select 5
set relation to lagernr into lager1
*artikelnr
fng:=0
vkpeingabe=space(10)
clear
clear gets
do uebschr with "Verkauf"
if deleted()
@1,65 say 'Markiert'
endif
malen:=chr(176)+chr(176)+chr(176)+chr(176)+chr(176)+chr(176)+chr(176)+chr(176)+chr(176)

wx:=13
wy:=35


@ wx-2,wy-2 to wx+12,wy+60 DOUBLE


if numat("#",verkauf1->artikelnr) > 0
@ wx,wy    say "Produkt        : "+trim(lager1->produkt)
@ wx+1,wy  say "Zusatz         :" get pzusatz
@ wx+2,wy  say "Artikelnummer  : "+verkauf1->artikelnr
@ wx+3,wy  say "Einheit        : "+lager1->einheit
@ wx+4,wy  say "Verkaufspreis  : " get vkpeingabe
@ wx+5,wy  say "Menge          : " get verkauf1->bm1
@ wx+8,wy  say "Fl„che         : " get verkauf1->f1
@ wx+8,wy+25 say " x " get verkauf1->f2
@ wx+20,wy say "Preisgruppe    : " get verkauf1->vkpg

elseif verkauf1->artikelnr = "z"
@ wx,wy    say "Produkt        :" get verkauf1->vprodukt
@ wx+2,wy  say "Artikelnummer  : "+verkauf1->artikelnr

elseif verkauf1->artikelnr # "f"
@ wx,wy    say "Produkt        : "+trim(lager1->produkt)
@ wx+1,wy  say "Produkt Zusatz : "+trim(lager1->produkt2)
@ wx+2,wy  say "Artikelnummer  : "+verkauf1->artikelnr
@ wx+3,wy  say "Einheit        : "+lager1->einheit
@ wx+4,wy  say "Verkaufspreis  : " get lager1->vkpreis
@ wx+6,wy  say "Menge          : " get verkauf1->bm1
@ wx+8,wy  say "Fl„che         : " get verkauf1->f1
@ wx+8,wy+25 say " x " get verkauf1->f2
@ wx+10,wy say "Preisgruppe    : " get verkauf1->vkpg

else
@ wx,wy    say "Produkt        :" get verkauf1->vprodukt
@ wx+1,wy  say "Artikelnummer  : "+verkauf1->artikelnr
@ wx+3,wy  say "Einheit        : " get verkauf1->einheit
@ wx+4,wy  say "Verkaufspreis  : " get vkpeingabe
@ wx+6,wy  say "Menge          : " get verkauf1->bm1
@ wx+8,wy  say "Fl„che         : " get verkauf1->f1
@ wx+8,wy+25 say " x " get verkauf1->f2
@ wx+10,wy say "Preisgruppe    : " get verkauf1->vkpg




mfg
KlausXXL
Rookie
Rookie
 
Beiträge: 12
Registriert: Di, 05. Jan 2010 12:27

Re: Clipper 97 goes Xbase++ goes MDI ?

Beitragvon Tom am Mi, 03. Feb 2010 14:43

Ich vermute mal, dass "TSLA" eine Validierungsfunktion ist, die von "VEDIT" genutzt wird. Und in dieser Funktion hängt das Programm. Sehr wahrscheinlich sucht sie irgendwas ergebnislos oder läuft, wie Hubert angemerkt hat, in einer Endlosschleife. Es klemmt in Zeile 7 dieser Funktion.
Herzlich,
Tom
Benutzeravatar
Tom
Foren-Administrator
Foren-Administrator
 
Beiträge: 3824
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin

Re: Clipper 97 goes Xbase++ goes MDI ?

Beitragvon brandelh am Mi, 03. Feb 2010 14:51

Hi,

welche Zeile von TLSA ist die Zeile 7 ?

darin war das Programm als es beendet wurde ... eventuell ein RLOCK(), das auf einen schon gesperrten Datensatz wartet.

Bitte nutze in Zukunft den Code-Tag, sonst kann man den Quellcode so schwer lesen.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 6247
Registriert: Mo, 23. Jan 2006 21:54
Wohnort: Germersheim

Re: Clipper 97 goes Xbase++ goes MDI ?

Beitragvon Tom am Mi, 03. Feb 2010 14:56

Zeile 7 dürfte die zweite von diesen beiden hier sein:

Code: Alles auswählen
select 5
set relation to lagernr into lager1


Wenn in Workarea 5 noch keine Datei geöffnet ist, dürfte dies die Ursache sein. Vermutlich ist die Errorsys so umgestaltet, dass bei solchen Fehlern endlos versucht wird, den Vorgang zu wiederholen.
Herzlich,
Tom
Benutzeravatar
Tom
Foren-Administrator
Foren-Administrator
 
Beiträge: 3824
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin

Re: Clipper 97 goes Xbase++ goes MDI ?

Beitragvon Werner_Bayern am Mi, 03. Mär 2010 14:26

Servus Klaus,

dazu gibts die Funktion AppExit(), die automatisch beim Beenden des Programmes aufgerufen wird:

Code: Alles auswählen
PROCEDURE AppExit()
   LOCAL bErrorHandler :=ErrorBlock( {|e| Break(e)} )
   LOCAL aWS, i
   /*
    * Absichern der shutdown-sequence vor rekursiven Fehlern
    * in DbCommit() udgl.
    */
    aWS := WorkSpaceList()
    FOR i:= 1 TO len(aWS)
        BEGIN SEQUENCE
          /*
           * Erzwinge das erfolgreiche Beenden aller
           * anstehenden Record updates im aktuellen
           * Workspace.
           */
           (aWS[i])->(DbCommit())
           (aWS[i])->(DbCloseArea())
        RECOVER

           (aWS[i])->(DbRRollback())
           (aWS[i])->(DbCloseArea())
        ENDSEQUENCE
    NEXT

    ErrorBlock( bErrorHandler )
RETURN


Ok?


Sorry, hatte die 2. Seite nicht gesehen, die Frage wurde sicherlich schon beantwortet, es ging ums vorherige Speichern von Daten, wenn das Programm abschmiert...
es grüßt euch

Werner
Werner_Bayern
UDF-Programmierer
UDF-Programmierer
 
Beiträge: 70
Registriert: Sa, 30. Jan 2010 23:58

Vorherige

Zurück zu Migration

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast