Entwickler-Ecke
Datenbanken - Die Spalte einer Tabelle leeren nicht löschen
Arne Danikowski - Mi 06.02.08 13:48
Titel: Die Spalte einer Tabelle leeren nicht löschen
Ich bastle hier schon einige Zeit herum, komme aber nicht weiter.
Ich habe eine DBase Tabelle (jp.dbf). Diese enthält die Spalte "MARKER".
Diese Spalte enhält entweder nichts ist also leer oder ein "X". Soll dazu dienen mehrere Datensätze marlieren zu können
nun möchte ich über einen Button alle Markierungen wieder aufheben.
Ich dachte am einfachsten wäre es, die Spalte "MARKER" einfach zu leeren.
Es schein aber gar nicht so einfach zu sein :)
das habe ich bisher ausprobiert:
Delphi-Quelltext
1:
| dm.Table1.Database.Execute('UPDATE jp.dbf SET MARKER = NULL WHERE Kategorie = :X;'); |
Ich bekomme allerdings eine Fehlermeldung:
"Ungültiger Feldname"
Das Datenbankfeld heißt aber so
jemand ne Idee? Oder habe ich eine andere Möglichkeit?
Xong - Mi 06.02.08 13:58
Und "Kategorie" existiert auch?
Ich kenne DBase nicht. Was bedeutet ":X"?
Gibt es keinen Datentyp Bool bzw. Boolean?
Xentar - Mi 06.02.08 14:03
Delphi-Quelltext
1:
| UPDATE jp.dbf SET MARKER = NULL |
Damit wird bei ALLEN zeilen der Marker auf NULL gesetzt.
Arne Danikowski - Mi 06.02.08 14:07
OK da hatte ich noch einen Fehler:
Delphi-Quelltext
1:
| dm.Table1.Database.Execute('UPDATE jp.dbf SET MARKER = NULL WHERE MARKER = :X;'); |
X ist der Feldinhalt der Datensätze
Jetzt bekomme ich die Fehlermeldung:
"Parameter in Abfragestring nicht gesetzt"
zuma - Mi 06.02.08 14:17
lass mal das : weg und setz dafür das X in Hochkomma (evtl. funzt auch X ohne Hochkomma)
:X heisst, das die Zugriffskomponente mit dem (zuvor angegebenen) Parameter zur laufzeit das
:X durch den angegebenen Parameter ersetzt, deine Fehlermeldung sagt, das du den Parameter aber nicht gesetzt hast
Arne Danikowski - Mi 06.02.08 14:38
Danke für die Hilfe habe es mit
Delphi-Quelltext
1: 2: 3: 4:
| dm.table1.Edit; dm.Table1.Database.Execute('UPDATE jp.dbf SET MARKER = NULL'); dm.table1.post; dm.table1.Refresh; |
hinbekommen.
zuma - Mi 06.02.08 14:59
das klappt sicher auch, aber wie schon erwähnt wurde, setzt du ALLE Datensätze damit auf NULL. Ist manchmal nicht unbedingt performant
(bsp.
einer von 10000 Datensätze ist auf X, durch das weglassen der where-Bedingung muss die DB nun 10000 Datensätze updaten, statt nur dem einen).
Wenn die Performance aber nur eine untergeordnete Rolle bei dir spielt, ist das nicht so wichtig
Arne Danikowski - Mi 06.02.08 15:18
Ne eigentlich spielt das keine Rolle, sind aber schon so 2000 Datensätze
nur bekomme ich das mit dem Where nicht hin, da bekomm ich immer weider eine Fehlermeldung
Miri - Mi 06.02.08 15:30
Delphi-Quelltext
1:
| dm.Table1.Database.Execute('UPDATE jp.dbf SET MARKER = NULL WHERE MARKER = ''X'''); |
Schon mal so versucht?!
Arne Danikowski - Mi 06.02.08 15:34
Manchmal sieht man den Walt vor lauten Bäumen nicht
<delphi>
dm.Table1.Database.Execute('UPDATE jp.dbf SET MARKER = NULL WHERE MARKER = 'X'');
</delphi>
Da hatte ich immer zwei Hochkommas vergessen
mit
<delphi>
dm.Table1.Database.Execute('UPDATE jp.dbf SET MARKER = NULL WHERE MARKER = 'X'');
</delphi>
klappt es nun vielen dank
Arne Danikowski - Mi 06.02.08 15:39
Wenn wir schon dabei sind, gibt es eine Möglichkeit, eine Zeile in einem Grid farblich zu verändern?
also nicht die ganze Spalte nur einen bestimmten Datensatz?
Ich stelle mir das so vor:
Über die rechte Maustaste öffne ich ein Popupmenü und kann damit den aktiven Datensatz markieren, das ganze
geht einfach über eine dbcheckbox. Der Datensatz bekommt nun den Feldinhalt X unter der Kategorie MARKER
Wäre nun aber schön, wenn der Datensatz in einer anderen Farbe dargestellt wird.
Xentar - Mi 06.02.08 15:40
Alternativ auch:
Delphi-Quelltext
1:
| dm.Table1.Database.Execute('UPDATE jp.dbf SET MARKER = NULL WHERE MARKER = ' + QuotedStr('X')); |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!