Autor Beitrag
Tester15224
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Do 19.09.13 20:04 
Hi,

habe eine Verbindung mit einer Access Datenbank. Daten werden übernommen, nur wenn ich etwas im Programm verändere gehen alle Daten verloren. Und bei den Bool werten ist es sogar so, dass wenn man das Programm ein zweites mal start der wert gelöscht wird.
Weiß jemand warum das der fall ist? die anderen werte werden ja auch nicht gelöscht.

Danke im vorraus,
mit freundlichen grüßen
Der Tester
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 19.09.13 22:23 
user profile iconTester15224 hat folgendes geschrieben Zum zitierten Posting springen:
Hi,

habe eine Verbindung mit einer Access Datenbank. Daten werden übernommen, nur wenn ich etwas im Programm verändere gehen alle Daten verloren. Und bei den Bool werten ist es sogar so, dass wenn man das Programm ein zweites mal start der wert gelöscht wird.
Weiß jemand warum das der fall ist? die anderen werte werden ja auch nicht gelöscht.

Danke im vorraus,
mit freundlichen grüßen
Der Tester

Deine bisherigen Aussagen sind widersprüchlich: Erst "gehen alle Daten verloren", wenn du "etwas" (von dem keiner außer dir vielleicht weiß, was das ist) veränderst, und dann schreibst du gegen Ende, daß "die anderen Daten" dann doch nicht verloren gehen, obwohl ja erstmal alle Daten verloren gehen – wir hier im Forum wissen natürlich sofort ganz genau, was diese anderen Daten sind, wie sie strukturiert sind, wie du sie in deinem Programm ansprichst, verarbeitest und speicherst – und wir könnten dir deshalb als Lösung genau sagen, was du zu tun hast: Du mußt deine Programmfehler beseitigen. Ja, wir wissen natürlich sofort, daß du beim Begriff "Programmfehler" ebenfalls sofort weißt, worum's geht, wir hier wissen ja auch sofort, was das für ein Programm ist, was du änderst, was das für eine Datenbank ist usw. :twisted:

Mit anderen Worten:

Vielleicht könntest du dich ein wenig klarer und verständlicher ausdrücken und etwas genauer schildern, was das für ein Programm ist, was genau du änderst, was genau in der Datenbank verloren geht usw. Hier wird noch nicht mit Glaskugeln und Tarotkarten gearbeitet :P
Tester15224 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Do 19.09.13 23:15 
natürlich kann ich es noch mal verdeutlichen ;)

ich habe nen Login und Registrieren. Beim registrieren werden Username (string) Passwort (string) gespeichert. Auserdem gibt es in Tabelle die Spalte Gesperrt (bool). Diese Spalte Gesperrt bestimmt halt ob man gesperrt ist oder nicht. Wenn ja dann kann man sich nicht einloggen.

wenn ich mich registriere mache speichere ich halt den eingebenen usernamen, das eingebene passwort und setzt gesperrt auf false.

1. Wenn ich das Programm dann wieder start um mich einzuloggen, kann ich mich nicht mehr einloggen (habe in der Bedingung mit stehen das gesperrt false sein muss, was ja noch der fall sein müsste) Kommentiere ich die Bedingung aus, geht es einwandfrei. Also werden Username und Passwort aus der Tabelle schonmal nicht gelöscht aber irgentwas ist anscheind mit dem bool wert.

2. Wenn ich im Programmcode etwas verändere, egal was, also wirklich alles (alleine schon ein Buchstabe), dann werden alle Daten registrierten User aus der Datenbank gelöscht. Sie ist leer, es sind halt nur noch die spalten da.

Hoffe konnte es dir näher bringen, wenn nicht meld dich nochmal.
stehe für fragen gerne zu verfügung
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 19.09.13 23:26 
Ganz einfach: Du mußt in Zeile 135 den Parameter ändern.

Für diesen Beitrag haben gedankt: FinnO, Tester15224
Tester15224 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Do 19.09.13 23:59 
ja das habe ich mich auch schon gedacht...

ausblenden volle Höhe 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:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
private void benutzerBindingNavigatorSaveItem_Click(object sender, EventArgs e)
        {
            this.Validate();
            this.benutzerBindingSource.EndEdit();
            this.tableAdapterManager.UpdateAll(this.verkaufssoftwareDataSet);

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // TODO: Diese Codezeile lädt Daten in die Tabelle "verkaufssoftwareDataSet.Benutzer". Sie können sie bei Bedarf verschieben oder entfernen.
            this.benutzerTableAdapter.Fill(this.verkaufssoftwareDataSet.Benutzer);

        }


        private void AddUser(string Vorname, string Nachname, string Benutzername, string Passwort, string Händlerbutton, string Hausnummer,string PLZ, string Straße,string Wohnort,string Email, bool gesperrt)
        {
            string _Username = Benutzername;
            string _Password = Passwort;
            string _Vorname = Vorname;
            string _Nachname = Nachname;
            string _Hausnummer = Hausnummer;
            string _PLZ = PLZ;
            string _Straße = Straße;
            string _Wohnort = Wohnort;
            bool _Händlerbutton;
            string _Email = Email;
            // ^steht für Anfang und $ für Ende
            Regex regex = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"); // Verbietet Zeichen
            Regex nurbuchstaben = new Regex(@"^[A-Za-z]*$"); // Nur Buchstaben sind erlaubt
            //Regex nurbuchstaben = new Regex(@"^[A-Za-z\s]+$"); // Nur Buchstaben und Leerzeilen sind erlaubt
            Regex nurzahlen = new Regex(@"^[0-9]*$"); // Nur Zahlen sind erlaubt
            Match fehleremail = regex.Match(_Email);
            Match fehlervorname = nurbuchstaben.Match(_Vorname);
            Match fehlernachname = nurbuchstaben.Match(_Nachname);
            Match fehlerwohnort = nurbuchstaben.Match(_Wohnort);
            Match fehlerstrase = nurbuchstaben.Match(_Straße);
            Match fehlerplz = nurzahlen.Match(_PLZ);
            Match fehlerhausnummer = nurzahlen.Match(_Hausnummer);

            if (Händlerbutton == String.Empty)
                _Händlerbutton = false;
            else
                _Händlerbutton = true;

            #region Kontrolle : E-Mail doppelt vergeben?
            foreach (DataRow row in verkaufssoftwareDataSet.Benutzer)
            {
                //And look for matching usernames
                if (row.ItemArray[2].Equals(_Username))
                {
                    //If one is found, show message:
                    MessageBox.Show("Benutzername bereits vergeben.");
                    return;
                }
            } 
            #endregion
            #region Kontrolle : Email doppelt vergeben?
            foreach (DataRow row in verkaufssoftwareDataSet.Benutzer)
            {
                //And look for matching usernames
                if (row.ItemArray[10].Equals(_Email))
                {
                    //If one is found, show message:
                    MessageBox.Show("E-Mail bereits in Gebrauch.");
                    return;
                }
            }
            #endregion
            #region Kontrolle : ein Feld leer?
            if (_Username == "" || _Vorname == "" || _Nachname == "" || _Wohnort == "" || _Straße == "" || _PLZ == "" || _Hausnummer == "" || _Email == "" || _Password == "")
            {
                MessageBox.Show("Es fehlen noch Angaben. Bitte alle Felder ausfüllen.");
                return;
            } 
            #endregion
            #region Kontrolle : Passwort zu kurz?
            else if (Passwort.Length < 8)
            {
                MessageBox.Show("Passwort muss mindestens 8 Zeichen besitzen.");
                return;
            } 
            #endregion
            #region Kontrolle : E-Mail gültig?
            else if (!fehleremail.Success)
            {
                MessageBox.Show("Falsche E-Mail");
                return;
            } 
            #endregion
            #region Kontrolle : Vorname gültig?
            else if (!fehlervorname.Success)
            {
                MessageBox.Show("Ungültige Zeichen in Vorname");
                return;
            }
            #endregion
            #region Kontrolle : Nachname gültig?
            else if (!fehlernachname.Success)
            {
                MessageBox.Show("Ungültige Zeichen in Nachnname");
                return;
            }
            #endregion
            #region Kontrolle : Wohnort gültig?
            else if (!fehlerwohnort.Success)
            {
                MessageBox.Show("Ungültige Zeichen in Wohnort.");
                return;
            }
            #endregion
            #region Kontrolle : Straße gültig?
            else if (!fehlerstrase.Success)
            {
                MessageBox.Show("Ungültige Zeichen in Straße.");
                return;
            }
            #endregion
            #region Kontrolle : PLZ gültig?
            else if (!fehlerplz.Success)
            {
                MessageBox.Show("Ungültige Zeichen in Postleitzahl.");
                return;
            }
            #endregion
            #region Kontrolle : Hausnummer gültig?
            else if (!fehlerhausnummer.Success)
            {
                MessageBox.Show("Ungültige Zeichen in Hausnummer.");
                return;
            }
            #endregion

            VerkaufssoftwareDataSet.BenutzerRow newUserRow = verkaufssoftwareDataSet.Benutzer.NewBenutzerRow();
            newUserRow.Benutzername = _Username;
            newUserRow.Passwort = HashPass(_Password);
            newUserRow.Händler = _Händlerbutton;
            newUserRow.Vorname = _Vorname;
            newUserRow.Nachname = _Nachname;
            newUserRow.Hausnummer = Convert.ToInt32(_Hausnummer);
            newUserRow.Postleitzahl = Convert.ToInt32(_PLZ);
            newUserRow.Straße = _Straße;
            newUserRow.Ort = _Wohnort;
            newUserRow.Email = _Email;
            newUserRow.Gesperrt = false;


            verkaufssoftwareDataSet.Benutzer.Rows.Add(newUserRow);
            loginUsername.Text = String.Empty;
            loginPasswort.Text = String.Empty;
            this.Validate();
            this.benutzerBindingSource.EndEdit();
            this.tableAdapterManager.UpdateAll(this.verkaufssoftwareDataSet);
             MessageBox.Show("Erfolgreich registriert!");
             loginPage.Show();

            }

        private void registrierButton_Click(object sender, EventArgs e)
        {
                AddUser(regisVorname.Text, regisNachname.Text, regisBn.Text, regisPasswort.Text, regisHändlernr.Text, regisHausnummer.Text, regisPLZ.Text, regisStrase.Text, regisWohnort.Text, regisEmail.Text, false);
        }

        public string HashPass(string password)
        {
            SHA256 sha = new SHA256CryptoServiceProvider();

            //compute hash from the bytes of text
            sha.ComputeHash(ASCIIEncoding.ASCII.GetBytes(password + regisEmail));

            //get hash result after compute it
            byte[] result = sha.Hash;

            StringBuilder strBuilder = new StringBuilder();
            for (int i = 0; i < result.Length; i++)
            {
                //change it into 2 hexadecimal digits
                //for each byte
                strBuilder.Append(result[i].ToString("x2"));
            }

            return strBuilder.ToString();
        }

        private void loginBtn_Click(object sender, EventArgs e)
        {
            // Variablen für Username und Passwort
            string username = loginUsername.Text;
            string password = HashPass(loginPasswort.Text);


            //Durchläuft die Datenbank Benutzer
            foreach (DataRow row in verkaufssoftwareDataSet.Benutzer)
            {
                if (row.ItemArray[8].Equals(true)) // Benutzerkonto gesperrt? Funktioniert noch nich!!!!
                {
                    MessageBox.Show("Benutzerkonto gesperrt!");
                    break;
                }

                // Kontrolliert ob Username vorkommt und das Passwort dazu passt.
                else if (row.ItemArray[2].Equals(username) && row.ItemArray[7].Equals(password) && row.ItemArray[8].Equals(false))
                {
                    loginUsername.Text = String.Empty;
                    loginPasswort.Text = String.Empty;
                    MessageBox.Show("Login erfolgreich!");
                    //this.Close();
                    this.Hide();
                    Verkaufssoftware test = new Verkaufssoftware();
                    test.Show();
                    
                }
                // Meldung bei falschen Angaben
                else
                {
                    MessageBox.Show("Benutzername/Passwort falsch!");
                    break;
                }
            }
        }
    }
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Fr 20.09.13 03:36 
user profile iconTester15224 hat folgendes geschrieben Zum zitierten Posting springen:
Daten werden übernommen, nur wenn ich etwas im Programm verändere gehen alle Daten verloren. Und bei den Bool werten ist es sogar so, dass wenn man das Programm ein zweites mal start der wert gelöscht wird.

