Autor Beitrag
Luncustaf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 324

Win 2k
D7 Ent.
BeitragVerfasst: Di 27.05.03 08:25 
hi ich hab hiern e procedure mit der will ich verschiedene datensätze löschen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TReadWriteDB.DeleteAll(Name, OldestStartDate: string);
begin
  alu.openq.active := false;
  alu.openq.sql.clear;
  alu.openq.sql.add('DELETE * FROM OPCLD WHERE CAL_ID = "'+UpperCase(Name)+'" AND DATESPEC > "'+OldestStartDate+'"');
  alu.openq.Open;
  alu.openq.first;
  while not alu.openq.eof do
  begin
    alu.openq.execSql;
    alu.openq.next;
  end;
end;


wenn ich zu dem alu.openq.open komme dann bringt er mir die fehlermledung

ausblenden Quelltext
1:
CommandText gibt keine ergebnismenge zurück					


nun ist die frage ob er an der stelle explizit das execsql haben will oder kann ich das sqlstatement nicht mit dem delete befehl füllen und die tabelle zeilen weise durchgehen und wenn die bedingung zutrifft löschen?

gr€€tz


Zuletzt bearbeitet von Luncustaf am Di 27.05.03 09:59, insgesamt 2-mal bearbeitet
Luncustaf Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 324

Win 2k
D7 Ent.
BeitragVerfasst: Di 27.05.03 08:58 
sers,

hab das nu andsers gelöst:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TReadWriteDB.DeleteAll(Name, OldestStartDate: string);
begin
  alu.openq.active := false;
  alu.openq.sql.clear;
  alu.openq.sql.add('SELECT * FROM OPCLD WHERE CAL_ID = "'+UpperCase(Name)+'" AND DATESPEC > "'+OldestStartDate+'"');
  alu.openq.active := true;
  alu.openq.first;
  while not alu.openq.eof do
  begin
    alu.openq.Delete;
    alu.openq.next;
  end;
end;


das problem jetzt ist das er mir nicht alles löscht in OldestStartDate steht zb der Wert -> 20021122 -> soll er alles löschen was größer ist als das.

aberw erte wie 20021126 bleiben zb stehen wobei werte wie 20021127 gelöscht werden ist schon komisch das.

gr€€tz
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Di 27.05.03 09:31 
hallo,
du brauchst kein alu.upenq.next mehr ausüfhren, wenn du alu.openq.delete gemacht hast. Das bedeutet, das delete ist ein quasi next .

Viel Spaß
Ken
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Di 27.05.03 09:32 
falls jeder zweite Datensatz stehen bleibt, liegt es an dem next.

_________________
Gruß
Hansa
Luncustaf Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 324

Win 2k
D7 Ent.
BeitragVerfasst: Di 27.05.03 09:59 
cool wida was gelernt :) danke das wars ;)

gr€€tz
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Di 27.05.03 11:53 
Problem gelöst, Ursache weiterhin unbekannt ? :lol: Etwas genauer muß mans wohl doch erklären: nach dem Löschen muß der Datei-Zeiger ja irgendwo stehen. Standardmäßig steht er dann auf dem nächsten Datensatz (halt bis EOF). Das next geht dann eben nicht zum nächsten, sondern zum übernächsten. Somit wird nur jeder zweite Satz gelöscht. 8)

_________________
Gruß
Hansa