Autor Beitrag
reox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: Mo 07.09.09 11:39 
Ich programmiere gerade eine kleine Software mit einer OleDB als Datenbank. Nun soll auf Knopfdruck das jeweilige Daten-Tupel aus der DB gelöscht werden, welches in einem Datagrid markiert ist. Zu dem Zweck habe ich den Primary Key im DataGrid stehen, lese diesen aus und lösche dann per SQL Query den Tupel. Soweit in der Theorie. Mein Problem ist, dass ich jedoch nichts löschen kann!
Meine Lösch Funktion:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
    private void deleteRow(string id)
    {
      try
      {
        OleDbDataAdapter myDA = new OleDbDataAdapter(new OleDbCommand("DELETE FROM file WHERE id = "+id , this.myAccessConn));
      }
      catch(Exception ex)
      {
        MessageBox.Show(ex.ToString());
      }
        //this.DoQuery("DELETE FROM file WHERE id = "+id);
        //MessageBox.Show("DELETE FROM file WHERE id = "+id);
      this.selectData(this.stdSelect);
    }

Ich bekomme eine korrekte Id zurück, die Query muss doch stimmen (ich hab sehr lange SQL gemacht, also denk ich doch das es auch bei OleDB so ist?)...
Ich bekomme ja noch nicht ein mal eine fehlermeldung?!? Er rennt einfach durch und sagt nix...

Und die schlechteste Nachricht zum Schluss: Debuggen geht nicht, da ich in der Firma programmiere und am PC nicht die Rechte habe zu debuggen :D
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mo 07.09.09 12:10 
ID als String? Igitt. Es handelt sich doch sicher um eine Zahl. Das mag zwar in dieser Situation angehen; korrekt ist aber das Arbeiten mit Parametern, siehe [Artikelserie] Parameter von SQL Befehlen.

Dein Fehler liegt aber darin, dass du einen DbDataAdapter erzeugst und mit ihm nichts machst. Dann brauchst du dich auch nicht zu wundern, dass nichts gelöscht wird und es auch keine Fehlermeldung gibt.

Besser wäre in dieser Situation, nur einen DbCommand zu erzeugen, dann die Parameter hinzuzufügen und ihn mit ExecuteNonQuery abzuschicken.

Gruß Jürgen
reox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: Mo 07.09.09 12:30 
args... das hab ich wohl wegvereinfacht -.-

ja das mit dem string geht nicht anders, da die ID eine HEX ID ist, mit Bindestrichen dazwischen...

danke jetzt gehts auf jeden Fall! Hast mir die Augen geöffnet ;) bin gerade dabei das ganze mal mehr objekt zu orientieren, eine klasse mit 800 zeilen geht mir aufn geist -.-
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 07.09.09 14:39 
Zitat:
ja das mit dem string geht nicht anders, da die ID eine HEX ID ist, mit Bindestrichen dazwischen...

Du meinst wahrscheinlich das du eine GUID (bzw. UUID bzw. Uniqueidentifier) hast. Das ist ein 128bit Zahlentyp und die Bindestriche sind nur Teil der Stringdarstellung ohne größere Bedeutung jenseits von Lesbarkeit. Access (ich rate mal du benutzt Access) hat dafür einen uniqueidentifier Typ.
reox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: Mo 14.09.09 21:34 
mh naja ich hab mich damit eigentlich nie beschäftigt, bin dabei das die software mal halbwegs rennt :D kommt auf die mitlerweile wieder sehr lange todo liste! aber danke für den tipp!