Update per SQL?
Hallo Leute,
hab folgendes Problem.
Ich habe in einer Tabelle mit ca. 10 Spalten in manchen Spalten eine 0 drin stehen. Diese 0 müsste ich alle durch ein "" ersetzen. Meine Tabelle sieht so aus.
Name, Spalte1, Spalte2, Spalte3, Spalte4 ....
Nun kann es sein das in einem Datensatz eine 0 in Spalte 1 steht im nächsten in Spalte 4 im nächste viell. auch in keiner Spalte ne 0 enthalten ist.
Hab das ganze mal so probiert.
UPDATE tbl:Daten
SET Spalte1 = "", Spalte2= "", Spalte3="", Spalte4= "" usw.
WHERE Spalte1 = '0', Spalte2='0', usw....
Nun hat er mit aber wenn in einem Datensatz eine 0 vorkam den ganzen Datensatz gelöscht.
Wie müsste das ganze denn heißen wenn er eben nur die Felder in ein "" umwandeln soll, wo eine 0 drin steht?
hoffe ihr könnt mir helfen.
gruß
morpheus
Antwort schreiben
Antwort 1 von RalfH vom 05.12.2019, 14:21 Options
Hallo,
UPDATE DeineTabelle SET DeineTabelle.DeinFeld= ""
WHERE (((DeineTabelle.DeinFeld)="0"));
Gruß Ralf
Hallo RalfH
danke erstmal für deine Hilfe.
Aber mit der Lösung greife ich ja nur auf 1 Feld zu. Ich muss ja aber alle 10 Felder abprüfen. Gibt es denn nicht eine Anweisung die alle 10 Felder abprüft?
Es ist ja nicht gesagt das gerade in der 1 Spalte eine 0 steht.
Ich müsste also also 10 Spalte abprüfen und dann genau die Spalten einzeln auf "" setzten wo eben bisher eine 0 drin steht.
gruß
morpheus
Antwort 3 von Marie vom 05.12.2019, 14:29 Options
Das musst Du einzeln machen mit 10 Abfragen, aber wenn die wirklich Spalte1 usw heissen kannst Du das mit einer Schleife mit VBA machen.
Nur wenn das jetzt ein einziges Mal zu tun ist machste das schneller händisch.
UPDATE tbl:Daten
SET Spalte1 = Null
WHERE Spalte1 = '0',
Gruß Marie
Hallo Marie,
ok danke für deine Hilfe.
Leider heißen die Spalten anders.
Aber ich werde das ganze dann in einzelnen Abfragen machen und bei die Abfragen dann in einen Button in meinem Formular ein, dass bei bedarf die ganzen Abfragen durchlaufen werden.
Danke für deine HIlfe
gruß
morpheus
Antwort 5 von RalfH vom 05.12.2019, 15:25 Options
Hallo nochmal,
Eine Abfrage reicht.
UPDATE DeineTabelle SET DeineTabelle.DeinFeld= "",DeineTabelle SET DeineTabelle.DeinFeld2= "",DeineTabelle SET DeineTabelle.DeinFeld3= "",
WHERE (((DeineTabelle.DeinFeld)="0")) AND (((DeineTabelle.DeinFeld2)="0")) AND (((DeineTabelle.DeinFeld3)="0"));
Gruß Ralf
Antwort 6 von Marie vom 05.12.2019, 23:34 Options
nö Ralf, das kann nich gehen, er hat geschrieben er hat in manchen Spelten eine 0 stehen.
WHERE (((DeineTabelle.DeinFeld)="0")) AND (((DeineTabelle.DeinFeld2)="0")) AND (((DeineTabelle.DeinFeld3)="0"));
AND heisst aber, wenn beide Felder gleichzeitig 0 sind.
Gruß Marie
Antwort 7 von RalfH vom 06.12.2019, 06:24 Options
Guten Morgen,
Hhhm, dann nutzen wir den Operator OR anstatt AND
Gruß Ralf
Antwort 8 von Marie vom 06.12.2019, 10:18 Options
Zitat:
UPDATE DeineTabelle SET DeineTabelle.DeinFeld= "",DeineTabelle SET DeineTabelle.DeinFeld2= "",DeineTabelle SET DeineTabelle.DeinFeld3= "",
WHERE (((DeineTabelle.DeinFeld)="0")) OR (((DeineTabelle.DeinFeld2)="0")) OR(((DeineTabelle.DeinFeld3)="0"));
Ralfilein, schau genau, dann siehste doch, dass es nicht gehen kann. Oben Dein Code mit Or würde bedeuten: Uberall, wo in einer der Spalten eine 0 steht, egal wo, machst Du alle Felder leer. Das war doch das, denke ich mal, was morpheus falsch gemacht hatte.
Du willst nur in der Spalte, wo eine 0 steht ein Leerfeld, sonst nirgendwo, also musst Du alle Spalten einzeln durchlaufen. Eine andere Möglichkeit sehe ich nicht. Natürlich könnte man mit VBA das in einem Aufwasch machen.
Gruß Marie
Hallo Marie
genau das is das Problem.
Ich habe es zuerst so gemacht wie Ralf, dann waren alle Spalten eines Datensatzes leer weil in 1 Spalte eine 0 Stand. Ich möchte aber eben nur GENAU die Zellen einzeln leeren wo eine 0 drin steht die anderen nicht.
So wie suchen und ersetzten.
Suche 0 ersetze durch NULL.
Wie könnte ich das denn per VBA lösen? Gibt es da eine Art suchen und ersetzen für eine Tabelle Marie?
Danke auf jedenfall für deine Hilfe
gruß
morpheus
Antwort 10 von Marie vom 06.12.2019, 10:34 Options
Ja klar kannste das per vba machen, aber mach es doch so, wie Du vorhattest. Mach einen Button, mach Deine 10 Abfragen und nenne sie qryreplace1, qryreplace2, qryreplace3 usw und ruf sie dann bei Klick auf den Button in einer Schleife auf:
Dim inti as Integer
strQuery as String
for inti = 1 to 10 ' oder wieviele Spalten Du hast
strQuery = "qryreplace" & inti
DoCmd.OpenQuery strQuery
next inti
oder so ähnlich, habs jetzt nicht ausprobiert.
Gruß Marie
Antwort 11 von Marie vom 06.12.2019, 10:39 Options
mit
DoCmd.SetWarnings False
DoCmd.OpenQuery strQuery
DoCmd.SetWarnings True
Kannst Du die Meldungen ausschalten, Damit Du nicht bei jeder Abfrage bestätigen musst ob Du das auch wirklich willst.
Nochmal Gruß Marie
Hallo Marie
das mit den Abfragen wär eine Möglichkeit, allerdings sind das sehr sehr viele Spalten die alle unterschiedlich heißen und das wäre eine heiden Arbeit jede Abfrage einzeln zu stellen.
Wenn es also einen VBA Code gäbe der das in einem Aufwasch erledigen würde wäre des wesentlich einfacher.
gruß
morpheus
Antwort 13 von RalfH vom 06.12.2019, 11:02 Options
@ Mariechen,
ja hast recht aber
Zitat:
Ralfilein
verzeih ich Dir nie !
Gruß Rallemann
Antwort 14 von Marie vom 06.12.2019, 11:09 Options
Hier kannste die Spaltennamen damit auslesen, kommste jetzt alleine klar Deine Abfrage zu generieren und da einzubauen??
Gruß marie
Public Function fkt_Feldnamen()
Dim x
Dim meldung As String
For x = 0 To CurrentDb.TableDefs("tabelle1").Fields.count - 1
msgbox CurrentDb.TableDefs("tabelle1").Fields(x).NAME
meldung = meldung & "Field Number: " & x & " Name: " & _
CurrentDb.TableDefs("tabelle1").Fields(x).NAME & Chr(10) & Chr(13)
Next
msgbox meldung
End Function
Antwort 15 von Marie vom 06.12.2019, 11:09 Options
Rallemännchen, natürlich haste mir schon verziehen :-)))
Antwort 16 von RalfH vom 06.12.2019, 11:19 Options
Mariechen, lass mich kurz nachdenken,
- Du hast Rallemänchen geschrieben und nicht Rammelmänchen= 1Punkt
- Du hilfst hier immer fleissig = 1Punkt
- 1 mal Ralfilein= -1
Sind im Schnitt: 1 + Punkt
Ok, Dir sei verziehen, aber das letzte mal, sonst pipi machen ab ins Bett. ;-)
P.S: Sorry Forum-Admin, musste aber mal gesagt werden