Memo Felder sinnvoll ersetzen

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Memo Felder sinnvoll ersetzen

Beitrag von mini990 »

Hallo,
nachdem ich ja nun ein DBT-Problem hatte folgende Frage:
Wie kann man sinnvoll die Memo-Felder ersetzen?
Inhalt der Memofelder ist aktuell bis zu 1.534 Byte

Gruß Stefan
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Memo Felder sinnvoll ersetzen

Beitrag von Martin Altmann »

Statt Memofelder nimm (Text)dateien im Filesystem und merke dir den zugehörigen Dateinamen im Datensatz.

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

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Memo Felder sinnvoll ersetzen

Beitrag von Rudolf »

Hallo,
bei TopDown hat es XMEMO gegeben, könnte jetzt Freeware sein.
Grüße
Rudolf
Welcome To X-Memo

X-Memo is a Multiple Line Edit control for memos which stores text in DBF files instead of DBT/FPT files. It eliminates the need for memo fields and avoids the problems inherent in them. X-Memo has Encryption (optional) and Automatic Record Recycling so it is secure, has no unused space, and no need to be Packed. It is a subclass of XbpMle and can be placed on a data entry form or in a popup memo dialog, just like a standard Mle object.

X-Memo accepts either Pixel or Row/Column coordinates, so it can be used by any Xbase++ programmer, including users of Top-Down Library and eXpress++. The package includes a special version for use in the Top-Down DE System. It uses the same file structure as "Word Wrapper" (the popular Clipper utility of similar function) and can use Word Wrapper files from Clipper applications being converted to Xbase++. * SOURCE CODE IS INCLUDED *

Features

1) Stores text in DBF files - avoids the shortcomings of DBT/FPT memo files:

a) DBT/FPT files store text in blocks so there is unused space, and they do not shrink when text is
erased. Even if the program uses record recycling on the primary data DBFs, the memo files
continue to grow over time, creating bloated files, and the entire database must be packed in
order to remove discarded text and reduce size. This is time consuming, creates down-time for
the system, requires large amounts of free hard drive space, and carries the usual dangers
associated with large scale data operations. In addition, depending on how the data is
deleted, sensitive memo information can remain in the memo file and be visible to prying eyes.

X-Memo does not create unused blocks of space and has Automatic Record Recycling to reuse
any records that are discarded. If a memo is erased or reduced in size, its discarded records
are blanked out, so no data remains. X-Memo uses the blank records before appending any
new ones, so there is rarely any unused space. If a large amount of memo text is erased,
X-Memo's built in Pack routine can be called to immediately reduce the file size, without
touching the primary data. Only the memotext DBF is packed, completely eliminating the need
to pack the data DBF.

b) Memo files can get corrupted. If a memo file is damaged or missing, the data DBF cannot be
opened. X-Memo avoids these dangers by using standard DBF files for the memotext storage.
The memo text is always available through any DBF utility or programming interface. The data
DBF can be moved or opened for maintenance purposes, free from any dependence on the
memotext file.

2) Encryption - Text in memo files can be easily read with file viewers. X-Memo has an optional
encryption algorithm which keeps sensitive information safe from snoopers.

3) Insert and Overstrike modes - The standard Mle object has Insert Mode only.

4) Insert Key codeblock - X-Memo accepts an optional codeblock to be evaluated whenever the
Insert Key is pressed. This allows you to add an INS/OVR display to your user interface.

5) HotKeys - Any number of HotKeys and their associated action codeblocks may be assigned to the
X-Memo object. When a HotKey codeblock is evaluated, the X-Memo object is sent into the
codeblock as a parameter. This allows easy manipulation of the X-Memo object from the user
interface.

6) Edit Timeout - Built in edit timer allows setting the timeout interval, and a codeblock for controlling
the Timeout behavior.

7) Ctrl-U keystroke for Undo - This keystroke is common to Clipper programs and allows compatibility
with Clipper applications.

