strSQL UPDATE Tabel

Status
Niet open voor verdere reacties.

ppetrol

Gebruiker
Lid geworden
14 jul 2013
Berichten
5
Hallo,

Ik ben een database aan het maken voor mij zelf nu wil ik dmv een knop een tabel updaten kan iemand me vertellen hoe ik dit kan oplossen.

SRT update met de waarde uit het veld op een formulier SRTA
Deze werkt goed.

strSQL = "UPDATE [TblAUDIO1] Set [TblAUDIO1].AlbumTitel = Nz([Albumnaam]) "
strSQL = strSQL & "WHERE ((([TblAUDIO1].SRT) Like Nz([SRTA])));"

Maar ik zou graag onderstaande werkend krijgen.
Dat ook NUMMER een update met de waarde uit het veld NUMA

strSQL = strSQL & "WHERE ((([TblAUDIO1].SRT) Like Nz([SRTA] And [TblAUDIO1].NUMMER) Like Nz([NUMA])));"


DoCmd.RunSQL strSQL

Alvast heel erg bedankt.
 
Ik maak al heel wat jaren databases, maar dit soort constructies heb ik dus nooit nodig (gehad). Ofwel ik ben een beetje dom bezig, ofwel jij heel erg slim. Maar als dat zo was, wist jij het antwoord wel en niet ik :).
De juiste variant hangt van het veld af NUMMER af; je wekt wel heel erg de indruk dat het een tekstveld is, ondanks de (nogal numerieke) naam. Twee varianten dus:
Laten we gelijk eens kijken waarom je LIKE gebruikt, want dat snap ik ook niet: LIKE gebruik je als je tekst filtert binnen een veld. Dat vereist ook een wildcard, en dat doe jij dus niet.

Variant 1a
Code:
    strSQL = "UPDATE tblAudio1 SET AlbumTitel = """ & Me.Albumnaam & """, Nummer = """ & Me.ANUM & """" _
        & "WHERE SRT Like """ & Me.SRT & """ AND Nummer Like """ & Me.ANUM & """"
Deze variant ligt het dichts bij wat jij gemaakt hebt, met dus dat tweede veld erbij.

Variant 1b
Code:
    strSQL = "UPDATE tblAudio1 SET AlbumTitel = """ & Me.Albumnaam & """, Nummer = " & Me.ANUM & " " _
        & "WHERE SRT Like ""*" & Me.SRT & "*"" AND Nummer Like ""*" & Me.ANUM & "*"""
Deze variant gebruikt de Like zoals het zou moeten, met wildcards dus. Waarom je een wildcard zou gebruiken om een nummer te filteren, is mij dan weer een raadsel :)

Variant 2a
Code:
    strSQL = "UPDATE tblAudio1 SET AlbumTitel = """ & Me.Albumnaam & """, Nummer = " & Me.ANUM & " " _
        & "WHERE SRT = """ & Me.SRT & """ AND Nummer = """ & Me.ANUM & """"
Deze variant gaat er vanuit dat ANUM een getal is. Zoals je ziet, is dat een stuk makkelijker. In het filter doe ik het hier nog niet. De Like is (terecht, in mijn ogen) vervangen door een =-teken.

Variant 2b
Code:
    strSQL = "UPDATE tblAudio1 SET AlbumTitel = """ & Me.Albumnaam & """, Nummer = " & Me.ANUM & " " _
        & "WHERE SRT = """ & Me.SRT & """ AND Nummer = " & Me.ANUM 
    CurrentDb.Execute strSQL, dbFailOnError
Deze variant lijkt mij de meest zuivere, er vanuit gaande dat Nummer een getal is, en je op de complete waarde uit je velden filtert.

Overigens snap ik nog wel meer niet uit jouw code, want waar komt bij jou de informatie vandaan? Je zegt dat je de query met een knop start, maar je nieuwe waarden komen uit dezelfde velden als je tabel. Vreemd :).
 
Laatst bewerkt:
Ik heb er te weinig verstand van en dus alles bij elkaar gezocht op internet daarom snap ik wel dat U veel vragen hebt.
maar ik zal proberen het uit te leggen.
Ik heb een tabel met geluidsdragers velden zijn o.a. artiest - titel maar een album van die artiest heeft ook een naam.
deze album naam wil ik graag toevoegen dus 10 songs van 1 artiest is 10 keer de album naam invullen.

Nu dankzij de code van U hoef ik maar 1 keer de album naam te typen de rest doet de code.
ik hoop dat het een beetje duidelijk is.

Heel hartelijk dank hiervoor ik ben geweldig geholpen.
 
Ik was hier al bang voor :). Je opzet is verkeerd. Als je zo'n database gaat maken, moet je de gegevenstypes onderscheiden, want die moeten apart worden opgeslagen wil je op de meest optimale manier werken. Jij doet dat dus niet, gezien je vraag.

Ik heb je db niet gezien, dus als ik het verkeerd inschat, moet je het vooral zeggen, maar ik vermoed dat je één tabel gebruikt voor je collectie, waarbij je dus alle gegevens in één record zet. En dat is dus niet de beste werkwijze. Als je een muziekdatabase opzet (althans: zoe doe ik het) dan begin ik met het ontleden van de informatie. Zo heb je, als je van onderen naar boven kijkt, de losse nummers van een plaat. Die hebben een uniek nummer (tracknummer), doorgaans een unieke naam (maar dat hoeft natuurlijk niet), een eigen speelduur en wellicht een eigen categorie. Daarnaast hebben alle nummers een aantal identieke gegevens: de schijf waar de nummers opstaan, en, bij een album van een artiest, dezelfde artiest. Daarnaast kan een schijf nog onderdeel zijn van een album, bijvoorbeeld een dubbelalbum met twee of meer schijven. Dan heb je nog steeds dezelfde artiest, en album uiteraard.

Die nummergegevens die uniek zijn, vormen een eigen entiteit, en vormen een eigen tabel. De gedeelde gegevens vormen óók weer een eigen identiteit. Zo kan een artiest meerdere albums uitbrengen, die allemaal weer hun eigen unieke gegevens hebben. Een album heeft dus eenzelfde artiest, uitgever, jaartal, muziekstijl etc. Herhalende gegevens zijn hier dus de artiest, label etc. Gevolg hiervan: Albums krijgen een eigen tabel. Hoe weet je nu welke nummers op welk album staan? Simpel: in de tabel Albums heb je een AlbumID, en dat veld zet je dus óók in je tabel Nummers. Dus in plaats van alles te herhalen, wat jij doet, hoef ik alleen maar twee tabellen aan elkaar te koppelen en middels een formulier te verbinden. De rest doet Access automatisch.

Kijken we even verder, dan hebben we dus de artiesten. Om te voorkomen dat ik elke keer bij een album de artiest moet intypen (of op jouw manier kopiëren), maak ik een aparte tabel met Artiesten, en die koppel ik dan weer op basis van ArtiestID aan de tabel Albums. Hier geldt ook weer voor: nooit meer overtypen :).

Ik hoop dat je het principe een beetje gaat zien nu, en dat je je eigen database ontwerp nog eens tegen het licht gaat houden :).
 
Beste OctaFish,

Ik snap het, het is al een hele oude database uit het DBase tijdperk.
Ik ga proberen alles te ordenen en een indeling te maken zoals U beschrijft.
Het zal een hele kluif worden maar des te meer voldoening als het klaar is.

Hartelijk dank voor alles.
 
Hier staat een simpel voorbeeldje van een ER diagram. Is een mooi uitgangspunt :).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan