Hulp bij string zaken ivm conversie locatie bestanden

Status
Niet open voor verdere reacties.
Ben ik weer,
Ik blijf dus "zitten" met het feit dat alle records worden ge-update met de inhoud van het allereerste record.
Ik open het formulier en dan zou ik willen (hum) dat elk record wordt ge-update met het resultaat van de Split UBound functie die losgelaten wordt op dat record.
Code:
strSQL = "UPDATE [CNV-fotos] SET [bestand] = """ & Split([MiniatuurFoto1], "/")(UBound(Split([MiniatuurFoto1], "/"))) & """"
CurrentDb.Execute strSQL, dbFailOnError
Dus ik denk dat na de CurrentDB er nog iets "bij" moet zodat record n ge-update wordt, maar niet met de waarde die "ontstaan is" uit het allereerste record.
Ik denk aan een IF of iets dergelijks maar dat loopt ij mij stuk.

Het moet vast simpels zijn maar mijn lampje gaat niet aan.
Ron
 
Laatst bewerkt:
Ik snap je probleem niet; het enige dat ik kan bedenken is dat je de waarde van [MiniatuurFoto1] uit het formulier haalt, en niet uit de tabel (specifieker: het actieve record). Alleen dan heb je namelijk gelijk. Op basis van de query is dat niet af te leiden. Al zou de query een foutmelding moeten geven als je die waarde uit een formulier haalt, en niet uit de tabel. Je gaf eerder aan dat de query wél werkte als je de query maakte in het query raster. Mijn tip: doe dat dan, en kopieer de SQL uit die query. Die gebruik je dan als basis voor de string strSQL. Dat is in ieder geval mijn werkwijze als ik lui ben en /of geen zin heb om de query helemaal uit te schrijven. Bovendien weet ik dan zeker dat de query werkt en correct is.
 
Ik heb een kleine nuance bij mijn opmerking dat update query wel werkt maar dan niet met de VBA gebruikte code, immers ik kan in SQL geen gebruik maken van Split / Ubound functies.
Dus ik heb voor mijn "beeldvorming" gebruik gemaakt van de Len functie. Dat ging als en speer.
Nu ben ik dus even in de war gebracht door je opmerking:
is dat je de waarde van [MiniatuurFoto1] uit het formulier haalt, en niet uit de tabel (specifieker: het actieve record). Alleen dan heb je namelijk gelijk. Op basis van de query is dat niet af te leiden
Ik wil dus inderdaad van elk record de bestandsnaam UIT het veld [MiniatuurFoto1] halen en plaatsen in het veld bestand.

Ron
 
Ik heb de Split (nog) niet in een SQL geprobeerd, maar blijkbaar werkt dat niet? Dan zit er niks anders op dan een recordset te starten in VBA, en via een loop de hele tabel door te lopen en bij te werken.
 
Heb het van af het weekend weer opgepakt, resultaat is mager.
Ik loop stuk op een veld dat leeg is, dus dat hoeft niet ge-update te worden.
Dus.... even where statemen er bij
Code:
  strSQL = "UPDATE [CNV-fotos] SET [bestand] = """ & Split([MiniatuurFoto1], "/")(UBound(Split([MiniatuurFoto1], "/"))) where [Miniatuurfoto1] <> "" & """"
Geeft allemaal fouten in de trand van:
Verwacht instructie einde
Ik heb al geprobeerd een ; toe te voegen maar nada.
Welk teken ben ik vergeten of.... staat de Where op de verkeerde plaats in deze string?
 
Je zult om de hele procedure (van de loop uiteraard) een IF moeten zetten;
Code:
If Not [MiniatuurFoto1] = VbNullString Then
     ....
     hier je procedure dus
     ....
End If
Dan zouden de lege velden overgeslagen moeten worden.
 
Dank,
Ik heb nu het volgende:
Code:
Private Sub Form_Load()

'Dim cnv1 As DAO.Database'
Dim rst As DAO.Recordset
Set rst = Me.Recordset
'Set cnv1 = CurrentDb'

Dim strSQL As String

'Do While Not rst.EOF'
If Not [MiniatuurFoto1] = vbNullString Then

  strSQL = "UPDATE [CNV-fotos] SET [bestand] = """ _
  & Split([MiniatuurFoto1], "/")(UBound(Split([MiniatuurFoto1], "/"))) _
  & """"
  
CurrentDb.Execute strSQL, dbFailOnError
    tmp = InputBox("", "", strSQL)
    MsgBox (FotoID)
    'rst.MoveNext'
'Loop'
End If
End Sub
Eerder werkte ik met Do While Not rst .EOF en rst.Movenext.
Dat doorliep de handel, het "veld bestand"kreeg de goede waarde, totdat een lege inhoud tegengekomen was en liep in een error.
Nu wordt slechts 1 record doorlopen en alle andere records voorzien van de inhoud van het eerste record.
Wat is het verschil?
Ron
 
Ik snap waarom je dit hebt gedaan op basis van mijn berichtje, maar eigenlijk heb je verkeerd gelezen. Je gebruikt ook nog steeds een constructie die m.i. niet zou moeten werken, of heel veel overbodig werk uitvoert, namelijk een query én een recordset. Gebruik de een of de ander, maar niet allebei. De recordset ziet er zo uit:

Code:
Dim rst As DAO.Recordset
    Set rst = Me.Recordset
    With rst
        Do While Not .EOF
            If Not !MiniatuurFoto1 = vbNullString Then
                .Edit
                !Bestand = Split(!MiniatuurFoto1, "/")(UBound(Split(!MiniatuurFoto1, "/")))
                .Update
            End If
            .MoveNext
        Loop
        .Close
    End With
 
Ha, dit werkt.
De records worden keurig aangepat maar dat ging niet in een keer.
Access hikte nogal vaak of klapte er zelfs uit.
Opnieuw opstarten ging daarna weer wel en na een tijdje, 10 minuten!, zijn de 19.000 records aangepast.
Dat was "project 1".

Ik ga nu kijken of ik uit veld "Miniatuurfoto1" de handel kan opsplitsen naar de naam van een directory en de naam van een subdirectory (= eerste letter van bestand)
Uiteindelijk zal het veld uitgesplits zijn naar:
Rel-adres; hoofd_dir;Sub_dir,bestand.
In Rel-adres staat dan de link die gebruikt moet gaan worden voor het tonen van een foto.

Zeer bedankt voor je geduld, hints en uiteindelijk de oplossing.
(Ik denk dat je nog niet van af bent :(, zal ik dat dan in een ander vraag posten??)
Ron
 
Ben blij voor je dat het gelukt is! Hou de topic nog maar even open, de vervolgvragen zijn hier toch aan gerelateerd.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan