Autor Beitrag
peppi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65


delphi 7
BeitragVerfasst: Di 15.04.03 13:13 
Hallo,

ich wiedermal :lol:

aus meiner Tabelle sollen Daten gelöscht werden die mehrere Eigenschaften erfüllen. Dazu vergleiche ich einige von meinen Text- bzw. DBText-Felder mit dem Tabelleninhalt. Meine Anweisung sieht folgendermaßen aus:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure Tdelete.Button1Click(Sender: TObject);
begin
 with Query2 do begin
  close;
  with SQL do begin
   clear;
   ADD('delete from test');
   ADD('where KNR = ' + QuotedStr(Edit1.Text + ''));
   ADD('and DATUM = '+ StrToDateTime(DBText8.Field.Text +''));
...


mit
ausblenden Quelltext
1:
2:
3:
...
ADD('and DATUM = '+ QuotedStr(DBText8.Field.Text +''));
...


hab ich's auch schon versucht!!!

Beim ausführen dieser Anweisung bekomme ich immer die Fehlermeldung:

Inkompatible Typen: 'String' und 'TDateTime'

Allerdings immer nur dann, wenn das Feld "DATUM" in der Tabelle 'NULL' ist. Leerzeichen gehen nicht, weil dann standardmäßig 01.01.1900 eingetragen wird.

Ich hab meine Frage hier gestellt weil ich mal davon ausgehe, dass das nichts mit der Tabelle bzw. Datenbank zu tun hat ;-)!! Hoffe ihr könnt mir da weiterhelfen.

LG Jana!!!
inselberg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458



BeitragVerfasst: Di 15.04.03 13:20 
welchen sinn haben die + '' bei der übergabe?

_________________
hans bist du das ?
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 15.04.03 13:24 
Hi!

ausblenden Quelltext
1:
ADD('and DATUM = '+ StrToDateTime(DBText8.Field.Text +''));					


Das geht so nicht. Du versuchst, einen String in einen DateTime-Wert zu konvertieren und diesen dann einem String zu übergeben. Lass das StrToDateTime einfach weg.

ausblenden Quelltext
1:
ADD('and DATUM = '+ QuotedStr(DBText8.Field.Text));					


Cu,
Udontknow
peppi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65


delphi 7
BeitragVerfasst: Di 15.04.03 13:36 
@udontknow

Na so hatte ich es ja auch schon versucht, nur halt mit den Hochkommatas am Ende. Das funktionierte eben nicht. Daher hab ich's mit StrToDateTime versucht.

Das löschen an sich funktioniert ja auch, nur eben nicht bei Datums-Feldern die den Wert NULL haben. Da passiert gar nichts. Auch keine Fehlermeldung :evil:

Ne Ahnung woran's liegen könnte???
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 15.04.03 13:43 
Zitat:
Das löschen an sich funktioniert ja auch, nur eben nicht bei Datums-Feldern die den Wert NULL haben. Da passiert gar nichts. Auch keine Fehlermeldung


Was soll denn mit diesen Datensätzen geschehen? Sollen die dann auch gelöscht werden? Dann musst du das Statement erweitern.

ausblenden Quelltext
1:
ADD('and (DATUM = '+ QuotedStr(DBText8.Field.Text)+' or Datum is null)' );					


Cu,
Udontknow
peppi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65


delphi 7
BeitragVerfasst: Di 15.04.03 13:55 
@inselberg
Guck mal in der OH zu String-Operatoren und Zeichen-Strings :wink:

@udontknow
Na mit "OR NULL" geht das nicht. Also:

auf meiner Form liegen mehrere DBText-Felder und einfache Text-Felder. Die DB Text-Felder sind natürlich mit meiner Tabelle verbunden (aus der auch gelöscht werden soll). In einem Edit-Feld gibt der Nutzer die passende Kundenummer ein und dann füllen sich die DBText-Felder. Nur das "DATUM" -Feld kann ggf. NULL sein. Zu EINEM Kunden gibt es aber mehrere Datensätze, also kann es unter Umständen vorkommen das er einen Eintrag mit "DATUM = NULL" und einen mit einem reellen Datum hat. (die beiden Datensätze können dann bis auf das Datum auch gleich sein.) Mit dem DBNavigator wird durch die Datenmänge geblättert bis der Eintrag erreicht ist den man löschen will. Aber wenn bei dem gewählten Eintrag das DATUM NULL ist dann passiert gar nichts. Und mit OR würden dann ja BEIDE Datensätze gelöscht werden.

Puh ... war das eingermaßen verständlich?? :lol:

LG Jana!!!
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 15.04.03 14:06 
Also: Du willst alle Datensätze, die eine bestimmte Kundennr (KNR) und ein bestimmtes Datum haben, löschen. Datensätze, deren Datum NULL ist, dürfen nicht gelöscht werden. Soweit richtig?
peppi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65


delphi 7
BeitragVerfasst: Di 22.04.03 13:12 
@UdontKnow

Hi, tut mir leid .. konnt mich net früher melden. Soweit erstmal richtig genau.

Kundennummer = Edit1.Text
DATUM = DBText8.Field.Text

Und wenn in DBText8 nichts steht dann eben:

DATUM = NULL (was wird denn von DBText8.Field.Text übergeben wenn's leer ist? Das müsste doch NULL sein???)

Nur das funktioniert halt nicht. Hat DBText8 nen wert klappt es, aber wenn nichts steht wird nichts gelöscht.

LG inco
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 22.04.03 16:30 
Okay, ich glaube, ich weiss nun, was dein Problem ist... Hoffe ich... :roll: :wink: :

Du benutzt "DbText8.Field.Text" in deinem Statement. Wenn das Feld allerdings Null ist, liefert dir Text '', also einen Leerstring. Der ist aber etwas anderes als NULL. Du musst daher abprüfen, ob der Value des Feldes Null ist, und dementsprechend dein SQL-Statement aufbauen.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
ADD('delete from test'); 
ADD('where KNR = ' + QuotedStr(Edit1.Text + '')); 
if DBText8.Field.IsNULL then
  Add('and DATUM is NULL')
else
  ADD('and DATUM = '+ QuotedStr(DBText8.Field.Text));