StartseiteAutordBASESonstiges

Autor:

Softwahn

dBASE lebt!

Stories

PC-Zeitschriften

Geld & Börse

dBASE lebt!:

Band 1, Einführung

Band 2, Grundlagen

Band 3, Klassen und Objekte

Bestellung bei mir

Bestellung bei anderen

Leserstimmen

Downloads

Korrekturen

Links für dBASE lebt!

Allgemein:

Startseite

Kontakt

Rechtshinweise

Datenschutz

Impressum

Es ist lästig, aber kaum zu vermeiden. Manche Fehler entdeckt man erst wenn es zu spät ist. Und wegen einem Zahlendreher oder Vertipper das Layout und das ganze digitale Mastering nochmal neu beginnen zu lassen bringt´s auch nicht. Daher an dieser Stelle Korrekturen zu den einzelnen Bänden, die mir zu spät aufgefallen sind oder von Lesern mitgeteilt wurden.

Sie finden hier aber keine simplen Tippfehler (die vielleicht auch garkeine sind, weil ich die "neue dt. Rechtschreibung" weitgehend als ausgemachten Humbug betrachte und ablehne), sondern nur echte inhaltliche Fehler, sowie evtl. noch sinnvolle Hinweise und Ergänzungen.

Absätze direkt anwählen

» Anmerkungen zu Band 1, Einführung
» Anmerkungen zu Band 2, Grundlagen
» Anmerkungen zu Band 3, Klassen und Objekte

Anmerkungen zu Band 1, Einführung

Seite 36 und 39, Ergänzung: ich beginne einige kurze beispielhafte Befehlsfolgen mit

local ...

was im Befehlsfenster zu einem Fehler führt, da local nur in PRG-Dateien relevant ist.

Direkt im Befehlsfenster ausgeführt können Sie local ... also weglassen, dort gibt es keine lokalen Variablen, da die Befehle dort nicht innerhalb einer Procedure oder Function laufen. Ich ging davon aus dies sei bekannt, aber einige Leser sind doch darüber gestolpert, sorry. Sie könnten im Befehlsfenster zwar public ... schreiben, das geht, ist dort aber überflüssig.

Seite 113, Korrektur:
es muss natürlich

count for deleted() to iX

heissen und nicht coint for deleted() to iX. Das kommt davon, wenn man Quellcode tippt, aber dann nicht auch wirklich jede einzelne verfluchte Zeile selbst nochmal live testet ...

Grundsätzliche Anmerkungen zu Sprachtreibern und zum Datenbank-Level:
Ein aufmerksamer Leser hat mir mitgeteilt, dass zu leicht der Eindruck entsteht, ich würde das Datenbank-Level 7 verteufeln und immer zu Level 5 raten. Dem ist nicht so, ich habe nur auf mögliche Probleme beim Level 7 hingewiesen, die ich in der Praxis leider sehr oft erlebt habe. Besonders dass beim Zugriff anderer Programme auf die .DBF-Tabellen geprüft werden sollte, ob diese auch damit umgehen können. Wenn die Fremdprogramme das können oder Sie nicht über andere Wege auf .DBF-Tabellen zugreifen steht dem Einsatz von Level 7 nichts im Weg.

Ähnliches gilt für den Sprachtreiber. Die Verwendung von DOS-Zeichensätzen (z. B. DB437) in der BDE ist nur dann eine Überlegung, wenn alte .DBF-Tabellen (z. B. aus MS-DOS Zeiten) verwendet werden, und wenn diese noch parallel vom alten DOS-Programm benutzt werden. Später wäre eine Konvertierung in einen Windows-Zeichensatz ratsam. Bei komplett neuen Tabellen und neuen Anwendungen ist dagegen gleich ein Windows-Zeichensatz vorzuziehen. Auch hier gab es das Missverständnis ich würde generell nur zu DOS-Zeichensätzen raten.

Anmerkung zu dem erwähnten Problem mit REINDEX (Seite 123 und 292):
Der Fehler, dass grosse Tabellen bei reindex (und bei pack, wenn die Tabelle Indexe hat) zum Crash führen, ist nach meinen Tests mit der im Sommer 2006 erschienen Version 2.61 nicht behoben! Ich habe zwar nicht getestet, ob die kritische Grenze noch immer im Bereich von ca. 15,75 Millionen Datensätzen liegt, aber ich habe eine Tabelle mit rund 30 Millionen Datensätzen (Börsenkurse), die kann ich auch mit V 2.61 weder packen noch reindexen ...

Anmerkung zum SEEK-Befehl (Seite 175 u.a.):
Beachten Sie für eigene Tests mit SEEK bitte, dass Sie stets den vollständigen Suchbegriff angeben, wenn die Einstellung SET EXACT auf ON gesetzt ist (was oft die Voreinstellung ist).

Ergänzung zu den Grenzwwerten (Seite 292):
Max. Anzahl von per SET PROCEDURE TO ... miteinander verknüpfbaren Quelldateien ist 512. Ab dBASE Plus V 2.70 (verfügbar ab ca. September 2010, » Infos hier) sind es 2048.

» Zum Anfang der Seite

Anmerkungen zu Band 2, Grundlagen

Seite 205, Ergänzung: statt

use &sVar

kann man natürlich auch

use (sVar)

schreiben. Damit spart man sich die Makro-Substitution mit dem & und die verwendete Variable kann dann auch vom Typ local sein.

Seite 264, Ergänzung: Der Befehl

charset()

gibt den Zeichensatz der gerade offenen Tabelle aus, sofern denn eine Tabelle geöffnet ist. Dieser Zeichensatz der gerade offenen Tabelle kann aber vom in der BDE eingestellten Zeichensatz abweichen, so dass die Befehle

? charset()
? _app.charset


in diesem Fall verschiedene Ergebnisse anzeigen können.

» Zum Anfang der Seite

Anmerkungen zu Band 3, Klassen und Objekte

Kapitel 6, Ergänzung: ein nützlicher Befehl ist findinstance. Er prüft, ob ein Objekt einer bestimmten Klasse im Speicher ist und liefert ggf. eine Referenz auf dieses Objekt zurück. Hierzu ein kleines Beispiel (es verwendet die Datei myclass.prg aus Band 3):

set procedure to myclass.prg
oObj1 = new MyFormClass ( "Titeltext", .t. )
oObj2 = findinstance ( "MyFormClass" )
? oObj1.text
? oObj2.text


Es gibt zweimal Titeltext im Befehlsfenster aus. Die Objektvariable oObj2 erhält durch findinstance einen Verweis auf das im Speicher gefundene Objekt der Klasse MyFormClass.

Allerdings ist findinstance kritisch, wenn mehrere Objekte einer Klasse im Speicher sind:

set procedure to myclass.prg
oObj1 = new MyFormClass ( "Titeltext1", .t. )
oObj2 = new MyFormClass ( "Titeltext2", .t. )
oObj3 = findinstance ( "MyFormClass" )
? oObj1.text
? oObj2.text
? oObj3.text


Sie haben keinen Einfluss, ob findinstance das erste oder zweite Objekt an die Objektvariable oObj3 zuweist. Die Ausgabe des Titeltextes im Befehlsfenster beweist es, mal enthält oObj3 das erste Objekt, mal das zweite. Auch wenn es in diesem einfachen Beispiel meistens das erste Objekt ist, darauf verlassen können Sie sich nicht.

Sie können an findinstance einen opt. zweiten Parameter übergeben, das Objekt ab dem in der internen Objektliste gesucht werden soll. Damit lassen sich in einer Schleife alle Objekte einer Klasse im Speicher ermitteln. Ein Beispiel dazu enthält die Datei findinst.prg, die ich den » Download-Quellcodes zu Band 3 hinzugefügt habe.

» Zum Anfang der Seite