ich finde momentan keine Lösung, auf einfache Art
(ohne VBA) die Anzahl sämtlicher Umlaute in einer
Tabelle zu ermitteln. Könnt ihr mir bitte auf die
Sprünge helfen?
--
Viele Grüße
Lisa
MS MVP Word
Lisa Wilke-Thissen wrote:
>
> ich finde momentan keine Lösung, auf einfache Art
> (ohne VBA) die Anzahl sämtlicher Umlaute in einer
> Tabelle zu ermitteln. Könnt ihr mir bitte auf die
> Sprünge helfen?
Kannst du das etwas spezifizieren? Wieviele Felder koennen Umlaute
enthalten, wieviele Umlaute pro Feld sind moeglich?
Wenn pro Feld max 1 Umlaut vorkommen kann, waere UNION dein Freund:
SELECT Count(*) FROM DeineTab WHERE Feld1 LIKE '*ä*'
UNION
SELECT Count(*) FROM DeineTab WHERE Feld1 LIKE '*ö*'
UNION
SELECT Count(*) FROM DeineTab WHERE Feld1 LIKE '*ü*'
UNION
SELECT Count(*) FROM DeineTab WHERE Feld2 LIKE '*ä*'
UNION
...
Wenn mehrere Umlaute pro Feld moeglich sind, sehe ich ohne VBA keine
Moeglichkeit.
Folgende VBA-Funktion gibt dir die Anzahl Zeichen zurueck, allerdings musst
du in dem Beispiel jeden Umlaut getrennt abfragen:
http://www.freevbcode.com/ShowCode.Asp?ID=1025
Die Abfrage waere:
SELECT
Sum(CharCount([Feld1]&[Feld2]&[Feld3], 'ä')
+ CharCount([Feld1]&[Feld2]&[Feld3], 'ö')
+ CharCount([Feld1]&[Feld2]&[Feld3], 'ä'))
FROM DeineTab
(alles ungetestet)
Im Beispiel werden alle Felder, die Umlaute enthalten koennten, auf einmal
an die Funktion uebergeben, der Performance wegen. Aber schnell wirds
trotzdem nicht.
Gruss - Peter
--
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com
3. SEK Sa/So 16./17.5.2009, Nürnberg
Lisa Wilke-Thissen schrieb:
> ich finde momentan keine Lösung, auf einfache Art
> (ohne VBA) die Anzahl sämtlicher Umlaute in einer
> Tabelle zu ermitteln. Könnt ihr mir bitte auf die
> Sprünge helfen?
Ohne VBA fällt mir keine Lösung ein.
Eventuell kann man einen regulären Ausdruck auf jedes Text- und Memofeld
loslassen, wobei mir da spontan auch keiner zu einfällt.
Ich würde mir zumindest eine Hilfsfunktion in VBA schreiben, etwa:
Public Function AnzahlUmlaute(AString As String) As Long
und die in einer Abfrage nutzen.
mfG
--> stefan <--
--
Access-FAQ http://www.donkarl.com/
KnowHow.mdb http://www.freeaccess.de
Newbie-Info http://www.doerbandt.de/Access/Newbie.htm
"Stefan Hoffmann" schrieb
> Lisa Wilke-Thissen schrieb:
>> ich finde momentan keine Lösung, auf einfache Art
>> (ohne VBA) die Anzahl sämtlicher Umlaute in einer
>> Tabelle zu ermitteln. Könnt ihr mir bitte auf die
>> Sprünge helfen?
> Ohne VBA fällt mir keine Lösung ein.
dann bist du dir mit Peter einig, womit meine Befürchtung bestätigt ist.
> Eventuell kann man einen regulären Ausdruck auf jedes Text- und Memofeld
> loslassen, wobei mir da spontan auch keiner zu einfällt.
>
> Ich würde mir zumindest eine Hilfsfunktion in VBA schreiben, etwa:
>
> Public Function AnzahlUmlaute(AString As
> String) As Long
>
> und die in einer Abfrage nutzen.
Vielen Dank für die Info.
Ich wünsche dir schöne Ostertage,
Lisa
MS MVP Word
hast du an einem Oster-Samstag nichts Interessanteres zu tun ;-)? Die Sonne
scheint, genieße sie ...
"Peter Doering" schrieb
> Lisa Wilke-Thissen wrote:
>>
>> ich finde momentan keine Lösung, auf einfache Art
>> (ohne VBA) die Anzahl sämtlicher Umlaute in einer
>> Tabelle zu ermitteln. Könnt ihr mir bitte auf die
>> Sprünge helfen?
>
> Kannst du das etwas spezifizieren? Wieviele Felder
> koennen Umlaute enthalten, wieviele Umlaute pro
> Feld sind moeglich?
jedes Feld kann Umlaute enthalten. Ein einzelnes Feld kann theoretisch
unbegrenzt viele Umlaute enthalten (wenngleich es wohl in keinem Fall mehr
als 2 sein werden).
> Wenn pro Feld max 1 Umlaut vorkommen kann,
> waere UNION dein Freund:
>
> SELECT Count(*) FROM DeineTab WHERE Feld1 LIKE '*ä*'
> UNION
> SELECT Count(*) FROM DeineTab WHERE Feld1 LIKE '*ö*'
> UNION
> SELECT Count(*) FROM DeineTab WHERE Feld1 LIKE '*ü*'
> UNION
> SELECT Count(*) FROM DeineTab WHERE Feld2 LIKE '*ä*'
> UNION
> ...
>
> Wenn mehrere Umlaute pro Feld moeglich sind, sehe ich
> ohne VBA keine Moeglichkeit.
Das habe ich bereits befürchtet :-(.
> Folgende VBA-Funktion gibt dir die Anzahl Zeichen
> zurueck, allerdings musst du in dem Beispiel jeden
> Umlaut getrennt abfragen:
>
> http://www.freevbcode.com/ShowCode.Asp?ID=1025
>
> Die Abfrage waere:
>
> SELECT
> Sum(CharCount([Feld1]&[Feld2]&[Feld3], 'ä')
> + CharCount([Feld1]&[Feld2]&[Feld3], 'ö')
> + CharCount([Feld1]&[Feld2]&[Feld3], 'ä'))
> FROM DeineTab
>
> (alles ungetestet)
>
> Im Beispiel werden alle Felder, die Umlaute enthalten
> koennten, auf einmal an die Funktion uebergeben, der
> Performance wegen. Aber schnell wirds trotzdem nicht.
Vielen Dank. Es ist also möglich - aber nicht mal eben so ...
Fröhliche, sonnige Ostertage wünscht
Lisa
MS MVP Word
Lisa Wilke-Thissen schrieb:
> Vielen Dank für die Info.
> Ich wünsche dir schöne Ostertage,
Dir auch.
> MS MVP Word
Access :)
Peter Doering wrote:
> Folgende VBA-Funktion gibt dir die Anzahl Zeichen zurueck, allerdings
> musst du in dem Beispiel jeden Umlaut getrennt abfragen:
>
> http://www.freevbcode.com/ShowCode.Asp?ID=1025
Aber nicht sehr "ingeniös", dieser Ansatz, gell? Wenn ich denke, wieviele
Zeilen Code hier für einen einfachen Ausdruck benötigt werden...
Gruss
Henry
--
Los geht's: SEK3 Anmeldung bei www.donkarl.com/?sek
Microsoft MVP Office Access
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com
So schnell werfen wir die Flinte nicht ins Korn. Das geht nämlich ziemlich
einfach mit einem Ausdruck, indem Du die Umlaute durch "" ersetzt und
anschliessend die Länge des Resultates von der Länge des Original Inhaltes
subtrahiert wird. Hier ein Beispiel für's Direktfenster:
DeinFeld = "ABCöäüÄÖÜ"
? len(DeinFeld) - len(replace(replace(replace(DeinFeld, "ä", ""), "ö", ""),
"ü", ""))
6
Falls Du das als Ausdruck brauchen willst, dann sind alle , durch ; zu
ersetzen also z.B.
= Len(DeinFeld) -
Len(Replace(Replace(Replace(DeinFeld;"ä";"");"ö";"");"ü";""))
Falls das Feld NULL enthalten kann, mach noch ein Nz() um Dein Feld rum.
HTH
Henry
--
"Henry Habermacher" schrieb
[Umlaute zählen]
> So schnell werfen wir die Flinte nicht ins Korn. Das geht nämlich ziemlich
> einfach mit einem Ausdruck, indem Du die Umlaute durch "" ersetzt
> und anschliessend die Länge des Resultates von
> der Länge des Original Inhaltes subtrahiert wird. Hier ein Beispiel für's
> Direktfenster:
>
> DeinFeld = "ABCöäüÄÖÜ"
> ? len(DeinFeld) - len(replace(replace(replace
> (DeinFeld, "ä", ""), "ö", ""), "ü", ""))
> 6
>
> Falls Du das als Ausdruck brauchen willst, dann sind alle , durch ; zu
> ersetzen also z.B.
>
> = Len(DeinFeld) - Len(Replace(Replace(Replace(DeinFeld;"ä";"")
> ;"ö";"");"ü";""))
>
> Falls das Feld NULL enthalten kann, mach noch
> ein Nz() um Dein Feld rum.
danke dir, das werde ich heute Abend testen :-).
Viele Grüße nach Phuket,
Lisa
MS MVP Word
Henry Habermacher wrote:
> Peter Doering wrote:
>> Folgende VBA-Funktion gibt dir die Anzahl Zeichen zurueck, allerdings
>> musst du in dem Beispiel jeden Umlaut getrennt abfragen:
>>
>> http://www.freevbcode.com/ShowCode.Asp?ID=1025
>
> Aber nicht sehr "ingeniös", dieser Ansatz, gell? Wenn ich denke, wieviele
> Zeilen Code hier für einen einfachen Ausdruck benötigt werden...
Naja, ich gebe zu, die Idee mit Len/Replace ist nicht schlecht und wird
auch funktionieren, aber die Argumentation bez. "einfachen Ausdruck" finde
ich etwas gewagt. ;-)
Lisas fertige Zeile duerfte bei unterstellten 3 Umlautfeldern etwa so
aussehen:
SELECT Len(Nz([Feld1] & [Feld2] & [Feld3], "")) -
Len(Replace(Replace(Replace(Nz([Feld1] & [Feld2] & [Feld3], ""),
"ä",""),"ö",""),"ü","")) AS AnzahlUmlaute
FROM ...
Hattest du nicht mal die Lesbarkeit von SQL-Statements kritisiert? ;-)
@Lisa, Henrys Loesung ist trotz aller Schachtelung wohl schneller als ein
VBA-Konstrukt und daher zu bevorzugen.
Gruss - Peter
--
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com
3. SEK Sa/So 16./17.5.2009, Nürnberg http://www.donkarl.com/SEK/
"Peter Doering" schrieb
> Naja, ich gebe zu, die Idee mit Len/Replace
> ist nicht schlecht und wird auch
> funktionieren, aber die Argumentation bez.
> "einfachen Ausdruck" finde ich etwas gewagt. ;-)
>
> Lisas fertige Zeile duerfte bei unterstellten
> 3 Umlautfeldern etwa so aussehen:
>
> SELECT Len(Nz([Feld1] & [Feld2] &
> [Feld3], "")) - Len(Replace(Replace
> (Replace(Nz([Feld1] & [Feld2] & [Feld3],
> ""), "ä",""),"ö",""),"ü","")) AS
> AnzahlUmlaute FROM ...
> @Lisa, Henrys Loesung ist trotz aller
> Schachtelung wohl schneller als ein
> VBA-Konstrukt und daher zu bevorzugen.
eine VBA-Lösung durfte es definitiv nicht sein. Und auf Henrys Lösung wäre
ich nie gekommen - ganz so einfach ist sie ja in der Tat auch nicht.
Insofern hat sich die Frage hier mal wieder gelohnt und Klarheit gebracht
:-).
Einen schönen Wochenanfang,
Lisa
MS MVP Word
Peter Doering wrote:
> Lisas fertige Zeile duerfte bei unterstellten 3 Umlautfeldern etwa so
> aussehen:
>
> SELECT Len(Nz([Feld1] & [Feld2] & [Feld3], "")) -
> Len(Replace(Replace(Replace(Nz([Feld1] & [Feld2] & [Feld3], ""),
> "ä",""),"ö",""),"ü","")) AS AnzahlUmlaute
> FROM ...
Als Purist hättest Du jetzt auf die Nz() Funktion verzichten und statt
dessen eine Konkatenation mit "" einführen müssen ("" & Feld1 & Feld2 &
Feld3), da Nz() IIRC in Jet nicht implementiert ist.
> Hattest du nicht mal die Lesbarkeit von SQL-Statements kritisiert? ;-)
Du bist der Purist, nicht ich ;-) Und obiges Statement ist IMO doch
einigermassen gut lesbar, wenn man Nz() und die überflüssigen eckigen
Klammern weglässt und das ganze mit Zeilenumbrüchen aufpeppt ;-)
Henry Habermacher wrote:
> Peter Doering wrote:
>> Lisas fertige Zeile duerfte bei unterstellten 3 Umlautfeldern etwa so
>> aussehen:
>>
>> SELECT Len(Nz([Feld1] & [Feld2] & [Feld3], "")) -
>> Len(Replace(Replace(Replace(Nz([Feld1] & [Feld2] & [Feld3], ""),
>> "ä",""),"ö",""),"ü","")) AS AnzahlUmlaute
>> FROM ...
>
> Als Purist hättest Du jetzt auf die Nz() Funktion verzichten und statt
> dessen eine Konkatenation mit "" einführen müssen ("" & Feld1 & Feld2 &
> Feld3), da Nz() IIRC in Jet nicht implementiert ist.
Das eine hab ich aus erzieherischen Gruenden drin gelassen, denn
- Feld1 & Feld2 & Feld3 ergibt Not Null, wenn eines der Felder
nicht Null ist.
- Feld1 & Feld2 & Feld3 ergibt Null, wenn alle Felder Null sind.
Um das Problem der zweiten Alternative verstaendlich zu machen, hab ich das
Nz dringelassen.
Aber eingefuehrt in die Diskussion hattest du das Nz in deiner Antwort an
Lisa. ;-)
>> Hattest du nicht mal die Lesbarkeit von SQL-Statements kritisiert? ;-)
>
> Du bist der Purist, nicht ich ;-)
Schon, aber du hattest das kritisiert, wegen der Lesbarkeit, oder? Daher
erfreut mich dein Sinneswandel. ;-)
Peter Doering wrote:
>> Als Purist hättest Du jetzt auf die Nz() Funktion verzichten und statt
>> dessen eine Konkatenation mit "" einführen müssen ("" & Feld1 & Feld2 &
>> Feld3), da Nz() IIRC in Jet nicht implementiert ist.
>
> Das eine hab ich aus erzieherischen Gruenden drin gelassen, denn
>
> - Feld1 & Feld2 & Feld3 ergibt Not Null, wenn eines der Felder
> nicht Null ist.
> - Feld1 & Feld2 & Feld3 ergibt Null, wenn alle Felder Null sind.
> Um das Problem der zweiten Alternative verstaendlich zu machen, hab ich
> das Nz dringelassen.
Lies nochmal was ich geschrieben habe:
"" & Feld1 & Feld2 & Feld3
Dieses Statement ergibt nie NULL, weil eben der erste Operand ("") nicht
NULL ist. Damit kann hier Nz() getrost und ohne Seiteneffekte weggelassen
werden, ohne irgendwelche erzieherischen Fähigkeiten anzweifeln zu wollen.
Warum eigentlich nicht VBA?
Die Lösung mit regulärem Ausdruck ist wirklich kurz:
' Verweis auf Microsoft VBScript Regular Expressions 5.5 erforderlich
Function flAnzUmlaute(ByVal strTest As String) As Long
Dim ObjRegExp As RegExp
Set ObjRegExp = New RegExp
ObjRegExp.IgnoreCase = True
ObjRegExp.Global = True
ObjRegExp.MultiLine = True
ObjRegExp.Pattern = "(Ä|Ö|Ü)"
Set Matches = ObjRegExp.Execute(strTest)
flAnzUmlaute = Matches.Count
End Function
Aufruf:
'AnzahlUmlaute = flAnzUmlaute("12345hhh ÄÖÜ äöü")
'Ein Abarbeiten der Tabellenfelder ist allerding unumgänglich
AnzahlUmlaute = flAnzUmlaute(Tabellenfeld)
Wolfgang
Warum eigentlich nicht VBA?
Die Lösung mit regulärem Ausdruck ist wirklich kurz:
' Verweis auf Microsoft VBScript Regular Expressions 5.5 erforderlich
Function flAnzUmlaute(ByVal strTest As String) As Long
Dim ObjRegExp As RegExp
Dim Matches As Object
Wolfgang Badura schrieb:
> Warum eigentlich nicht VBA?
> Die Lösung mit regulärem Ausdruck ist wirklich kurz:
>
> ' Verweis auf Microsoft VBScript Regular Expressions 5.5 erforderlich
> Function flAnzUmlaute(ByVal strTest As String) As Long
> Dim ObjRegExp As RegExp
> Dim Matches As Object
> Set ObjRegExp = New RegExp
>
> ObjRegExp.IgnoreCase = True
> ObjRegExp.Global = True
> ObjRegExp.MultiLine = True
> ObjRegExp.Pattern = "(Ä|Ö|Ü)"
> Set Matches = ObjRegExp.Execute(strTest)
> flAnzUmlaute = Matches.Count
> End Function
>
> Aufruf:
> 'AnzahlUmlaute = flAnzUmlaute("12345hhh ÄÖÜ äöü")
> 'Ein Abarbeiten der Tabellenfelder ist allerding unumgänglich
> AnzahlUmlaute = flAnzUmlaute(Tabellenfeld)
wenn Du mit dem letzten Satz meinst, dass man für jedes Tabellenfeld
einen eigenen Aufruf schreiben müsste, dann irrst Du. Du kannst alle
Felder konkatenieren und brauchst so für jeden Datensatz nur einen
Funktionsaufruf.
AnzahlUmlaute = flAnzUmlaute("" & Feld1 & Feld2 & Feld3)
CU
--
Thomas
Homepage: www.Team-Moeller.de
Stimmt. Habe ich nicht berücksichtigt.
Das hängt damit zusammen, daß ich ein fertiges Codeschnipsel für die
Auswertung
aller in einer beliebigen Tabelle einer beliebigen Datenbank enthaltenen
Felder habe.
Dauert dann mit Sicherheit länger.
Aber wenig Code ist es schon, und RegExpressions sind schnell!
Wolfgang
Wolfgang Badura schrieb:
>> Du kannst alle Felder konkatenieren und brauchst so für jeden Datensatz
>> nur einen Funktionsaufruf.
>>
>> AnzahlUmlaute = flAnzUmlaute("" & Feld1 & Feld2 & Feld3)
>
> Stimmt. Habe ich nicht berücksichtigt.
> Das hängt damit zusammen, daß ich ein fertiges Codeschnipsel für die
> Auswertung
> aller in einer beliebigen Tabelle einer beliebigen Datenbank enthaltenen
> Felder habe.
> Dauert dann mit Sicherheit länger.
> Aber wenig Code ist es schon, und RegExpressions sind schnell!
das glaube ich auch. Trotzdem wird der Code für jede Tabellenzeile
einmal durchlaufen. Das bedeutet, dass jedesmal ein RegExp-Objekt
instanziert werden muss.
Du könntest den Code noch etwas beschleunigen, indem Du dafür sorgst,
dass das RegExp-Objekt nur einmal instanziert werden muss. Gerade bei
größeren Tabellen dürfte sich das positiv auswirken.
Für die Umsetzung könntest Du das Singleton-Pattern verwenden:
- - 8< - - 8< - - 8< - -
Public m_RegExp As RegExp
Private Property Get MyRegExp() As VBScript_RegExp_55.RegExp
If m_RegExp Is Nothing Then
Set m_RegExp = New RegExp
m_RegExp.IgnoreCase = True
m_RegExp.Global = True
m_RegExp.MultiLine = True
m_RegExp.Pattern = "(Ä|Ö|Ü)"
End If
Set MyRegExp = m_RegExp
End Property
Public Function flAnzUmlaute(ByVal strTest As String) As Long
Dim Matches As Object
Set Matches = MyRegExp.Execute(strTest)
flAnzUmlaute = Matches.Count
End Function
- - 8< - - 8< - - 8< - -
"Wolfgang Badura" schrieb
> "Lisa Wilke-Thissen" wrote
>> ich finde momentan keine Lösung, auf einfache Art (ohne VBA) die Anzahl
>> sämtlicher Umlaute in einer Tabelle zu ermitteln. Könnt ihr mir bitte auf
>> die Sprünge helfen?
>
> Warum eigentlich nicht VBA?
die Aufgabe wurde Schülern gestellt, denen jegliche VBA- sowie
SQL-Kenntnisse fehlen. Ich war (und bin) der Meinung, dass der
Schwierigkeitsgrad damit zu hoch ist, wollte mich aber hier vergewissern.
Immerhin habe (hoffentlich nicht nur) ich durch diesen Thread wieder mal
viel hinzu gelernt :-).
> Trotzdem wird der Code für jede Tabellenzeile einmal durchlaufen. Das
> bedeutet, dass jedesmal ein RegExp-Objekt instanziert werden muss.
> Du könntest den Code noch etwas beschleunigen, indem Du dafür sorgst, dass
> das RegExp-Objekt nur einmal instanziert werden muss. Gerade bei größeren
> Tabellen dürfte sich das positiv auswirken.
Im Ernstfall ist die einmalige Instanzierung mit
> Public m_RegExp As RegExp
>
> Private Property Get MyRegExp() As VBScript_RegExp_55.RegExp
>
> If m_RegExp Is Nothing Then
> Set m_RegExp = New RegExp
> m_RegExp.IgnoreCase = True
> m_RegExp.Global = True
> m_RegExp.MultiLine = True
> m_RegExp.Pattern = "(Ä|Ö|Ü)"
> End If
>
> Set MyRegExp = m_RegExp
>
> End Property
die schnellste Lösung. Klar.
Eigentlich dachte ich, daß die Anfrage nach den Umlauten für eine reale
Anwendung gedacht ist.
Wie alt die Schüler sein mögen?
Doch selbst wenn nicht kann man, wie Lisa schrieb, wieder einiges
dazulernen.
Danke für die Hinweise und mit Gruß aus Wien
Wolfgang
Lisa Wilke-Thissen wrote:
> "Wolfgang Badura" schrieb
>> "Lisa Wilke-Thissen" wrote
>>> ich finde momentan keine Lösung, auf einfache Art (ohne VBA) die
>>> Anzahl sämtlicher Umlaute in einer Tabelle zu ermitteln. Könnt ihr
>>> mir bitte auf die Sprünge helfen?
>> Warum eigentlich nicht VBA?
> die Aufgabe wurde Schülern gestellt, denen jegliche VBA- sowie
> SQL-Kenntnisse fehlen. Ich war (und bin) der Meinung, dass der
> Schwierigkeitsgrad damit zu hoch ist
Da kann ich Dir nur zustimmen.
Solltest Du später einmal in Erfahrung bringen können, wie der
Aufgabensteller dies gelöst sehen möchte, wäre ich sehr daran interessiert,
dass zu erfahren.
Tschüs
Jens
Wolfgang Badura wrote:
> "Thomas Möller" ...
>
>> Trotzdem wird der Code für jede Tabellenzeile einmal durchlaufen. Das
>> bedeutet, dass jedesmal ein RegExp-Objekt instanziert werden muss.
>> Du könntest den Code noch etwas beschleunigen, indem Du dafür sorgst, dass
>> das RegExp-Objekt nur einmal instanziert werden muss. Gerade bei größeren
>> Tabellen dürfte sich das positiv auswirken.
>
> Im Ernstfall ist die einmalige Instanzierung mit
>
>> Public m_RegExp As RegExp
>> [...]
>> End Property
>
> die schnellste Lösung. Klar.
Die schnellere Loesung im Vergleich zu wiederholter Instanzierung.
Die schnellste Loesung ist IMO nach wie vor Henry's Vorschlag.
"Wolfgang Badura" schrieb
> Eigentlich dachte ich, daß die Anfrage nach den Umlauten für eine reale
> Anwendung gedacht ist.
wer weiß, vielleicht wird der ein oder andere Mitleser die Lösungen jetzt
sogar für ähnliche Zwecke einsetzen.
> Wie alt die Schüler sein mögen?
Gymnasium, Oberstufe.
> Doch selbst wenn nicht kann man, wie Lisa schrieb, wieder einiges
> dazulernen.
Genau - über sich selbst, über andere und vor allem über die Möglichkeiten
des Programms ;-)
--
Sonnige Grüße
Lisa
MS MVP Word
"Jens Schilling" schrieb
[Umlaute zählen]
> wie der Aufgabensteller dies gelöst sehen möchte,
jetzt gar nicht mehr ;-). Mit Hilfe einer Abfrage sollte eigentlich
herausgefunden werden, in wie vielen Datensätzen Umlaute enthalten sind.
Dummerweise wurde die Aufgabe aber anders formuliert (erinnert irgendwie an
Pannen des Zentralabiturs). Insofern ging es nun darum, ob die Schüler eine
*relativ* einfache Lösung hätten finden können. Die Antwort lautet eindeutig
"nein". Der Aufgabensteller selbst hat keine gefunden, die Access-Profis
haben keine gefunden...
Lisa Wilke-Thissen wrote:
> "Jens Schilling" schrieb
> [Umlaute zählen]
>> wie der Aufgabensteller dies gelöst sehen möchte,
>
> jetzt gar nicht mehr ;-).
Alles klar, danke.
Tschüs
Jens
Wolfgang Badura wrote:
> Warum eigentlich nicht VBA?
Es gibt viele Gründe, warum auf VBA verzichtet werden muss. Nur einige
Beispiele:
- VBA ist aus Sicherheitsgründen nicht zugelassen (kommt ab A2007 immer
häufiger vor)
- Es gibt kein VBA, sondern nur eine MDB welche von einem anderen Programm
oder z.B. von VBScript ausgelesen wird.
- Performance: VBA in SQL Ausdrücken, wenn diese dann noch für die WHERE
Bedingung benötigt werden, zwingt Access alle Tabellen lokal
zwischenzuspeichern und die Ergebnisse lokal auszuwerten, Indices können
dann nicht mehr benutzt werden.
- Der Benutzer will kein VBA und der Code soll vom Benutzer später
weiterbearbeitet werden.
Die SQL-Server, Oracle-, MySQL- usw. Profis wuerden wohl auch keine finden
und das kann auch begruendet werden: Access bzw. Jet ist wie die anderen
genannten ein DBMS (wenn auch kein aktives) und unterliegt damit den Regeln
der Normalisierung, anschaulich dargestellt im Script zum Thema unter
http://www.donkarl.com/ AEK - Downloads - AEK7. Um das umsetzen zu koennen,
muessten die Informationen atomar vorliegen, also jedes Zeichen im eigenen
Feld. Da in so einem Szenario Standardanforderungen kaum noch realisiert
werden koennten, kaeme niemand auf diese absurde Idee. Aus den diskutierten
Workarounds ergibt sich aber mit Len/Replace mindestens eine Loesung, die
auch bei grossen Datenmengen noch respektable Antwortzeiten liefert.