8) Built in Message System - The results of every operation, such as loading or saving memos, are
written to the X-Memo instance variable :cRetMsg where they can be easily accessed. This
includes any error messages. Many possibilities exist for this information, such as writing to a
logging routine, pop up dialogs to inform the user, or status bar displays.

9) Language control - All of the messages passed to :cRetMsg are defined in the xmemo.ch file.
They may be translated into other languages.

10) Word Wrapper compatibility - X-Memo uses the identical memo DBF file structure as used by the
popular Clipper utility. Existing Word Wrapper files can be used directly by the Xbase++ program.

11) Convenient Class methods - X-Memo contains several easy to use methods for controlling the
Mle (the cKey parameter represents a unique memo_key string such as a customer ID number):

:LoadMemo(cKey) - Loads memo from the memotext DBF into the Mle buffer.

:SaveMemo(cKey) - Writes buffer contents to the memotext DBF.

:EraseMemo(cKey) - Erases entire memo from the memotext DBF.

:GoToEnd() - Forces cursor to end of existing text. Display will scroll down if needed

:HasMemo(cKey) - Returns True if cKey exists in the memotext DBF.

:PackFile() - Removes any blank records from the memotext DBF.

:PrnArray(nLineWd) - Formats memo for printing. Returns an array in which each
element is a row of text to be printed.

:SetTimer() - Allows external control of the built in Edit TimeOut feature.

12) Configuration - Many items are configurable with X-Memo parameters, including the following
(most of these have default values):

datalink - a codeblock which returns the unique memo_key. Example:

bDatalink := {|| CUST->idnum }

filename - name of the memotext DBF
alias - alias for the memotext DBF
path - path for the memotext DBF
DBE - Dabase engine for the memotext DBF
edit/view mode - can open in either mode, and can be switched
font - uses compound font names
view mode background color - any color usable in Xbase++
vertical and horizontal scroll bars - either or both

...and all other attributes and methods inherited from XbpMle.

13) Pre-Written Utilities
PopXmemo() - A ready-to-use "black box" routine which pops up a dedicated window with
an Xmemo control and "Save"/"Cancel" buttons. Parameters exist to configure all aspects
of the Xmemo and the window, including size, location, and whether it is a Modal or a Child.

Source Code - for the routines you see in this Demo.

*******
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Memo Felder sinnvoll ersetzen

Beitrag von mini990 »

Das mit den Textdateien scheidet wegen der Anzahl aus.
500.000 + im Schnitt, bei manchen Anwendern das doppelte.....

Werde mal Xmemo testen

Danke für die tipps

Gruß Stefan
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: Memo Felder sinnvoll ersetzen

Beitrag von brandelh »

Die DBT sind ja gnadenlos ineffektiv, aber mit der FOXDBE kann man Memofelder schon nutzen.
Ein Problem tritt nur auf wenn beim Schreiben was schief geht, oder die Admins beim Restore die Dateien nicht gleichzeitig austauschen (das muss mir mit DBT mal passiert sein - denke ich heute, damals meinte ich Schreibfehler ;-) )

Bei wirklich großen Daten sollte wohl ein SQL Server her.

Aber warum sind 500.000 Dateien ein Problem ? Mit Ntfs sollte die Anzahl im Unterverzeichnis doch unbegrenzt sein oder ?
Der Vorteil von Textdateien liegt eindeutig darin, dass man über den Dateinamen in beide Richtungen sauber die Zuordnung prüfen kann. Bei Memofeldern geht das nicht.
Gruß
Hubert
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Memo Felder sinnvoll ersetzen

Beitrag von Koverhage »

Hallo Hubert,
richtig, 500.000 Dateien sind kein Problem, außer
mit dem Explorer oder wenn man ein Array mit den Files erstellt.
Dann wird das ganze langsam (gerade ja bei lahmen Netzwerkverbindungen)
aber in diesem Fall greift man ja wohl immer direkt auf eine Datei zu.

Ich selbst würde zu XMEMO tendieren
Gruß
Klaus
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Memo Felder sinnvoll ersetzen

Beitrag von Rudolf »

Hallo,
hatte schon Probleme mit Memofeldern, das Problem ist dass man die nicht so einfach reparieren kann. Konnte nur retten indem ich solange in der Datei skippte bis beim Lesen vom Memo das Programm abstürzt. Löschen ist nur mehr mit DBFNAVIGATOR gegangen, mit XBASE Programmen Absturz bei allen Feldfunktionen. Dann Datei in neue kopieren. Aber sowas kann man nicht automatisieren bzw. ins Programm einbauen dass es auch der Kunde im Notfall machen kann. Also 100% Vertrauen würde ich Memofeldern auf keinen Fall bei sensiblen Daten.
Grüße
Rudolf
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: Memo Felder sinnvoll ersetzen

Beitrag von AUGE_OHR »

brandelh hat geschrieben:Die DBT sind ja gnadenlos ineffektiv, aber mit der FOXDBE kann man Memofelder schon nutzen.
Genau ! oft steht da nicht viel drin für einen "ganzen Block"

DBT Memo arbeitet mit 512 Bytes d.h. auch 100 Byte belegen einen 512 Bytes Block.
FPT Memo arbeiten mit 64 Bytes also wenn du Glück hast reduziert sich die FPT Memo auf 1/8 also weniger als 200MB

also mach doch einfach mal den Test und übertrage die Memo DBT Daten in ein FPT Memo und vergleiche die hinterher wie viel es bei dir bringt
brandelh hat geschrieben:Ein Problem tritt nur auf wenn beim Schreiben was schief geht, oder die Admins beim Restore die Dateien nicht gleichzeitig austauschen (das muss mir mit DBT mal passiert sein - denke ich heute, damals meinte ich Schreibfehler ;-) )
he he ... wie ich auch sage
Memo Datei halten "ewig" wenn ... man die nicht (oft) ändert ...
---

nun ist es normal so das man "in" der DBF ein Feld Type Memo anlegt.
wenn es nun darauf ankommt mit vielen Memo zu arbeiten dann kann man die auch "abkoppeln" von der Haupt-DBF.

Code: Alles auswählen

KDMEMO.DBF
 KNDR 	C 6
 NOTIZ	M 8
es erfordert zwar nun etwas Aufwand mit

Code: Alles auswählen

SET RELATION TO KDMEMO->KDNR INTO Kunden
aber wenn die KDMEMO "kaputt" geht ist die Kunden.DBF nicht direkt davon betroffen.

---

Text Datei und Verzeichnisse wären dann OK wenn : User nicht daran rumfummeln
Rechnung z.b. als PDF statt im Memo wäre eben nicht mal kurz vom User "veränderbar"
gruss by OHR
Jimmy
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Memo Felder sinnvoll ersetzen

Beitrag von Rudolf »

und darum speichert XMEMO alles in DBF Felder und nicht in FTP oder DBT Dateien. Und wenn eine Zeile kaputt ist, kann man den Rest noch verwenden. Ist also viel sicherer. Ich verwende es nicht weil ich TOPDOWN nicht einsetze, aber der Sourcecode ist dabei, vielleicht könnte man es umschreiben um es unabhängig zu machen bzw. mit eXpress++ zu verwenden.
Grüße
Rudolf
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Memo Felder sinnvoll ersetzen

Beitrag von Koverhage »

Es ist unabhängig von TopDown, Xmemo ist ein eigenständiges Produkt.
Gruß
Klaus
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: Memo Felder sinnvoll ersetzen

Beitrag von brandelh »

Hat jemand den aktuellen Quellcode von X-Memo und TopDown herunter geladen ?
Ich komme mit dem Repository irgendwie nicht zurecht.
Gruß
Hubert
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Memo Felder sinnvoll ersetzen

Beitrag von Rudolf »

