Verwijderquery om lege records te verwijderen

  • Onderwerp starter Onderwerp starter scw
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

scw

Gebruiker
Lid geworden
5 jun 2009
Berichten
530
Met de import van Excel-bestanden komen in m'n Access tabellen een groot aantal lege records mee. De meest makkelijke oplossing lijkt mij om een query te maken, welke draait na het importeren van de tabellen en de lege records verwijderd.

Hoe zou zo'n query eruit komen te zien? Kan iemand mij hiermee op weg helpen? Moet ik bijv alle velden van de tabel in een verwijderquery opnemen en vervolgens bij criteria " " zetten of * of iets dergelijks?

Alvast bedankt voor de hulp,

:thumb: scw
 
Wanneer is er iets leeg, houd het in dat als er alleen id ingevuld de record is of bepaalde velden

delete from tabelnaam where koloma = null and kolom = null
 
Hoi Mighty84,

Bedankt voor je reactie. Aangezien het een geimporteerde tabel is, heb ik er geen ID in zitten. Moet ik echt alle kolommen in de verwijderquery opnemen en dan als criteria = null zetten??

gr scw
 
Als je een verwijderquery maakt ziet de code er zo uit:
Code:
DELETE [Import].* FROM [Import]
WHERE ([Tekstveld]="")
Eigenlijk dus heel simpel. Bij het toevoegen van de velden pak je het eerste veld (*) en verder geef je nog een restrictie aan, want je wilt uiteraard niet alles verwijderen. In jouw geval pak je een veld dat nu leeg is, en dat niet leeg mag zijn. Is het een getalveld, dan filter je op [Getalveld] Is Null, een tekstveld filter je op [Tekstveld]="".
 
Code kan simpeler

Code:
DELETE 
FROM [Import]
WHERE ([Tekstveld]="")

In een DELETE statement verwijder je alle records uit een tabel, al dan niet onder voorwaarden,
Je hoeft dus niet expliciet naar 1, meerdere of alle kolommen te verwijzen.

Tardis
 
Hmmm... het lijkt allemaal perfect te kloppen, maar toch verwijderd Access de desbetreffende lege regels niet :confused:...

Ik heb de code als volgt (goede aanvulling Tardis!):
Code:
DELETE 
FROM [tblImport]
WHERE ([OrderNummer]="")

Waarbij het veld OrderNummer dus bewust een tekstveld is. Ik heb het ook nog eens geprobeerd met Null, maar dat werkt natuurlijk niet. Vervolgens heb ik op een ander veld "Adres" geprobeerd welke daadwerkelijk ook alleen maar tekst erin heeft staan, maar dat bood ook geen soelaas. De velden zijn daadwerkelijk leeg, er staat geen 0 in ofzo...... :confused::confused::confused:

Ik draai de query apart en klik hem handmatig aan. Hij geeft wel een melding "U staat op het punt 0 regels te verwijderen".

Hmmm....
 
Een leeg veld heeft in de regel de waarde null.
Dus:
.... WHERE [OrderNummer] Is Null
 
Hoi Harry46!!!! Nu doet ie het!! Bedankt voor je aanvulling en uiteindelijk oplossing! :thumb::thumb::thumb:
 
Tuurlijk klopt Harry z'n oplossing; die had ik zelf al om 11:00 gegeven :)
 
maar een tekstveld kun je ook op "" filteren..... hoe dan ook! En aangezien we het hier over een importbestand hebben, werkt dat dus...
 
Wellicht dat het werkt maar Harry maakt wel degelijk een terechte opmerking.
Of een veld NULL is staat los van het gegevenstype.
NULL is trouwens niet hetzelfde als "" maar laten we het maar bij de vraagstelling van TS houden.

Tardis
 
Of een veld numeriek of tekst is maakt niet uit, een leeg veld is altijd null
Om een definitief einde aan een (enigszins off-topic) discussie te maken: Null, "" en leeg zijn niet altijd hetzelfde. Ik heb de afgelopen jaren regelmatig gemerkt dat op de een of andere manier filteren op een leeg tekstveld verschillende resultaten opleverde. Daarbij ging het dan om de filters:
[Tekstveld]="" en [Tekstveld] Is Null. Ik heb de verschillen nooit goed kunnen verklaren, vandaar dat ik tegenwoordig een leeg teksveld als volgt filter:
Code:
[Tekstveld]="" OR [Tekstveld] Is Null
Het resultaat hiervan blijkt altijd consequent een goed resultaat op te leveren. En dat is uiteindelijk toch wat je wilt... Dat dit filter niet werkt op een numeriek veld mag duidelijk zijn. Maar dat gaf ik al aan, en Harry ook: een leeg numeriek veld filter je met [NumeriekVeld] Is Null.
 
Off topic, het verschil is simpel te verklaren uit het feit wat NULL voorstelt.
NULL wil zeggen onbepaald, het geeft feiteliijk een toestandswaarde weer.
Zolang een veld, ongeacht het gegevenstype, niet is ingevuld, heeft het de toestandswaarde NULL.
Zodra een veld is ingevuld, wijzigt de toestandswaarde en voldoet het aan de voorwaarde NOT NULL.

Kan voor niet-experts verwarrend zijn als je een veld invult en vervolgens weer leegpoetst.
Na leegpoetsen heeft het veld immers niet meer de waarde NULL, ook al staan er op het oog geen gegevens meer in.
Dan voldoet het veld aan de voorwaarde "".

Beste is inderdaad om altijd te checken op 2 waarden, NULL en "".
Een goede manier om dat in 1 klap af te vangen is middels deze check

Len(trim(objectnaam &"")) = 0

Tardis
 
We blijven nog even Off-topic, want dit was mij (uiteraard) al lang bekend... Het probleem werd nu juist veroorzaakt door importtabellen, waar niks aan was gesleuteld. De tabellen kwamen uit Excel, waar ze met een paar standaardmacro's waren opgeschoond, en waarbij alle velden waren omgezet naar Tekst. En toch bleek het ene veld met een Null-filter niet te filteren en wel met "", en een ander juist omgekeerd.
Ben wel blij dat je mij als een Niet-Expert wegzet.....
 
Ben wel blij dat je mij als een Niet-Expert wegzet.....

Goh voel je je aangesproken :P
Je weet je aardig te redden in MS Access dus hoe je erbij komt dat ik je als niet-expert betitel is mij een volslagen raadsel :cool:
Wat jij wil.

Tardis
 
Je reageert op mij met de tekst:
Kan voor niet-experts verwarrend zijn als je een veld invult en vervolgens weer leegpoetst.
Maar ik kan gelukkig wel wat hebben :p
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan