Autor Beitrag
Arne Danikowski
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 194



BeitragVerfasst: Mi 06.02.08 13:48 
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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 113

WIN 2000
Borland Developer Studio 2006
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mi 06.02.08 14:03 
ausblenden Delphi-Quelltext
1:
UPDATE jp.dbf SET MARKER = NULL					


Damit wird bei ALLEN zeilen der Marker auf NULL gesetzt.
Arne Danikowski Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 194



BeitragVerfasst: Mi 06.02.08 14:07 
OK da hatte ich noch einen Fehler:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: 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

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
Arne Danikowski Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 194



BeitragVerfasst: Mi 06.02.08 14:38 
Danke für die Hilfe habe es mit
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: 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

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
Arne Danikowski Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 194



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 657


Delphi 3 Prof., Delphi 2005 PE
BeitragVerfasst: Mi 06.02.08 15:30 
ausblenden Delphi-Quelltext
1:
dm.Table1.Database.Execute('UPDATE jp.dbf SET MARKER = NULL WHERE MARKER = ''X''');					


Schon mal so versucht?!

_________________
Anonymes Eckenkind
Arne Danikowski Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 194



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 194



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mi 06.02.08 15:40 
Alternativ auch:
ausblenden Delphi-Quelltext
1:
dm.Table1.Database.Execute('UPDATE jp.dbf SET MARKER = NULL WHERE MARKER = ' + QuotedStr('X'));