Maken van een update query

Status
Niet open voor verdere reacties.

RonaldRoenhorst

Gebruiker
Lid geworden
25 dec 2008
Berichten
188
Hoe maak ik een query waarmee ik vanuit de de tbl_nieuwedata de tabel tbl_main kan updaten..
Alle nieuwe data uit de tbl_nieuwedata, updaten in de tbl_maindata met behoud van de data die gelijk is aan die in de tbl_nieuwedata.
Bekijk bijlage TestUpdate.zip
 
Laatst bewerkt:
Goedemiddag,

Volgens mij heb je daar 2 queries voor nodig.

Eerst een toevoegquery waarmee je niet bestaande records in de main tabel toevoegt.

INSERT INTO tbl_main
SELECT tbl_nieuwedata.*
FROM tbl_main RIGHT JOIN tbl_nieuwedata ON tbl_main.Chargenummer = tbl_nieuwedata.Chargenummer
WHERE (((tbl_main.Chargenummer) Is Null Or (tbl_main.Chargenummer)=0));

en dan een bijwerk query waarmee je in mijn voorbeeld alleen het veld Remarks in de twee tabellen met elkaar vergelijkt. Als Remarks in de nieuwe tabel een andere inhoud heeft, dan wordt de inhoud van Remarks in de main tabel overschreven.

UPDATE tbl_main INNER JOIN tbl_nieuwedata ON tbl_main.Chargenummer = tbl_nieuwedata.Chargenummer SET tbl_main.Remarks = [tbl_nieuwedata].[Remarks]
WHERE ((Not (tbl_nieuwedata.Remarks)=IsNull([tbl_nieuwedata].[Remarks]) And (tbl_nieuwedata.Remarks) Not In ([tbl_main].[Remarks])));
.

Succes.

Gr. Jan
 
Leg eens uit wat je met Updaten bedoelt. Dat is namelijk het Engels voor Bijwerken, en dat is alleen bedoeld voor het bijwerken van bestaande records. In [tbl_nieuwedata] heb je echter ook records staan die je niet in [tbl_main] hebt staan, en die moet je toevoegen. Dat is, zoals Jan ook al aangaf, een aparte handeling. Zij toevoegquery kan overigens ook anders:
Code:
INSERT INTO tbl_main ( Chargenummer, ItemID, ItemName, Volume, Remarks )
SELECT Chargenummer, ItemID, ItemName, Volume, Remarks FROM tbl_nieuwedata
WHERE (Chargenummer Not In (select Chargenummer from tbl_main))
 
Werkt perfect JHDW, en je hebt gelijk Michel dat ik hier bedoel bijwerken.
Is het ook mogelijk om 2 rijen bij te werken, bijvoorbeeld de kolom Price (kom er zelf even niet uit hoe de regel WHERE zou moeten zijn of is dat alleen mogelijk in een nieuwe query

UPDATE tbl_nieuwedata INNER JOIN tbl_main ON tbl_nieuwedata.Chargenummer = tbl_main.Chargenummer SET tbl_nieuwedata.Remarks = [tbl_main].[Remarks] And tbl_nieuwedata.Price = [tbl_main].[Price]
WHERE ((Not (tbl_main.Remarks)=IsNull([tbl_main].[Remarks]) And (tbl_main.Remarks) Not In ([tbl_nieuwedata].[Remarks])));
 
Laatst bewerkt:
Hallo Ronald,

Zoiets zou moeten werken.
Ik heb de code van Michel er ook in verwerkt (daar heb ik ook weer wat van geleerd:thumb:)
Misschien zijn er wel mooiere oplossingen, maar die komen dan vanzelf.

Code:
    With DoCmd
        .SetWarnings False
        .RunSQL "INSERT INTO tbl_main ( Chargenummer, ItemID, ItemName, Volume, Remarks )" _
              & "SELECT Chargenummer, ItemID, ItemName, Volume, Remarks FROM tbl_nieuwedata " _
              & "WHERE (Chargenummer Not In (select Chargenummer from tbl_main));"
        .RunSQL "UPDATE tbl_main INNER JOIN tbl_nieuwedata ON tbl_main.Chargenummer = tbl_nieuwedata.Chargenummer SET tbl_main.Remarks = [tbl_nieuwedata].[Remarks] " _
              & "WHERE (((tbl_nieuwedata.Remarks)<>IsNull([tbl_nieuwedata].[Remarks]) And (tbl_nieuwedata.Remarks) Not In ([tbl_main].[Remarks])));"
        .RunSQL "UPDATE tbl_main INNER JOIN tbl_nieuwedata ON tbl_main.Chargenummer = tbl_nieuwedata.Chargenummer SET tbl_main.Price = [tbl_nieuwedata].[Price] " _
              & "WHERE (((tbl_nieuwedata.Price)<>IsNull([tbl_nieuwedata].[Price]) And (tbl_nieuwedata.Price) Not In ([tbl_main].[Price])));"
        .SetWarnings True
    End With

Gr. Jan
 
Je hebt geen veld Price in je voorbeeld, dus daar kunnen we ook niet echt mee spelen. Wel een voorbeeldje dus met een ander veld:
Code:
UPDATE tbl_main INNER JOIN tbl_nieuwedata ON tbl_main.Chargenummer = tbl_nieuwedata.Chargenummer SET tbl_main.Volume = [tbl_nieuwedata].[Volume]
WHERE (tbl_main.Volume<>[tbl_nieuwedata].[Volume]);
Deze query werkt tbl_main bij als de waarde in Volume in tbl_nieuwedata afwijkt van tbl_main. Als je op verschillende velden wilt testen die onafhankelijk zijn van elkaar, zul je verschillende queries moeten maken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan