Autor Beitrag
lnino
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 07.12.10 19:48 
Hi an alle.

Ich schreibe an einem Tool in welchem ich über einen Navigator und ein paar Textboxen Einträge aus meiner Datenbank ansehen, aber auch verändern möchte.

Das ansehen klappt wunderbar und ich kann auch durch die Einträge in meiner Datenbank blättern. Leider kann ich nichts verändern. Keinen Eintrag ändern, neu erstellen oder löschen.
Ich komme einfach nicht drauf wo der Fehler liegen könnte. Es schlägt auch keine Exception an.

Vielleicht kann mir jemand von euch weiterhelfen.


Zuletzt bearbeitet von lnino am So 12.12.10 16:32, insgesamt 1-mal bearbeitet
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 08.12.10 11:46 
Hallo Inino,

auf Anhieb sehe ich jetzt keine Fehler (aber das muß nichts heißen, da ich mich mit OLE und Access nicht so gut auskenne, eher mit anderen Datenbanken -).

Du könntest mal vor dem Update mittels
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
DataTable dataTableChanges = dt.GetChanges();
int rows = dataTableChanges.Rows.Count;
if(rows == 0)
{
  // hier dein Fehlerfall eintragen
}
else
{
  // ...
  int updates_row = da.Update(dt);
  // hier kannst du dann die Anzahl der getätigten Änderungen abfragen
  // (sollte bei dir im Erfolgsfall also 1 sein).
}

überprüfen, ob überhaupt Änderungen in der DataTable vorgenommen wurden (d.h. ob bs.EndEdit(); deine Änderung vorgenommen hat - ansonsten passiert halt nichts).

P.S. Deinen Code könnte man um einiges kürzen...

Und noch eine wichtige Bemerkung:
Crossposts werden hier zwar erlaubt, sollten aber gepostet werden (wundere dich aber nicht, wenn dein Beitrag im myCSharp-Forum geschlossen wird, denn dort ist es nicht erlaubt!).


Zuletzt bearbeitet von Th69 am Mi 08.12.10 16:42, insgesamt 2-mal bearbeitet
lnino Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 08.12.10 16:31 
Hi Th69.

Danke für deine Antwort.

Habe mich nun bei myCSharp gemeldet und gebeten den Cross Post bei myCSharp zu löschen, damit alles rechtens ist.

Ich habe nun deinen Codevorschlag bei mir eingebunden, aber leider springt er bei mir weder in den if noch in den else Zweig. :-)

Leider kenne ich mich mit dem Datenbankzugriff nicht allzugut aus und daraus entstand dieses etwas komplexe Konstrukt.

Habe deinen Code auf string abgeändert, da mein c# gejammert hat, dass eine implizite Konvertierung auf int nicht möglich ist.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
        public void updateDB()
        {
            DataTable dataTableChanges = dt.GetChanges();
            string rows = dataTableChanges.Rows.ToString();
            if(rows == "0")
            {
              // hier dein Fehlerfall eintragen
                MessageBox.Show("Fehler");
            }
            else
            {
              // ...
              int updates_row = da.Update(dt);
              // hier kannst du dann die Azzahl der getätigten Änderungen abfragen(sollte bei dir im Erfolgsfall also 1 sein).
              MessageBox.Show(updates_row.ToString());
            }

            bs.EndEdit();
            openDBConnection();
            da.Update(dt);
            closeDBConnection();
        }


Vielleicht hat jemand ein ganz simples funktionierendes Beispiel mit einem Navigator und nur einer Textbox, in welcher man einen Eintrag einer Access Datenbank anzeigen lassen kann und per button den neu eingetragenen wert in der textbox in die datenbank schreibt.
Wenn ich das verstanden habe, dann könnte ich sich mein Beispiel so adaptieren, dass es funktioniert.
Denn so finde ich den Fehler einfach nicht. *heul*

Aber so finde ich den Fehler einfach nicht.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 08.12.10 16:44 
Sorry, ich hatte bei "Rows" das "Count" vergessen (habe es oben nacheditiert). Das mit "string" bei dir paßt aber so erst recht nicht.

Und die Abfrage mußt du nach dem "OpenDBConnection" machen (aber eben vor dem Update)!!!
lnino Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 08.12.10 17:02 
Hi Th69.

Kein Problem, dafür habe ich nicht richtig gelesen und deinen Code an die falsche Stelle geschrieben. :-)

Leider passiert immer noch nichts. Es kommt keine Ausgabe einer MessageBox.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
        public void updateDB()
        {
            bs.EndEdit();
            openDBConnection();            
            
            DataTable dataTableChanges = dt.GetChanges();
            int rows = dataTableChanges.Rows.Count;
            if(rows == 0)
            {
              // hier dein Fehlerfall eintragen
                MessageBox.Show("Fehler");
            }
            else
            {
              // ...
              int updates_row = da.Update(dt);
              // hier kannst du dann die Azzahl der getätigten Änderungen abfragen(sollte bei dir im Erfolgsfall also 1 sein).
              MessageBox.Show(updates_row.ToString());
            }

            da.Update(dt);
            closeDBConnection();
        }
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 08.12.10 17:26 
Dann debugge doch einfach mal deinen Code und schau nach ob er überhaupt in die Methode 'updateDB()' springt...
lnino Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 08.12.10 18:06 
Debuggen war das Zauberwort.

Hatte einen nicht funktionierenden errorProvider, deswegen bekam ich keine Fehlermeldung.

Nun habe ich mir die exception von meinem try catch block ausgeben lassen.

Da kam dann die folgenden Meldung wenn ich einen neuen Datensatz mittels dem Navigator erstellt habe und dann auf Save geklickt habe:

"Für ein Update benötigt der Insert Command ein Verbindungsobjekt. Die Connection-Eigenschaft des InsertCommand wurde nicht initialisiert."

Wenn ich ohne etwas zu ändern auf Save geklickt habe, dann bekam ich folgende Medlung:
"Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."

Kannst du mit diesen Meldungen etwas anfangen?
lnino Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 12.12.10 13:59 
Hi.

Ich konnte nun den zusätzlichen Fehler finden.
Ich hatte in dem Spaltennamen meiner Access Tabelle den Namen: User und Password verwendet.

Diese sind wahrscheinlich schon vergebene Werte die man nicht verwenden darf.
Das hat etwas gedauert bis ich da drauf gekommen bin. :-)

Danke für die Hilfestellung. Problem gelöst.