Ich kenne mich zwar mit C# nicht gut aus, aber selbst mir sind folgende Punkte aufgefallen:
1. Die Straßennamen können sehr wohl auch Zahlen beinhalten. Schau Dir mal die Straßennamen in der Mannheimer Innenstadt an.
2. Auch Hausnummern können Buchstaben enthalten, z. B. Ringstraße 11 A.
3. Eine Postleitzahl kann im Ausland (Großbritannien) auch Buchstaben und Zahlen enthalten.
4. Die Postleitzahl solltest Du in der Datenbank nicht als Zahl abspeichern, sonst wird bei der Abfrage einer eingegebenen PLZ wie z. B. 03058 nur 3058 zurück geliefert.
5. Vor- und Nachnamen können auch Bindestriche enthalten.
6. Bei den Benutzernamen usw. beim Vergleichen zuerst in Großbuchstaben umwandeln. Dann findest Du auch Müller und MÜLLER, unabhängig von der Schreibweise.

Nun zu Deinem Problem:
Ab Zeile 193 durchsuchst Du die Tabelle Benutzer, ob gesperrt oder nicht. Allerdings prüfst Du nicht, ob der Datensatz auch zu dem Benutzer gehört. Richtig müsste die Abfolge so sein:
Benutzer in der Tabelle suchen. Wird der Benutzer nicht gefunden, dann liegt eine Neuanmeldung vor. Wird der Benutzer gefunden, dann ist bei diesem Datensatz auf gesperrt oder nicht zu prüfen.

