Access: dubbele spaties in een tekstveld wissen

Status
Niet open voor verdere reacties.

JeroenWPM

Gebruiker
Lid geworden
30 sep 2008
Berichten
43
hoi,

dit was al vaker aande orde. Met de functie WorsheetFunction.Trim( haal hier alle dubbele spaties uit ) of trimSpaces( haal hier alle dubbele spaties uit ) zou dit moeten resulteren in de tekst 'haal hier alle dubbele spaties uit'

Zoals in http://www.access-programmers.co.uk/forums/showthread.php?t=113174.

Echter, in mijn versie van access worden deze functies niet herkend. Nog vreemder; als ik een .mdb download en open waar deze functie toegepast is, werkt het wel. Als ik vervolgens de functie in mijn eigen .mdb wil toepassen, werkt het niet meer (foutmelding; undefined function).

Wat doe ik verkeerd? Moet ik nog aanvullende invoegtoepassingen ofzo installeren?

Jeroen
 
Laatst bewerkt:
WorkSheetFunction is geen Access functie, maar een Excel functie. Wil je Excelfuncties gebruiken in een database, dan zul je dus een referentie moeten opnemen naar Excel. Overigens zit je dan in de categorie Met Een Kanon Op Een Mus Knallen, want met een eigen functie SpatieVervangen() kom je een heel eind:

Code:
Function SpatieVervangen(Veld As String) As String

If InStr(1, Veld, "  ") > 0 Then
    SpatieVervangen = Replace(Veld, "  ", " ")
Else
    SpatieVervangen = Veld
End If

End Function

Waarom zou je buiten Access stappen, als het niet nodig is?
 
hoi Octafish,

antwoord op je laatste vraag; omdat je dan vaak naar meer-regelige SQL verhaaltjes moet grijpen...

Als ik jouw voorstel wil toepassen in een query, kan ik deze dan in de 'SQL-view' overtypen? Overal waar je 'veld' hebt staan; kan ik wijzigen naar mijn kolonaam 'parameter'?
 
Ik ben nu hier:

Code:
INSERT INTO ECOdata_voor_FEWS ( ID, monsterdatum, parameter, waarde )
SELECT
 ECOdata.ID,
 ECOdata.monsterdatum,
Function SpatieVervangen (parameter As String) If InStr(1, parameter, "  ") > 0 Then SpatieVervangen = Replace(Veld, "  ", " ") Else SpatieVervangen = parameter End If End Function,
[parameter], 
ECOdata.waarde FROM ECOdata;

en het werkt nog niet.
 
Je moet er, zoals ik al zei, een functie van maken. Dus in een (willekeurige) functiemodule. Het aanroepen is dan weer simpel in een (bijwerkquery), bijvoorbeeld:
Code:
UPDATE tSchaatsers SET tSchaatsers.Naam = SpatieVervangen([Naam]);

(Ja, één regeltje ;) )

Overigens snap ik jouw argument niet...
 
Laatst bewerkt:
tja, als je niet enorm bekend met met SQL, modules etc. Dan zien sommige oplossingen er uit als hocuspocus. maar ik probeer het te begrijpen.

Ik heb een module aangemaakt met de code die je me leverde. Vervolgens heb ik een toevoegquery gemaakt zoals:

Code:
INSERT INTO ECOdata_voor_FEWS ( ID, monsterdatum, parameter, waarde )
SELECT ECOdata.ID, ECOdata.monsterdatum, SpatieVervangen([parameter]), ECOdata.waarde
FROM ECOdata;

Het resultaat is nog niet veranderd; de dubbele spaties in het veld parameter blijven bestaan. De functie (module) wordt wel herkend, maar wist geen dubbele spaties. Nog even verder puzzelen.
 
ok,

ik zie het al. De functie SpatiesVervangen werkt wel, maar haalt letterlijk alleen de dubbele spaties weg. Ik moet tientallen spaties weghalen. De volgende functie met de naam 'onespace' doet het voor mij:

Eerst een module maken voor de functie Onespace()

Code:
Function OneSpace(pstr As String) As String

'*******************************************
'Purpose:   Removes excess spaces from a string
'Input:     ? onespace(" now    is  the  time for   all good men  ")
'Output:    "now is the time for all good men"
'*******************************************

Dim strHold As String
    strHold = Trim(pstr)
    Do While InStr(strHold, "  ") > 0
      strHold = Left(strHold, InStr(strHold, "  ") - 1) & Mid(strHold, InStr(strHold, "  ") + 1)
    Loop
    OneSpace = strHold
    
End Function

en de toevoegquery als volgt:

Code:
INSERT INTO ECOdata_voor_FEWS ( ID, monsterdatum, parameter, waarde )
SELECT ECOdata.ID, ECOdata.monsterdatum, Onespace([parameter]) AS EXPR1, ECOdata.waarde
FROM ECOdata;


Tof!
 
Laatst bewerkt:
Ik denk dat dit bij een grote tabel toch sneller is:

Code:
    Do While InStr(strHold, "  ") > 0
      strHold = Replace(strHold, "  ", " ")
    Loop
 
hoi Octafish,

je hebt gelijk; de 'originele' Onespace functie doet er 40 seconden over, jouw aanpassing daarvan 30 seconden.

Ik heb je suggestie toegepast, hoe simpeler hoe beter!

Code:
Function OneSpace(Veld As String) As String

'*******************************************
'Purpose:   Removes excess spaces from a string
'Input:     ? onespace(" now    is  the  time for   all good men  ")
'Output:    "now is the time for all good men"
'*******************************************

Do While InStr(Veld, "  ") > 0
      Veld = Replace(Veld, "  ", " ")
    Loop
    OneSpace = Veld
    
End Function
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan