Autor Beitrag
c#ler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 176
Erhaltene Danke: 1

Win7 64Bit
C#, VBA, VS2013 Ultimate
BeitragVerfasst: Do 20.10.11 15:18 
Hi,
Ich habe ein Programm geschrieben, dass Dateien (z.B. pdfs auf ein mobiles Gerät per USB kopiert).
Da dieses Programm jedoch für mehr als einen Kunden genutzt werden soll, habe ich eine SQL Datenbank angelegt, die PINS enthält.
Ich möchte jedem PIN eine Datei (z.B. "1000" = "Kunde x" / "1001" = "Kunde y")zuordnen um dann je nach Eingabe des Pins im Programm eine Datei zu kopieren und damit dem Kunden nur seine Datei zu geben.

Hat jemand eine Idee, wie ich das am besten umsetzen kann?

Was ich bis jetzt dazu geschrieben habe:
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:
namespace Inst
{
    public partial class Datenbank : Form
    {
        Communication.RAPI ra = new Communication.RAPI();
        
        public Datenbank()
        {
            InitializeComponent();
            timer1.Start();
            timer2.Start();
        }

        private void InitializeMyControl(object sender, EventArgs e)
        {
            textBox2.PasswordChar = '*';
            textBox2.MaxLength = 4;
        }

        private void _button_OK_Click(object sender, EventArgs e)
        {
            if (_kundedb.Checked == true)
                {
                    ra.Connect();
                    if (textBox2.Text == textBox1.Text)
                    {
                        textBox2.Text = "PIN is correct";
                        textBox2.BackColor = Color.Green;
                        timer_pinlock.Enabled = true;
                        timer_pinlock.Start();
                        customKeyboard1.Visible = false;
                        textBox3.Text = "Access granted";
                        textBox3.Visible = true;
                        ra.Connect();

                        if (ra.DeviceFileExists(@"\SD Card\x.pdf"))
                        {
 MessageBox.Show("Es ist bereits eine Datenbank vorhanden!\r\n Bitte Löschen Sie zuvor die andere Datenbank");
                        }
                        else 
                        {
                            ra.Connect();
                            ra.CopyFileToDevice(@"C:\Kunden\x\x.pdf"@"\SD Card\x.pdf");
                            MessageBox.Show("Die gewünschte Datenbank wurde auf die BMCUII kopiert");
                            ra.Disconnect();
                            ra.Dispose();
                        }
                        ra.Disconnect();
                        ra.Dispose();
                    }
                    else
                    {
                        textBox2.Text = "";
                        textBox2.Text = "PIN is wrong";
                        textBox2.BackColor = Color.Red;
                        customKeyboard1.Visible = false;
                        textBox3.Text = "Access denied";
                        textBox3.Visible = true;
                    }
            }
        }

        private void textBox1_Click(object sender, EventArgs e)
        {
            textBox2.Text = "";
            textBox2.BackColor = Color.Empty;
        }

        private void _kundedb_CheckedChanged(object sender, EventArgs e)
        {
            if (_kundedb.Checked == true)
            {
                _kundedb.Enabled = false;
                _leeredb.Enabled = false;
                _button_zurücksetzen.Enabled = false;
                _button_zurück.Enabled = false;
                touchTextBox1.Visible = false;
                textBox2.Visible = true;
                _button_OK.Visible = true;
                _button_abbrechen.Visible = true;
                customKeyboard1.Visible = true;
                _button_OK.Enabled = false;
                textBox2.Focus();

                if (pin == 1)
                {
                    timer_pinlock.Enabled = true;
                    timer_pinlock.Start();
                }
            }
            else
            {
                textBox2.Text = "";
                textBox2.BackColor = Color.Empty;
            }
        }

        private void timer_pinlock_Tick(object sender, EventArgs e)
        {
            _kundedb.Enabled = true;
            _leeredb.Enabled = true;
            _button_zurücksetzen.Enabled = true;
            _button_zurück.Enabled = true;
            touchTextBox1.Visible = true;
            textBox2.Visible = false;
            _button_OK.Visible = false;
            _button_abbrechen.Visible = false;
        }

        private void _leeredb_CheckedChanged(object sender, EventArgs e)
        {
            ra.Connect();
            if (ra.DeviceFileExists(@"\SD Card\x.sqlite"))
            {
                MessageBox.Show("Datenbank konnte nicht kopiert werden! Auf dem Gerät befindet bereits eine Datenbank. Bitte löschen Sie diese zuvor!");
            }
            else
            {
                ra.Connect();
                ra.CopyFileToDevice(@"C:\Kunden\y\x.sqlite"@"\SD Card\x.sqlite");
                MessageBox.Show("Die Basis Datenbank wurde installiert");
                this.Hide();
                Datenbank Datenbankvariable = new Datenbank();
                Datenbankvariable.ShowDialog();
            }
            ra.Disconnect();
            ra.Dispose();
        }

        private void _button_abbrechen_Click(object sender, EventArgs e)
        {
            this.Hide();
            Datenbank Datenbankvariable = new Datenbank();
            Datenbankvariable.ShowDialog();
        }

        void authentification_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                _button_OK.PerformClick();
            }

            if (e.KeyCode == Keys.Escape)
            {
                _button_abbrechen.PerformClick();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ra.Connect();
            if (ra.DeviceFileExists(@"\SD Card\x.sqlite"))
            {
                ra.DeleteDeviceFile(@"\SD Card\x.sqlite");
                MessageBox.Show("Die vorhandene Datenbank wurde gelöscht");
                this.Hide();
                Datenbank Datenbankvariable = new Datenbank();
                Datenbankvariable.ShowDialog();
            }
            else
            {
                MessageBox.Show("Auf dem Gerät ist keine Datenbank vorhanden");
                this.Hide();
                Datenbank Datenbankvariable = new Datenbank();
                Datenbankvariable.ShowDialog();
            }
        }

        private void Datenbank_Load(object sender, EventArgs e)
        {
            this.pINTableAdapter.Fill(this.authentificationDataSet.PIN);
        }

        private void textBox3_update(object sender, EventArgs e)
        {
            if (textBox2.TextLength == 4)
            {
                _button_OK.Enabled = true;
                if (textBox1.Text == textBox2.Text)
                {
                    textBox3.Text = "correct PIN";
                    textBox3.BackColor = Color.Green;
                }
                else
                {
                    textBox3.Text = "wrong PIN";
                    textBox3.BackColor = Color.Red;
                }
                timer1.Stop();
                timer1.Start();
            }
        }

        private void textBox4_update(object sender, EventArgs e)
        {
            ra.Connect();
            if (ra.DeviceFileExists(@"\SD Card\x.sqlite"))
            {
                touchTextBox3.Text ="Datenbank auf Gerät vorhanden";
                touchTextBox3.BackColor = Color.Green;
            }
            else
            {
                touchTextBox3.Text = "Keine Datenbank auf Gerät vorhanden";
                touchTextBox3.BackColor = Color.Red;
            }
            timer2.Stop();
            timer2.Start();
        }
    }
}
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: Do 20.10.11 16:44 
Wenn du lediglich einen viertstelligen PIN als Erkennungsmerkmal nutzt, wirst du (allerspätestens ab einer gewissen Nutzerzahl) an die Problematik kommen, dass man den PIN einer anderen Person erraten (oder zufälligerweise eingeben) kann.
Dann wäre nicht sichergestellt, dass eine Person nur die eigenen Daten erhalten kann.

Wenn das nicht relevant ist, d.h. man auch einmal die Daten einer anderen Person in der Hand haben darf, dann könntest du in deiner PIN-Datenbank zu jedem Kunden einen eindeutigen Bezeichner anlegen.
Auf dem lokalen Dateisystem baust du eine Ordnerstruktur auf, die für jeden Kunden einen Ordner mit der jeweiligen Bezeichnung beinhaltet. Dort landen dann die Dokumente.
Das Programm montiert sich dann beim Kopieren den Namen der zu kopierenden Datei und kopiert diese auf die SD Karte.

(Oder du nimmst gleich die PIN als Identifier und legst im lokalen Dateisystem Dokumente ab wie
"1000.pdf" , "1001.pdf".... etc.. Da sparst du dir das zusätzliche Feld in der DB)

_________________
Delphi: XE - OS: Windows 7 Professional x64
c#ler Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 176
Erhaltene Danke: 1

Win7 64Bit
C#, VBA, VS2013 Ultimate
BeitragVerfasst: Do 20.10.11 17:12 
user profile iconHorschdware hat folgendes geschrieben Zum zitierten Posting springen:
Wenn du lediglich einen viertstelligen PIN als Erkennungsmerkmal nutzt, wirst du (allerspätestens ab einer gewissen Nutzerzahl) an die Problematik kommen, dass man den PIN einer anderen Person erraten (oder zufälligerweise eingeben) kann.
Dann wäre nicht sichergestellt, dass eine Person nur die eigenen Daten erhalten kann.

Wenn das nicht relevant ist, d.h. man auch einmal die Daten einer anderen Person in der Hand haben darf, dann könntest du in deiner PIN-Datenbank zu jedem Kunden einen eindeutigen Bezeichner anlegen.
Auf dem lokalen Dateisystem baust du eine Ordnerstruktur auf, die für jeden Kunden einen Ordner mit der jeweiligen Bezeichnung beinhaltet. Dort landen dann die Dokumente.
Das Programm montiert sich dann beim Kopieren den Namen der zu kopierenden Datei und kopiert diese auf die SD Karte.

(Oder du nimmst gleich die PIN als Identifier und legst im lokalen Dateisystem Dokumente ab wie
"1000.pdf" , "1001.pdf".... etc.. Da sparst du dir das zusätzliche Feld in der DB)


Danke für die schnelle antwort.
Was genau meinst du mit Pin-Datenbank?
Im Moment habe ich eine Datenbank mit 2 Spalten(Die bisher keine relation zueinander haben, weil das Microsoft SQL Server Management Tool "Express version" nicht richtig warm werde)
Die eine Spalte ist Pin (CHAR 4 Zeichen), die andere Kunde(String <=50 Zeichen)

Ich kann im moment über meinen Code auf die 1. Zeile der Pinspalte zugreifen und bei der eingabe im Programm einen Abgleich machen, aber das Problem ist, dass dies eine eindeutige Zuordnung ist...
(Nur dieser eine Pin ist korrekt)
wie mache ich ein merge mit den anderen zeilen der Spalte row?