SQL hulp bij Databases koppelen

Status
Niet open voor verdere reacties.

Freeez

Gebruiker
Lid geworden
2 jan 2006
Berichten
5
Hoi allemaal,

Ik heb het volgend probleem / uitdaging waar het me niet geheel duidelijk is of SQL me hiermede kan helpen.

Ik heb een database met verwijzingen naar diversen csv files n.l:.
Capaciteiten.csv
CapaciteitenA.csv
De files hebben een gelijke indeling, doch de A versie heeft geen header
De A versie zijn losse toevoegingen / wijzigingen vanuit ons ERP systeem.
Tot zover simpel (een copy a.csv+b.csv functie kan twee csv files koppelen)

Doch......
Beide files hebben een (index) veld waar geen dubbele hits (wijziging van een bestaand artikel) mogen plaats vinden, en indien dit het geval is dient die van de A versie de voorrang te krijgen (is nieuwer). Uiteindelijk word de capaciteiten.csv ververst, en de A versie verwijderd.

Kan SQL mij hierin helpen ?
 
Dat ka als je beide bestanden apart koppelt. Je kunt dan m.b.v. een UNION query het zaakje aan elkaar koppelen. Bijv:

SELECT * FROM CapaciteitenA
UNION
SELECT * FROM Capaciteiten WHERE id not in (SELECT id FROM CapaciteitenA);


Dat levert je een samengevoegd resultaat op met unieke resultaten waarbij CapaciteitenA voorrang heeft.


Grtz,
 
Hoi Mark,

Als eerst bedankt voor je input hierin. Sorry mijn SQL kennis is erg beperkt.:o

Ik heb je opzet uitgeprobeerd en werkt (ook voor gekoppelde data)
Thanks

Alleen hoe krijg ik de uitkomst van deze (samenvoeg) query nu in capaciteiten.csv ?
Dit kan met een toevoeg query wel, doch deze blijkt niet om te kunnen gaan met een UNION

Groetjes
Johan
 
Zodra je UNION query's maakt kan de design view van access er niet meer mee overweg. Als je voor de query die je nu hebt het volgende zet (vervang wel even de tabelnaam ;))wordt de query omgezet in een toevoeg-query:

INSERT INTO doeltabel...


Grtz,
 
SQL Hhulp bij databases koppelen

Hoi Mark,

Regel toegevoegd geeft:
INSERT INTO capaciteiten
SELECT *
FROM capaciteitenA
UNION SELECT * FROM capaciteiten WHERE code not in (SELECT veld3 FROM capaciteitenA);

Geeft me de volgende opmerking:
De component FROM bevat een syntaxisfout. UNION word dan gemarkeerd.
Kan Acces wel het resultaat terug plaatsen in een (gekoppelde) database die gebruikt word in de query ?.
Als ik een lege database aanwijs (als doel) krijg ik de zelfde fout melding.

Groetjes
Johan
 
Je probeert nu de resultaten in de capaciteiten tabel terug te zetten. DAt gaat niet omdat daar ook uit geselecteerd wordt. Als je een tabel met gelijke indeling aanmaakt en die vult gaat het wel goed. Dan zul je die tabel moeten exporteren naar een bestand om het csv bestand bijgewerkt te krijgen.

Om te testen of je updates kunt doen in het csv bestand vanuit access kun je de tabel openen en proberen een record toe te voegen. Als dat werkt kun je eventueel ook met een query de resultaten uit de tijdelijke tabel met een query weer terugzetten in de capaciteiten tabel (nadat je hem hebt leeggemaakt).


Grtz,
 
Hoi Mark,

Sorry voor de vele vragen, ik hoop dat ik je ook eens kan assisteren (waarschijnlijk niet in SQL / databases) doch je weet maar nooit....:o

De bedoeling was ook de orginele capaciteiten.csv te overschrijven, doch ik merk dat dit niet met een toevoeg / aanmaak query kan.
Wat je voorstelt een tabel aanmaken met dezelfde indeling, werkt bij mij niet. Ik strand op het feit dat INSERT INTO / INTO zijn voorbehouden aan query's die UNION niet ondersteunen. .

capaciteiten.csv = test.csv en capaciteitenA.csv = testA.csv geworden.

Letterlijk krijg ik de volgende foutmelding:
Een actiequery kan niet als rijbron worden gebruikt
SELECT * INTO capacitor
FROM A
UNION SELECT * FROM test
WHERE code not in (SELECT code FROM testA)
ORDER BY code;

En als ik het alsvolgt oplos krijg ik:

De component FROM bevat een syntaxisfout (en ik zie niet wat precies)
INSERT INTO capacitor
SELECT *
FROM testA
UNION SELECT * FROM test
WHERE code not in (SELECT code FROM testA)
ORDER BY code;

Ik vind het niet logisch dat ik, voordat je gaat schrijven vooraf een bepaald type query moet selecteren, of is het mogelijk de query's te koppelen ?

Is SQL nu taai voor een niet programmeur offe .....

Groetjes
Johan
 
Ik heb de situatie even nagebouwd met 3 eenvoudige tabellen. Produkten, Produkten2 en ProduktenSamen. Met 2 queries kun je het voor mekaar krijgen.

De Union query, die het gewenste resultaat oplevert (opgeslagen in access als "UnionSelect":
SELECT *
FROM Produkten
UNION SELECT * FROM Produkten2
WHERE Produktnaam not in (SELECT Produktnaam FROM Produkten)
ORDER BY Produktnaam;

En een append query die de resultaten daarvan in de tabel ProduktenSamen zet:
INSERT INTO ProduktenSamen
SELECT *
FROM UnionSelect;

Samengevoegd tot 1 query wordt dat:
INSERT INTO ProduktenSamen
SELECT *
FROM (SELECT *
FROM Produkten
UNION SELECT * FROM Produkten2
WHERE Produktnaam not in (SELECT Produktnaam FROM Produkten)
ORDER BY Produktnaam);

Ik hoop dat het principe hiermee duidelijk is. Nu alleen nog even vertalen naar je eigen tabelstructuur.


Grtz,
 
SQL hulp bi Databases koppelen

Thanks Mark, :thumb:

het kwartje is gevallen !! ;)


Groetjes
Johan
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan