Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Anke_71 am Juni 06, 2012, 11:50:03

Titel: Abschneiden/Truncate nach 255 Zeichen in spezieller Abfrage
Beitrag von: Anke_71 am Juni 06, 2012, 11:50:03
Hallo,
ich habe ein Problem mit einer bereits funktionierenden Lösung und würde eine Erweiterung/Änderung des Codes benötigen:


Ausgangstabelle:
ID  Textfeld
1    A
1    B
2    AAA
2    BBB
3    CCC
3    DD
3    EE

Ich möchte pro ID alle Inhalte in einer Zelle vereinigen, jede ID sollte nur einmal auftreten;
Wunschziel:

ID  Textfeld
1    A;B
2    AAA;BBB
3    CCC;DD;EE


Die Lösung von Oma sieht aus wie folgt:

Modul:
Public Function SZ(ID As Long) As String
Dim strSQL As String
Dim rs As DAO.Recordset

strSQL = "SELECT Textfeld FROM DeineTabelle WHERE ID =" & ID
Set rs = DBEngine(0)(0).OpenRecordset(strSQL)

Do While rs.EOF = False
  SZ = SZ & ";  " & rs!Textfeld
  rs.MoveNext
Loop

SZ = Mid(SZ, 2, 100)
rs.Close
Set rs = Nothing
End Function


Abfrage:

select ID, SZ([ID]) AS Ausgabe
from DeineTabelle
group by ID


Gruß Oma



--> das funktioniert prächtig, allerdings schneidet er mir das Feld "Ausgabe" nach 255 Zeichen ab. Da ich ja gerade mehrere Felder kombiniere, brauche ich unbedingt ein Memo-Feld (das Ganze wird schlussendlich dann eine Tabellenerstellungsabfrage).
Kann jemand helfen, wie man den Code entsprechend anpassen könnte, um ein Memo Feld zu generieren?

Anke

Titel: Re: Abschneiden/Truncate nach 255 Zeichen in spezieller Abfrage
Beitrag von: bahasu am Juni 07, 2012, 09:01:18
Moin Anke,

wäre hilfreich Deine "spezielle" Abfrage zu kennen. Vermutlich weist Du den Funktionswert einer Variablen zu.
Auch frage ich mich, warum erst ab 255 abgeschnitten wird.
Aufgrund der Zeile SZ = Mid(SZ, 2, 100) würde ich erwarten, dass bei 100 geschnitten wird.
Oder ist bei Dir real 255 drin?
Was passiert, wenn du eine Zeile in der Art: SZ = Mid(SZ, 2) verwendest?

Harald

Titel: Re: Abschneiden/Truncate nach 255 Zeichen in spezieller Abfrage
Beitrag von: DF6GL am Juni 07, 2012, 09:32:01
Hallo,

berechnete Spalten in Abfragen werden immer bei 255 Zeichen abgeschnitten.

Das Füllen eines Memofeldes mit dem zusammengesetzen String  sollte per separater Aktualisierungsabfrage erfolgen:



Public Function SZ(ID As Long) As String
Dim strSQL As String
Dim rs As DAO.Recordset

strSQL = "SELECT Textfeld FROM DeineTabelle WHERE ID =" & ID
Set rs = DBEngine(0)(0).OpenRecordset(strSQL)

Do While rs.EOF = False
 SZ = SZ & ";  " & rs!Textfeld
 rs.MoveNext
Loop

SZ = Mid(SZ, 2)   ' lediglich erstes Zeichen abschneiden  
rs.Close
Set rs = Nothing
End Function



z. B.:


Currentdb.Execute "Update tblDeineTabelle set Memofeld = SZ(tblDeineTabelle.ID)"
Titel: Re: Abschneiden/Truncate nach 255 Zeichen in spezieller Abfrage
Beitrag von: bahasu am Juni 07, 2012, 10:25:42
Zitat von: DF6GL am Juni 07, 2012, 09:32:01

berechnete Spalten in Abfragen werden immer bei 255 Zeichen abgeschnitten.

Hallo Franz,

das hatte ich auch mal gelesen.
Bei dem heutigen Versuch (siehe Anlage in der Abfrage "Abfrage1" die Spalte F1_2) hatte ich aber 2 Felder mit je 255 Zeichen in einer Abfrage zusammenfügen können. Wo denke ich "falsch"?

Harald

[Anhang gelöscht durch Administrator]
Titel: Re: Abschneiden/Truncate nach 255 Zeichen in spezieller Abfrage
Beitrag von: DF6GL am Juni 07, 2012, 11:16:53
Hallo Harald,

naja, vielleicht sieht Access den "&"-Operator (noch) nicht als "Berechnung" an...


Titel: Re: Abschneiden/Truncate nach 255 Zeichen in spezieller Abfrage
Beitrag von: bahasu am Juni 07, 2012, 12:12:59
Hallo Franz,

meine erste Vermutung für das Abschneiden war gewesen, was ich zuvor gelesen hatte: "berechnetes wird abgeschnitten".
Deshalb mein Versuch mit "&", wo nichts abgeschnitten wird.

Der nächste Versuch mit "+" schneidet auch nichts ab. Das betrachte ich mal als "angenehme" Überraschung.

Harald
Titel: Re: Abschneiden/Truncate nach 255 Zeichen in spezieller Abfrage
Beitrag von: database am Juni 10, 2012, 10:38:22
Hallo,

@bahasu
Deine Abfrage funktioniert weil keine Gruppierung stattfindet.

Das Problem mit dem Abschneiden bei 255 Zeichen liegt an der Gruppierung!
In der Abfrage wird für das Feld ID 'Guppierung' angegeben und fürs Textfeld MUSS 'Ausdruck' angegeben werden - dann läufts
Im angehängten Beispiel werden für die ID 4 465 Zeichen in der Abfrage ausgegeben.

Ich habe die Function mit einem 'debug.Print' versehen um die Länge der Ausgabe im Direktberiech sichbar zu machen.
Wird das Textfeld gruppiert, werden zwar alle Zeichen eingelesen jedoch im Abfrageergebnis nicht angezeigt.
In der Tabelle habe ich das Textfeld als Memo deklariert um zum Testen eine Unmenge von Zeichen erfassen zu können.




[Anhang gelöscht durch Administrator]
Titel: Re: Abschneiden/Truncate nach 255 Zeichen in spezieller Abfrage
Beitrag von: Anke_71 am Juni 15, 2012, 10:49:01
Hallo, vielen Dank für die Hilfe!

Ich werde die Ansätze ausprobieren - ich hatte mir zwischenzeitlich auch eine Krücke mit einer Anfügeabfrage an eine Zieltabelle gebaut, in der ich das Zielfeld als MEMO Feld definiert hatte. Allerdings eine sehr umständliche Lösung!