Autor Beitrag
Siggi
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Do 03.10.02 15:12 
Hallo!

Beim Löschen eines Datensatzes kommt bei mir im Programm immer die Fehlermeldung "Tabelle ist schreibgeschützt". Das wundert mich allerdings, weil ich in der Datenbankoberfläche die Datensätze beliebieg löschen kann. Mit der referentiellen Integrität sollte es an sich auch nichts zu tun haben.
Ja, vielleicht hatte einer von Euch schonmal den gleichen Fehler und kann mir helfen?

Danke

Mfg
Siggi
MrSpock
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: Do 03.10.02 16:18 
Hallo Siggi,

welche Datenbank benutzt du, welches Betriebssytem und hast du für die DB eventuell ein oder mehrere Passwörter angelegt?

_________________
Live long and prosper
MrSpock \\//
Siggi Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 04.10.02 12:58 
janz normaal Paradox 7, ohne Passwörter
MrSpock
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: Fr 04.10.02 14:38 
Hallo Siggi,

die Frage zum Betriebssystem hast du zwar noch nicht beantwortet, aber ich nehme an, dass es nicht daran liegt, dass du eventuell Win 2000 hast und keinen Zugriff auf das Verzeichnis hast!?

Es sieht so aus, als wäre die Datei bereits geöffnet, möglicherweise exklusiv. Starte das Programm doch mal ohne die IDE.

_________________
Live long and prosper
MrSpock \\//
Siggi Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: So 06.10.02 22:34 
...Win98SE, und ich habe vollen Zugriff, nur über das Delphi-Programm nicht.
Wenn ich eine Test-Anwendung bau', in der ich einfach nur einen Datensatz der besagten Tabelle lösche, klappt es auch. Nur bei dem "HauptProgramm" funktioniert es nicht...

trotzdem danke!
MrSpock
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: Mo 07.10.02 06:55 
Hallo Siggi,

das ist schon mal eine wichtige Auskunft. Es muss dann wohl an dem Hauptprogramm liegen.

Kannst du mal den Teil posten, der für das Löschen zuständig ist. Und hast du das Programm auch einmal ohne IDE getestet?

_________________
Live long and prosper
MrSpock \\//
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Mo 07.10.02 07:13 
Hi Siggi
verwendest du zum Zugriff tatsächlich eine Tabelle? Ist vielleicht versehentlich die Eigenschaft ReadOnly auf True gesetzt? Oder verwendest du eine TQuery. Dann darfst du keine Verbindungen zu anderen Tabellen oder Sortierfolgen drin haben.

Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
Siggi Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Di 08.10.02 21:33 
Hallo!

Erstmal vielen Dank!
Das "Problem" ist gelöst :o . Ich habe nicht gewusst, dass man bei einer Sortierung mit TQuery die Datensätze nicht löschen kann *duck*.
Nun ja, tschuldigung, dass ich mich nicht gleich von Anfang an klar ausgedrückt habe.

Mfg
Siggi
oPPi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 66

MS Win 7 Pro, WinXP Pro
D3 Pro, TurboDelhi, Kylix 3 Pro
BeitragVerfasst: So 13.10.02 14:10 
Hy,

dazu hab ich auch mal ne Frage. Und zwar kommt bei mir die selbe Meldung. Ich verwende ebenfalls ne Paradox-DB. Ferner hab ich ein
DBGrid mit ner Sortierreinenfolge (Query). Jetzt zu meinen Prob.
ich möchte aus dem DBGrid welches mir Datensätze anzeigt die ich mit ner SQL-Abfrage gefiltert habe, einen oder mehrere Datensätze die ich
im DBGrid markiere löschen. Leider weiß ich nicht wie.

Hab es schon mit Delete from ... Where Dateiname = xxx
o. DBGrid.SelectedRows.Delete probiert aber irgendwie bin ich
zu blöd das Problem zu lösen.

Gruß

oPPi

_________________
... Manchmal kommt man nicht auf die einfachsten Sachen obwohl
die Lösung ganz nah liegt ...
MrSpock
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: So 13.10.02 15:27 
Hallo oPPi,

du musst die Eigenschaft RequestLive auf True setzen, nur dann kannst du einen Datensatz mit
ausblenden Quelltext
1:
Query1.Delete					


löschen. Aber nicht jede Datenmenge erfüllt die Bedingung, dass sie geändert werden kann. Z.B. wenn deine Datenmege eine Aggregatfunktion nutzt ist sie nicht mehr aktualisierbar.

Durch RequestLive erhälst du nicht nur eine Kopie der SELECTierten Daten, sondern ein Löschvorgang wird auf die zugrundeliegende Tabelle angewendet. Also VORSICHT, IS COOL MAN :mrgreen:

_________________
Live long and prosper
MrSpock \\//
oPPi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 66

MS Win 7 Pro, WinXP Pro
D3 Pro, TurboDelhi, Kylix 3 Pro
BeitragVerfasst: So 13.10.02 20:05 
Hallo,

habe RequestLive = True gesetzt. Weiß aber nicht wie du das meinst mit:
ausblenden Quelltext
1:
Query1.Delete					

Also ich hab ne Abfrage erstellt die mir im DBGrid bestimmte Datensätze anzeigt.
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.ComboBox1Select(Sender: TObject);
begin
  if query1.Active then
   query1.close;
   query1.sql.Clear;
   query1.SQL.add('SELECT Thema.Thema, Tipps.Thema, Tipps.Dateiname, Tipps.Inhalt, Tipps.Datum FROM Thema');
   query1.SQL.Add('INNER JOIN Tipps ON  (Tipps.Thema = Thema.Thema)');
   query1.SQL.add('WHERE Tipps.Thema='+ quotedstr((sender as TComboBox).Items[ComboBox1.ItemIndex]));
   query1.Open;
end;

Es wird in meinem DBGrid die Spalte Dateiname angezeigt, jetzt möchte ich einen markierten Datensatz löschen, dazu hab ich ne Abfrage erstellt die aber leider nicht funktionert.
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.btn_DeleteClick(Sender: TObject);
begin
  if query1.Active then
   query1.close;
   query1.sql.Clear;
   Query1.SQL.Add('DELETE Tipps.Dateiname FROM Tipps');
   Query1.SQL.Add('WHERE Tipps.Dateiname='+ quotedstr((sender as TDBGrid).SelectedField.AsString));
   Query1.Open;
end;

DBGrid1.SelectedRows.Delete funktioniert ja auch nicht.
Irgendwas mach ich falsch, SQL ist auch nicht so meine Stärke. Is vielleicht auch nur ne Kleinigkeit.

Gruß
oPPi
MrSpock
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: Mo 14.10.02 07:23 
Hallo oPPi,

ein SQL Delete Statement kann nicht mit Open ausgeführt werden, sondern nur mit ExecSQL. :roll:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.btn_DeleteClick(Sender: TObject);
begin
  if query1.Active then
   query1.close;
   query1.sql.Clear;
   Query1.SQL.Add('DELETE Tipps.Dateiname FROM Tipps');
   Query1.SQL.Add('WHERE Tipps.Dateiname='+ quotedstr((sender as TDBGrid).SelectedField.AsString));
   Query1.ExecSQL;
end;

_________________
Live long and prosper
MrSpock \\//
oPPi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 66

MS Win 7 Pro, WinXP Pro
D3 Pro, TurboDelhi, Kylix 3 Pro
BeitragVerfasst: Mo 14.10.02 20:57 
Hallo,

danke dir erstmal. Ich hab mir die Hilfe noch mal zu Rate gezogen u. da
hab ich das dann auch gefunden das ich Query1.ExecSQL verwenden muß. Leider hab ich nun ein weiteres Problem das er mir die Meldung schmeißt: Ungültige Typumwandlung -> Eine Exception ist bei der Klasse
EInvalidCast aufgetreten.

Der Fehler tritt auf bei:
ausblenden Quelltext
1:
Query1.SQL.Add('WHERE Tipps.Dateiname='+ quotedstr((sender as TDBGrid).SelectedField.AsString));					


Ich weiß jetzt nicht was man bei (sender as TDBGrid).xxx einsetzten könnte damit er eine selektierte Zeile oder ein Feld löscht. Es hängt jetzt nur noch an dieser Kleinigkeit das mein Programm endlich fehlerfrei läuft.

Wäre dir sehr verbunden wenn du mir da ebenfalls weiterhelfen könntest.

Gruß

oPPi
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Di 15.10.02 06:28 
Hi
Wenn du bei deinem Datengitter die Eigenschaft RowSelect gesetzt hast, wird es generell nicht funktionieren, da SelectedField dann immer nil ist.

Aber auch sonst würde ich SelectedField nicht verwenden, denn was passiert wenn der Anwender mal nicht auf die Spalte mit dem Dateinamen klickt? :roll:
Am besten wärs wenn du direkt das Feld mit dem Dateinamen aus dem Datengitter übernimmst mit:
ausblenden Quelltext
1:
(Sender as TDBGrid).FieldByName('Dateinamenfeld').AsString					

oder
ausblenden Quelltext
1:
(Sender as TDBGrid).Fields[Feldnummer].AsString					


Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...