ich versuche die UnicodeKompression in AccessXP-Tabellen per Code zu setzen.
Dazu folgende Code-Zeile:
fld.Properties("UnicodeCompression").Value = True
Ich durchlaufe alle Tabellen und darin alle Felder (fld) und führe für jedes
Textfeld diese Zeile aus. Zuerst einmal wunderte ich mich, dass es immer
Fehler gab. Der Grund war, dass es die Eigenschaft "UnicodeCompression" gar
nicht gab! Daraufhin habe ich folgenden Code über alle Textfelder laufen
lassen:
Set prpNeu = fld.CreateProperty("UnicodeCompression", dbBoolean, True)
fld.Properties.Append prpNeu
Im Ergebnis war dann tatsächlich im Tabellen-Entwurf der DB die Eigenschaft
"Unicode-Kompression" mit "Ja" belegt. Leider hatte diese Einstellung aber
keinerlei Wirkung! Ich habe die DB komprimiert und erwartete eine
Schrumpfung. Leider falsch gedacht.
Ich habe anschließend eine alte DB aus einer Sicherung wiederhergestellt und
manuell in ein paar Feldern die Kompression aktiviert. Komprimieren &
Reparieren und siehe da: die DB wurde kleiner.
Wenn ich die Einstellung also manuell setze zeigt sie Wirkung - per Code
gesetzt nicht!
Habe daraufhin per Code die manuell veränderten Felder überprüft und
eigenartigerweise haben die von mir veränderten Felder immer noch keine
Property namens "UnicodeCompression"!
Großes Fragezeichen!
nochmal in Stichpunkten:
- Felder haben per Standard Uni-Komp auf Nein
- ich will dies auf Ja haben
- manuelles Umstellen zeigt gewünschte Wirkung
- per Code umstellen hat keinerlei Wirkung
- _vor_ manueller Umstellung auf "Ja" besitzen die Felder die Property
"UnicodeCompression" gar nicht!?!?
- _nach_ manueller Umstellung auf "Ja" besitzen die Felder diese Eigenschaft
immer noch nicht!?!?
ab hier könnte man denken, dass die Property "UnicodeCompression" nicht das
ist wofür ich sie halte, aber:
- nach Erzeugung der Property per Code steht die Eigenschaft im
Tabellenentwurf auf "Ja"!!! Bleibt aber ohne Wirkung!?!?
Das heißt - die Code-Gesetzte Eigenschaft wird im Tabellenentwurf erkannt
und angezeigt - hat aber keine Wirkung.
Hilfe
und frohe Neujahrs-Grüße
Thomas
leider kann ich Dir nicht helfen.
Ich besitze die Frechheit mich an Deine Frage "dranzuhängen"
Ich muss eine Db "nachbauen" aus Zeiten ohne UnicodeKompression.
Ist es nun sinnvoll bei A03 diese Kompression einzuschalten?
Es kommt aber zu Datenaustausch zwischen den verschiedenen
Access Versionen. Oder muss man da irgendwelche Probleme befürchten?
Gehe ich recht in der Annahme das Du alle Eigenschaften durchlaufen hast
und nicht nur nach einer bestimmten gesucht hast?
Nicht das diese Eigenschaft irgendwie anders heisst?
--
Gruss von Jürgen
Thomas Raasch meinte:
> Das heißt - die Code-Gesetzte Eigenschaft wird im Tabellenentwurf
> erkannt und angezeigt - hat aber keine Wirkung.
Versuche mal ein UPDATE Feld = TRIM(Feld)
und komprimiere dann.
Hilft das?
Gruß
"Jürgen Körbler" <meine.a...@arcor.de> schrieb im Newsbeitrag
news:6smpakF...@mid.individual.net...
> Hallo,
>
>
>
> leider kann ich Dir nicht helfen.
> Ich besitze die Frechheit mich an Deine Frage "dranzuhängen"
:)
> Ich muss eine Db "nachbauen" aus Zeiten ohne UnicodeKompression.
> Ist es nun sinnvoll bei A03 diese Kompression einzuschalten?
> Es kommt aber zu Datenaustausch zwischen den verschiedenen
> Access Versionen. Oder muss man da irgendwelche Probleme befürchten?
meines Wissens nach kann man von Nicht-Unicode (Acc97) in Unicode (Acc03)
übertragen - was sollte da auch schief gehen?!
der umgekehrte Fall geht nicht insofern man Unicode-Zeichen gespeichert
hat - klar, denn damit kann Acc97 nix anfangen
Aber wie auch immer... all das hat mit der Kompression nix zu tun! Diese
Eigenschaft sorgt einfach nur dafür, dass alle "normalen" Zeichen anstatt
mit 2 Bytes wieder nur mit 1 Byte gespeichert werden. Ohne Kompression
belegt also jedes Zeichen 2 Bytes, mit Kompression belegen die meisten
Zeichen nur noch 1 Byte.
Man spart also nur Speicherplatz. Beim Abrufen der Daten aus der DB wirds
dann wieder de-komprimiert. Hierbei könnte man evtl. höhere Rechenlast
erwarten - aber ich hab derart noch nicht bemerkt!
Das ist im Grunde wie das Datei-Komprimieren auf NTFS-Laufwerken... die
Datei bleibt unverändert erhalten, nimmt aber weniger Speicherplatz ein.
Besonders im LAN-Zugriff hat Access hierdurch schnellere Zugriffszeiten, da
weniger Bytes übers Netz geschickt werden. Das ist spür- und messbar!
> Gehe ich recht in der Annahme das Du alle Eigenschaften durchlaufen hast
> und nicht nur nach einer bestimmten gesucht hast?
> Nicht das diese Eigenschaft irgendwie anders heisst?
Jawoll! Hab alle Propertys durchlaufen und keine hatte einen Namen der
überhaupt auf UnicodeCompression hindeutet.
:(
Grüße
Thomas
"Jörg Ackermann" <trashf...@gmx.de> schrieb im Newsbeitrag
news:6sms2gF...@mid.individual.net...
> Versuche mal ein UPDATE Feld = TRIM(Feld)
> und komprimiere dann.
hab ich getan - brachte ganze 4 KB! Vermutlich weil irgendwo ein paar
sinnlose Leerzeichen entfernt wurden. Also leider auch nicht das, was zu
erwarten wäre.
Mir scheint es so als sei die benötigte Property nicht über DAO
erreichbar...
Ich probier jetzt mal ADO
Grüße
Thomas Raasch schrieb:
> ich versuche die UnicodeKompression in AccessXP-Tabellen per Code zu setzen.
> Dazu folgende Code-Zeile:
> fld.Properties("UnicodeCompression").Value = True
>
> Ich durchlaufe alle Tabellen und darin alle Felder (fld) und führe für jedes
> Textfeld diese Zeile aus. Zuerst einmal wunderte ich mich, dass es immer
> Fehler gab. Der Grund war, dass es die Eigenschaft "UnicodeCompression" gar
> nicht gab!
Das scheint der Fall zu sein, wenn man die Tabelle per DDL erstellt.
[...]
> nochmal in Stichpunkten:
> - Felder haben per Standard Uni-Komp auf Nein
> - ich will dies auf Ja haben
> - manuelles Umstellen zeigt gewünschte Wirkung
> - per Code umstellen hat keinerlei Wirkung
> - _vor_ manueller Umstellung auf "Ja" besitzen die Felder die Property
> "UnicodeCompression" gar nicht!?!?
> - _nach_ manueller Umstellung auf "Ja" besitzen die Felder diese Eigenschaft
> immer noch nicht!?!?
> ab hier könnte man denken, dass die Property "UnicodeCompression" nicht das
> ist wofür ich sie halte, aber:
> - nach Erzeugung der Property per Code steht die Eigenschaft im
> Tabellenentwurf auf "Ja"!!! Bleibt aber ohne Wirkung!?!?
>
> Das heißt - die Code-Gesetzte Eigenschaft wird im Tabellenentwurf erkannt
> und angezeigt - hat aber keine Wirkung.
Folgendes wirkt sich zwar nicht auf die Property aus, ist dafür aber
wirksam:
CurrentProject.Connection.Execute _
"alter table [Tab] alter column [Textfeld] varchar(255) WITH COMPRESSION"
Anm.:
Vielleicht passiert so etwas auch, wenn man diese Einstellung in der
Entwurfsansicht ändert. Zumindest kommt bei mir (AcXP) beim Speichern
der Tabelle die Info "Ändern des Felddatentyps"
mfg
Josef
--
EPT: (Access Error Prevention Table) http://access.joposol.com/
FAQ: (Access-FAQ von Karl Donaubauer) http://www.donkarl.com/
folgende Zeilen zum Test:
con.Execute "CREATE TABLE tblTest ( tstText VARCHAR(50) WITH COMPRESSION );"
und
con.Execute "ALTER TABLE tblKunden ALTER COLUMN AdressZeile1 VARCHAR(50)
WITH COMPRESSION;"
Die erste Zeile (CREATE TABLE) funktioniert! Danach gibt's eine neue Tabelle
mit dem Textfeld und der Eigenschaft Unicode-Kompression auf Ja. Prima!
Die zweite Zeile (ALTER TABLE) funktioniert fast... sie läuft fehlerfrei
durch und wenn ich die VARCHAR(50) auf (60) ändere ist das dann auch in der
DB so. Er tut also etwas! Nur die Einstellung WITH COMPRESSION scheint er zu
ignorieren!!! Die Eigenschaft Unicode-Kompression steht danach leider
immernoch auf Nein.
Ärgerlich!
Grüße
Thomas Raasch schrieb:
[...]
> con.Execute "ALTER TABLE tblKunden ALTER COLUMN AdressZeile1 VARCHAR(50)
> WITH COMPRESSION;"
> [...] ur die Einstellung WITH COMPRESSION scheint er zu
> ignorieren!!! Die Eigenschaft Unicode-Kompression steht danach leider
> immernoch auf Nein.
Die DB ist bei dir nach dem Komprimieren nicht kleiner geworden?
Als ich das heute testete, blieb zwar die Eigenschaft auf Nein, die DB
wurde aber um genau die gleiche Größe kleiner wie beim Umstellen in
der Entwurfsansicht.
Was mir noch aufgefallen ist:
Wenn man in der Entwurfsansicht von Ja auf Nein umschaltet, wird die
DB nicht größer.
Führt man allerdings "ALTER TABLE ..." ohne "WITH COMPRESSION" aus, so
vergrößert sich die mdb wieder, dafür bleibt der Eigenschaftswert
unverändert.
"Josef Poetzl" <ne...@joposol.com> schrieb im Newsbeitrag
news:i1i5kp6e...@joposol.com...
> Hallo!
>
> Thomas Raasch schrieb:
> [...]
>> con.Execute "ALTER TABLE tblKunden ALTER COLUMN AdressZeile1 VARCHAR(50)
>> WITH COMPRESSION;"
>> [...] ur die Einstellung WITH COMPRESSION scheint er zu
>> ignorieren!!! Die Eigenschaft Unicode-Kompression steht danach leider
>> immernoch auf Nein.
>
> Die DB ist bei dir nach dem Komprimieren nicht kleiner geworden?
>
> Als ich das heute testete, blieb zwar die Eigenschaft auf Nein, die DB
> wurde aber um genau die gleiche Größe kleiner wie beim Umstellen in
> der Entwurfsansicht.
Jetzt klappts!
Also ich habs nun nochmals mit frischen DBs probiert. Und plötzlich gehts :)
Vermutlich klappten die anderen Tests nicht weil ich bei den DBs schon per
Code die Property gesetzt hatte. Jetzt bei einer frischen DB wird durch das
ALTER TABLE die Eigenschaft gesetzt (auch in der Entwurfsansicht stehts nun
auf Ja) und die DB-Größe wird ebenfalls kleiner!
Also meine Erkenntnis hieraus:
nimm ALTER TABLE und versuch es bloss nicht mit
CreateProperty("UnicodeCompression", ..)
Viele Grüße
Thomas