Jeden einzelnen Datensatz mit foreach zu durchsuchen, erscheint mir auch nicht gerade optimal zu sein (Zeitproblem bei größeren Datenbanken). Du solltest Dich vielleicht mal mit SQL beschäftigen.

Übrigens: Deine Frage wäre im C#-Forum der Entwickler-Ecke besser aufgehoben als unter Delphi.
testerIstBack
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Fr 20.09.13 08:18 
erstmal schuldigung das ich jetzt nen anderen account habe, kann mich auf dem anderen nicht mehr einloggen und die email sei angeblich auch ungültig.

und dann noch dankeschn das du mich auf die kontrollen aufmerksam gemacht hast, auch wenn die erstmal übergangsweise sein sollten, trotzdem danke. nur da habe ich das Problem wie mache ich das mit dem Bindestrich? Habe gegooglet aber nichts laufbares gefunden?!


So sieht der jetzt aus. Erstmal noch mit einer foreach.
ausblenden volle Höhe 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:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
             foreach (DataRow row in verkaufssoftwareDataSet.Benutzer)
            {
                if (row.ItemArray[2].Equals(username))
                {
                    if (row.ItemArray[8].Equals(false))
                    {
                        if (row.ItemArray[7].Equals(password))
                        {
                            loginUsername.Text = String.Empty;
                            loginPasswort.Text = String.Empty;
                            MessageBox.Show("Login erfolgreich!");
                            this.Hide();
                            Verkaufssoftware test = new Verkaufssoftware();
                            test.Show();
                        }

                        else
                        {
                            MessageBox.Show("Passwort ungültig!");
                        }
                    }

                    else
                    {
                        MessageBox.Show("Benutzer gesperrt!");
                    }
                }

                else
                {
                    MessageBox.Show("Benutzername unbekannt!");
                }
            }


bei einem zweitem start des Programms sagt er mir immer erst passtwort ungültig und dann benutzername unbekannt. was mache ich falsch?

wie soll das verhindern das der Bool-Wert wieder auf Null gesetzt wird. Guckt man in die Tabelle rein und markiert gesperrt ist bei neustart des Programms die Markierung weg und der Bool nicht auf False oder True sonnder lerr/null.