Zum Inhalt springen

[C#] Datasource schreibt nicht in Access-Datei


Empfohlene Beiträge

Geschrieben

Hallo,

wie schon des Öfteren hab ich mal wieder Probleme mit dem Thema C# und Access. Diesmal ist es folgendes:

Ich sitze (noch immer) an meinem Projekt "Feuerwehrverwaltung", was eine kleine Anwendung zum Verarbeiten von Personaldaten einer freiwilligen Feuerwehr werden soll.

Nachdem ich festgestellt habe, dass ich lange Zeit die Access-Datenbank, die ich als Datenhaltung nutze, nicht lesen konnte, weil ich das Projekt in 64Bit kompiliert habe, habe ich nun das Problem in die andere Richtung: Ich kann Daten, die ich verändert habe, nicht in die DB zurück schreiben, sie werden einfach nicht angenommen.

Hier der relevante Code dazu:


 private void button1_Click(object sender, EventArgs e)


        {

            int anzahlp,anzahld = 0;

            persönlichBindingSource.EndEdit();

            dienstlichBindingSource.EndEdit();


            anzahlp = persönlichTableAdapter.Update(feuerwehrverwaltungaccess2000DataSet.persönlich);

            MessageBox.Show(anzahlp.ToString());


            anzahld=dienstlichTableAdapter.Update(feuerwehrverwaltungaccess2000DataSet.dienstlich);

            MessageBox.Show(Convert.ToString(anzahld));

        }

Die Datenbank besteht aus 2 Tabellen: persönlich und dienstlich. Wie zu sehen ist, habe ich jeweils einen Table Adapter. anzahlp und anzahld dienen lediglich dazu, schnell überprüfen zu können, ob die Daten geschrieben wurden.

Nun zu den Rahmenbedingungen:

Ich entwickle unter Visual Studio 2008 auf einem Rechner mit Windows 7 64Bit Home Premium, die Access-DB ist im Format 2000, aber unter 2007 geschrieben. Dies ist so, damit andere die DB selbst auch öffnen können, wenn nötig.

Woran könnte das liegen, hab schon die Berechtigungen der Access-Datei überprüft, aber eigentlich hat jeder Schreibrechte. Habe vor Kurzem den Tipp bekommen, mal die Eigenschaften in Access zu überprüfen, hab da aber nix gefunden, was mich weiter gebracht hat.

Ich hoffe, ihr könnt mir einen Tip geben, damit das Projekt endlich mal fertig wird, es fehlen wirklich nur noch die Funktionen einen Eintrag zu ändern und einen neuen Hinzuzufügen.

Gruß und schonmal danke

Geschrieben

Hallo,

nutzt du ODBC für die Verbindung zu Access?

Wenn ja, lass dir sagen das dein 64 Bit Hostsystem auf dem du entwickelst, über keine ODBC treiber verfügt, da diese AFAIK nur für 32 Bit Systeme existieren.

Ansonsten wäre es nett wenn du mal ein bisschen mehr von deinem Code zeigen würdest. Beispielsweise den Teil, wo du die Daten deines Tables änderst.

Wirft der Debugger denn einen Fehler (auch auf die Ausgabe achten, sofern du Fehlerhandling einbunden hast)?

Wenn ja, dann poste bitte mal die genaue Meldung.

Lg

Gateway

Geschrieben

Bewusst nutze ich kein ODBC. Ich habe die Datei über eine DataSource eingebunden, diese generiert mir dann ja Table Adapter und das ganze drum herum, höchsten die macht standardmäßig ODBC. Code kann ich mehr Posten, allerdings sitze ich grade an einem anderen Rechner, mach ich aber ASAP, genau so, wie die Debugger-Meldungen nochmal anzuschauen, ist mir bis jetzt noch nichts aufgefallen.

Auf jeden Fall schonmal Danke für den Tip, wo ich noch schauen sollte.

Geschrieben

Ich hatte in meinem Abschlussprojekt ein ähnliches Problem. Ich hatte direkt über die BindingSource einige Werte der DB geändert und .EndEdit() aufgerufen. Bei mir wurden die Änderungen dann nur teilweise übernommen.

Ich hab das nur dadurch gelöst bekommen indem ich die Änderungen direkt am DataSet vorgenommen hab ohne auf die BindingSource zuzugreifen. IMO ist die EndEdit Funktion buggy bzw. funktioniert nicht korrekt.

Geschrieben

Damit ihr wenigstens noch Infos bekommt, damit ihr mir vielleicht was sagen könnt:

Hier der komplette Code der Form, in der ich in die DB schreiben will. Auf dem Form sind eingabe Felder (Textboxen, ComboBoxen, CheckBoxen, DateTimePicker), die über die Eigenschaften an die DataBindingSource angeknüpfts sind.


using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;


namespace FWVerwaltung

{

    public partial class Form10 : Form

    {

        public Form10()

        {

            InitializeComponent();

        }


        private void Form10_Load(object sender, EventArgs e)

        {

            // TODO: Diese Codezeile lädt Daten in die Tabelle "feuerwehrverwaltungaccess2000DataSet.persönlich". Sie können sie bei Bedarf verschieben oder entfernen.

            this.persönlichTableAdapter.Fill(this.feuerwehrverwaltungaccess2000DataSet.persönlich);

            // TODO: Diese Codezeile lädt Daten in die Tabelle "feuerwehrverwaltungaccess2000DataSet.dienstlich". Sie können sie bei Bedarf verschieben oder entfernen.

            this.dienstlichTableAdapter.Fill(this.feuerwehrverwaltungaccess2000DataSet.dienstlich);


        }


        private void button1_Click(object sender, EventArgs e)


        {

            int anzahlp,anzahld = 0;

            persönlichBindingSource.EndEdit();

            dienstlichBindingSource.EndEdit();


            anzahlp = persönlichTableAdapter.Update(feuerwehrverwaltungaccess2000DataSet.persönlich);

            MessageBox.Show(anzahlp.ToString());


            anzahld=dienstlichTableAdapter.Update(feuerwehrverwaltungaccess2000DataSet.dienstlich);

            MessageBox.Show(Convert.ToString(anzahld));

        }




    }

}

Ich bin noch nicht dazu gekommen, irgendwas zu überprüfen oder zu überarbeiten, da ich gestern ein Dualstudium angefangen habe und daher schon im Betrieb genügend mit Informatik zu tun hab. Muss mich da erst mal n bisschen dran gewöhnen. Vielleicht kann ich ja am Wochenende mal eure Tips anwenden.

Trotzdem vielen Dank und Gruß

Geschrieben

hmm ganz blöde frage bist du sicher das .Update() die anzahl der geändertn Daten zurückliefert ? (selber ka darum frag ich ob du sicher bist)

Weil vll wirds ja aktualisiert nur anzahlp & anzahld sind ja 0 gleich am anfang...

sieht nur so aufn erstn blick aus als ob nur die ausgabe falsch wäre...

Geschrieben (bearbeitet)

Wie oben schon gesagt funktioniert das Auslesen komplett -> die Select geht.

Edit: und Werte sind auch Vorhanden, sie ist also nicht leer.

Bearbeitet von oxygen
Geschrieben (bearbeitet)

@Iceman346: könntest du mir da mal ein Codesegment als Beispiel, wie man direkt das DataSet verändert, posten?

Hab ein Fehlerhandling eingebaut, es wird aber keine Exception ausgelöst. Ich glaube so langsam, dass ich das gleiche Problem habe, das Iceman346 beschrieben hat. Ansonsten hab ich mir auch schon überlegt, testweise die DB mal auf einen MSSQL-Server aufzusetzten und zu kucken, wie sich das ganze da verhält. Allerdings hängt da ein ziemlicher Rattenschwanz dran und nach 8h Informatik auf der Arbeit ist die Motivation nicht mehr so groß, deshalb wolle ich das erst als letzte Möglichkeit machen.

Bearbeitet von oxygen
Geschrieben

Hier, ist allerdings VB.Net und nicht C#

If sender.Equals(ButtonFirst) Then

    If pos > 1 Then


        For Each tmp As DataRow In SpeicherDataSet.tabBearb.Rows

            If tmp.Item("lngVariante") = TabVarianteBindingSource.Current("IDVar") Then

                If tmp.Item("intPosition") < pos Then

                    tmp.Item("intPosition") = tmp.Item("intPosition") + 1

                ElseIf tmp.Item("intPosition") = pos Then

                    tmp.Item("intPosition") = 1

                End If

            End If

        Next


        TabBearbTableAdapter.Update(SpeicherDataSet.tabBearb)

        QryMasterTableAdapter.Fill(SpeicherDataSet.qryMaster)

        DataGridWerk.Rows(0).Selected = True

    End If


    '...


End If

Der Code ist für einen Button der die Reihenfolge von Datensätzen, die in einem DataGridView dargestellt werden, verändert. Diese Reihenfolge sollte auch in der Datenbank gespeichert werden. Da ich keine Möglichkeit gefunden hab das DataSet selbst zu filtern durchlaufe ich jeden möglicherweise relevanten Datensatz, überprüfe ob ich ihn verändern muss und setze dann die Position um.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...