Hallo Klaus,
ich denke nicht dass es unabhängig ist:
X-Memo accepts either Pixel or Row/Column coordinates, so it can be used by any Xbase++ programmer, including users of Top-Down Library and eXpress++. The package includes a special version for use in the Top-Down DE System
aber ich werde meine Version mal genau anschauen. Kann ich das Tool hier posten ? Soweit ich weiss ist alles von Clayton Freeware jetzt.
Grüße
Rudolf
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: Memo Felder sinnvoll ersetzen

Beitrag von brandelh »

Ich bin jetzt nicht der englisch Crack, aber ich lese das so:

"by any Xbase++ programmer, including users of Top-Down Library and eXpress++."

es kann von jedem benutzt werden, da pixel und row/col Koordinaten genutzt werden können, einschließlich - aber nicht exclusive ! - "users of Top-Down Library and eXpress++"

Das Gesamtpaket muss also unabhängig sein, aber ...

"The package includes a special version for use in the Top-Down DE System"

es ist auch eine spezielle Version enthalten, die nur für "Top-Down DE System" ist.
Soweit ich weiss ist alles von Clayton Freeware jetzt.
so habe ich das verstanden, warum man nicht einfach eine ZIP das letzten Standes anbietet ist mir schleierhaft.
Gruß
Hubert
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Memo Felder sinnvoll ersetzen

Beitrag von Rudolf »

Hallo, dann kann ich zumindest meine Version anbieten
http://www.formcommander.net/download/xmemo.zip
Grüße
Rudolf
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Memo Felder sinnvoll ersetzen

Beitrag von Rudolf »

sorry, war kurz gesperrt, download geht wieder
Grüße
Rudolf
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: Memo Felder sinnvoll ersetzen

Beitrag von brandelh »

Danke,

Ich erhalte nach dem download seltsame Hinweise ... "ungewöhnlicher Download" ... "Seite ... gehackt wurde ..." aber die ZIP scheint dennoch ok zu sein ...
Gruß
Hubert
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Memo Felder sinnvoll ersetzen

Beitrag von Rudolf »

Hallo, komisch, bei mir kommt keine Meldung, Hauptsache es funktioniert. Hatte vorher eine htaccess im Verzeichnis, hab die Datei gelöscht und geht jetzt ohne Passwort.
Grüße
Rudolf
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Memo Felder sinnvoll ersetzen

Beitrag von mini990 »

Hallo Rudolf,
die Zip-Datei lässt sich leider nicht herunterladen...

Gruß Stefan
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Memo Felder sinnvoll ersetzen

Beitrag von Rudolf »

Hallo,
bei mir gehs, versuch mal diesen Link
http://www.formcommander.net/joomla/ind ... y/14-tools
Grüße
Rudolf
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Memo Felder sinnvoll ersetzen

Beitrag von mini990 »

Hat geklappt, danke

Gruß Stefan
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Memo Felder sinnvoll ersetzen

Beitrag von mini990 »

Habs jetzt wie folgt gelöst...
Ist im Memofeld Inhalt vorhanden erzeuge ich einen Schlüssel der auf eine 2. Datei verweist.
Hier wird der Inhalt des Memofeldes zeilenweise geschrieben.
Dateigröße deutlich verringert, Memofeld-Problem beseitigt....

Vorher:
DBF 390 MB
DBT 1.603 MB
Nachher
DBF1 389 MB
DBF2 727 MB

Gruß Stefan
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Memo Felder sinnvoll ersetzen

Beitrag von Rudolf »

Hallo, genau das macht XMEMO, hast Du es verwendet oder selbst eine Lösung ?
Grüße
Rudolf
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Memo Felder sinnvoll ersetzen

Beitrag von mini990 »

Hab mir Xmemo angesehen (ganz gut gefallen) mich dann
aber für eine eigene Lösung entschieden.
Denke nicht ganz so "platzsparend" wie xmemo aber es funktioniert.

Gruß Stefan
Antworten