Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Delete SQL (https://www.delphipraxis.net/125075-delete-sql.html)

thiagojonas 30. Nov 2008 12:47

Datenbank: Access • Zugriff über: ADO

Delete SQL
 
Hallo Leute, ich hätte da mal wieder eine kleine Frage.

Ich habe eine Listbox, die Werte werden aus einer Tabelle, einer Datenbank geladen.
Wenn ich jetzt einen Wert in der Listbox makiere und auf einen Button drüke, möchte ich gerne, dass dieser Wert aus dewr Tabelle der Datenbank gelöscht wird.
Mein Ansatz ist so:

TADOQuerry.Open
mit SQL Text:

SQL-Code:
select*from lehrer;
delete from lehrer where lehrer = lehrer_list;//lehrer_list ist der Name der Listbox
lehrer_list ist der Name der Listbox, hier zeigt der Debugger einen Fehler, sheint so, als würde das so nicht direkt gehe, wie soll ich da rangehen? Danke für eure Mühe im voraus. :-D

DeddyH 30. Nov 2008 12:49

Re: Delete SQL
 
Grundlagen

thiagojonas 30. Nov 2008 12:58

Re: Delete SQL
 
Super Danke für den Link.

Also ich habe das dann so:

Delphi-Quellcode:
ADOQuery1.Open;
ADOQuery1.SQL.Text := 'select * from `lehrer`; delete from `lehrer` where `lehrer` = '''+lehrer_list+''';';
Der Debugger gibt mir ein aus string und listbox inkompatible typen sind. woran liegt das?

Die Muhkuh 30. Nov 2008 13:00

Re: Delete SQL
 
Weil Du so die ganze ListBox übergibst, Du willst aber nur das Text vom Item. Siehe dazu .Items und Itemindex.

thiagojonas 30. Nov 2008 13:03

Re: Delete SQL
 
Das dachte ich auch. Mit Items oder Itemsindex funktioniert es aber auch nicht :(

Die Muhkuh 30. Nov 2008 13:04

Re: Delete SQL
 
Wie hast du es versucht?

thiagojonas 30. Nov 2008 13:05

Re: Delete SQL
 
Delphi-Quellcode:
procedure TForm4.delete_btnClick(Sender: TObject);
var
  i: integer;
  h: integer;
begin
ADOQuery1.Open;

  for h := lehrer_list.Items.Count - 1 downto 0 do
    if lehrer_list.Selected[h] then
  for i := lehrer_list.Items.Count - 1 downto 0 do
    if lehrer_list.Selected[i] then
      lehrer_list.Items.Delete(i);
  ADOQuery1.SQL.Text := 'delete from `lehrer` where `lehrer` = '''+lehrer_list.Items[i]+''';';
end;
Hier kommt eine fehlermeldung. Itemindex überschreitet das maximum von -1

mkinzler 30. Nov 2008 13:08

Re: Delete SQL
 
Was sollen deine Schleifen den bewirken?

Die Muhkuh 30. Nov 2008 13:08

Re: Delete SQL
 
Jetzt überleg mal ganz langsam, was dieser Code macht, dann siehst Du den Fehler sofort ;)

thiagojonas 30. Nov 2008 13:09

Re: Delete SQL
 
ich habe die schleife für die listbox.
damit wird genau die makierte zeile in der listbox gelöscht.

DeddyH 30. Nov 2008 13:09

Re: Delete SQL
 
Delphi-Quellcode:
procedure TForm4.delete_btnClick(Sender: TObject);
var
    i: integer;
begin
  //ADOQuery1.Open;
  ADOQuery1.SQL.Text := 'delete from `lehrer` where `lehrer` = :lehrer';
  for i := lehrer_list.Items.Count - 1 downto 0 do
    if lehrer_list.Selected[i] then
      begin
        ADOQuery1.Parameters.ParamByName('lehrer').AsString := lehrer_list.Items[i];
        ADOQuery1.ExecSQL;
        lehrer_list.Items.Delete(i);
      end;
end;
Ungetestet.

thiagojonas 30. Nov 2008 13:12

Re: Delete SQL
 
Zitat:

Zitat von Die Muhkuh
Jetzt überleg mal ganz langsam, was dieser Code macht, dann siehst Du den Fehler sofort ;)

:glaskugel: :gruebel:

thiagojonas 30. Nov 2008 13:14

Re: Delete SQL
 
Zitat:

Ungetestet.
TParameter enthält keine Parameter namens AsString.

Die Muhkuh 30. Nov 2008 13:16

Re: Delete SQL
 
Anstatt die Fehlermeldungen hier rein zu posten und immer gleich auf unsere Fragen zu antworten mit Dingen, die der Code machen soll, aber nicht macht, wäre besser mal Dein Kopf einzuschalten und Grundlagen zu erlernen!

thiagojonas 30. Nov 2008 13:17

Re: Delete SQL
 
Okay :pale: :oops: :angel:

DeddyH 30. Nov 2008 13:17

Re: Delete SQL
 
TParameter -> F1 -> Value
Ich mache normalerweise nix mit ADO

thiagojonas 30. Nov 2008 13:35

Re: Delete SQL
 
Zitat:

Zitat von DeddyH
Delphi-Quellcode:
procedure TForm4.delete_btnClick(Sender: TObject);
var
    i: integer;
begin
  //ADOQuery1.Open;
  ADOQuery1.SQL.Text := 'delete from `lehrer` where `lehrer` = :lehrer';
  for i := lehrer_list.Items.Count - 1 downto 0 do
    if lehrer_list.Selected[i] then
      begin
        ADOQuery1.Parameters.ParamByName('lehrer').AsString := lehrer_list.Items[i];
        ADOQuery1.ExecSQL;
        lehrer_list.Items.Delete(i);
      end;
end;
Ungetestet.

Also bei der funktion, habe ich statt Asstring , name und einmal displayname eingefügt. bei name wurde der wert in der datenbank nur um einen nach oben geschoben.
bei displayname wurde der makierte wert in der dbgrid gelöscht.
hm... :gruebel:

DeddyH 30. Nov 2008 13:41

Re: Delete SQL
 
Ich hab doch eben geschrieben, nimm mal Value statt AsString.

thiagojonas 30. Nov 2008 13:42

Re: Delete SQL
 
Ja, sorry das hatte ich übersehen :oops: Danke :thumb: :thumb: :thumb: :thumb: Klappt wunderbar. Danke für die super nachhilfestunde :-D :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz