Chlochou Geschrieben 3. Juni 2011 Teilen Geschrieben 3. Juni 2011 Hallo zusammen! Derzeit muss ich ein Projekt in der Schule machen welches einmal eine Client Software und einmal eine Administrator Software beeinhaltet. Es sind mehrere Clients im Netz! Client Software Es ist so das hier verschiedenste Daten ausgelesen werden (Betriebssystem, Benutzername, Datum etc.) Diese werden über einen Timer jede Minute in eine Access Datenbank gespeichert. Administrator Software Diese liegt auf unserem Server (genau wie die Datenbank). Mit dieser können die Datensätze in einem DataGridView ausgelesen werden (auch über einen Timer mit Zeit 1 Minute). Klappt soweit auch 1.) Admin Software: Wie schaffe ich es das ich einen Datensatz im DataGridView anklicken kann und diesen mithilfe eines Buttons als Erledigt kennzeichnen kann? (Ist ja Wert Ja/Nein oder?) Dieser muss dann auch wieder zu löschen sein. 2.) Admin Software: In der Client Software schauen wir auch ob eine Internet Verbindung besteht oder nicht und das wird in die Datenbank geschrieben. Wie schaffe ich es jedoch das ich immer nur die aktuelle Minute auslesen kann? Beispiel: 10:00 Uhr: Alle Daten der Client Software werden in die Datenbank eingelesen 10:00 Uhr: Administrator Software zeigt an wie viele PC's online sind 10:01 Uhr: Wiederum werden alle Daten eingelesen usw. 10:01 Uhr: Administrator Software zeigt an wie viele PC's online sind Es dürfen also nur die Datensätze angezeigt werden welche zur gleichen Zeit ausgelesen wurden Ich hoffe ihr versteht was ich meine! Es ist wirklich wichtig und hoffe auf eure Antworten damit ihr mir weiterhelfen könnt (: Dankeschöööööön Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 3. Juni 2011 Teilen Geschrieben 3. Juni 2011 Das mit der Datenbank ist keine gute Lösungen, denn was passiert, wenn der Client das Programm startet und der Server nicht aktiv ist bzw. die Netzwerkverbindung nicht existiert? Außerdem ein Push alle 60sek, nur um zu orüfen ob ein Client noch existiert mit dem ganzen Datenbank-Overhead ist sehr aufwändig. Ich würde hier dazu raten, die Datenbank komplett abzuschaffen und das ganze via Multicast / Unicast durchführen. Der Server, sofern er online ist, empfängt die Pakete innerhalb des Netzes und stellt die Daten entsprechend in der GUI da, wenn nach X Zyklen eben von einem Rechner keine Pakete mehr eintreffen ist er wieder offline. Multi- / Unicastpakete haben noch den Vorteil, dass sie im Router nur dann weiter geleitet werden, wenn dieses explizit erlaubt wurde. Weiterer Vorteil ist, dass hier keine TCP Verbindung existieren muss, wie es bei der Datenbank der Fall ist, damit sicher gestellt ist, dass die Daten korrekt übertragen werden. Bei Multicast / Unicast sind es UDP Daten, wobei eben hier keine Quittierung der empfangenen Daten erfolgen muss. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Chlochou Geschrieben 3. Juni 2011 Autor Teilen Geschrieben 3. Juni 2011 Also wir dachten das wenn keine Verbindung besteht und nach 3 mal Versuch die Verbindung aufzubauen dann einfach eine Fehlermeldung kommt. Ist eben die einzige Lösung die uns in den Sinn kam und da Abgabetermin in 3 Wochen ist. Aber wenn du willst kannst du ja mal sehen wie wir das mit dem Code gelöst haben, dann könnte man da vllt doch noch was machen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 3. Juni 2011 Teilen Geschrieben 3. Juni 2011 Zu Deiner Fragen 1: Meines Wissens kann jede Zelle über die Rows.Items( <index> ) bzw die Zellen über items.cell( <index> ) abgefragt werden. Den Datensatz löschen kann man dann über den entsprechenden Primärschlüssel. Zu Deiner Frage 2: Das mit dem Zeitstempel wird nicht zuverlässig funktionieren, denn die Übertragung und das Schreiben bzw. Lesen aus der Datenbank hat eine gewisse Latenz, die Du kennen müsstest, um den richtigen Datensatz zu selektieren. Diese Latenz ist aber nicht statisch, da sie sich je nach System- / Netzwerkauslastung ändert. Eine Lösung ist, dass man immer den zuletzt eingefügten Datensatz darstellt, dabei muss man aber darauf achten, dass es dann vorkommen kann, dass man, wenn keine neuen Daten eingetroffen sind, den letzten Datensatz mehrfach liest. Zusätzlich muss man sich bei einer solchen Lösung um entsprechendes Locking in der Datenbank kümmern, denn was passiert, wenn ein Client die Daten schreibt und ein anderer liest. Die Lösung mit der Datenbank ist suboptimal Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Chlochou Geschrieben 3. Juni 2011 Autor Teilen Geschrieben 3. Juni 2011 Ohje das wird ja was. Aber Danke für die Antwort! Das Problem bei uns war eben das wir einfach die Aufgabe erhielten Fehler aus einem Netzwerk auszulesen (Nach Vorgabe ob das Laufwerk freigegeben ist oder nicht, Internetverbindung hat, Sich etwas im Laufwerk befindet) Zur Verfügung standen einfach VB.NET, MySQL, ColdFusion, HTML/CSS, Access und C# Da wir aber alle nicht programmieren können und so haben wir den Lehrer gefragt und der meinte mit Access und VB wäre es sehr einfach. Jetzt hab ich nurnoch das Problem: Vorher hat alles bestens funktioniert aber seit ich ein paar Dinge getestet habe und so funktioniert die Verbindung zur Datenbank nicht mehr besser gesagt das Auslesen ins DataGridView: Immer bei data.Fill(ds) gehts nicht Dim con As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=C:\Users\Chlochou\Documents\Admin\Database11.accdb") Dim cmd As New OleDb.OleDbCommand cmd.Connection = con cmd.CommandText = "select * from Fehler" Dim data As New OleDb.OleDbDataAdapter(cmd) Dim ds As New DataSet data.Fill(ds) DgvFehlerauslesen.DataSource = ds.Tables(0) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 3. Juni 2011 Teilen Geschrieben 3. Juni 2011 (bearbeitet) Nach Vorgabe ob das Laufwerk freigegeben ist oder nicht, Internetverbindung hat, Sich etwas im Laufwerk befindet Ich hoffe Dir ist klar, dass eine Prüfung ob eine Verbindung zum Internet besteht, nicht einfach zu realisieren ist. Hierzu sind Informationen über die Netzkonfiguration und auch die Kommunikation zwischen den beteiligten Systemen notwendig. Für eine Prüfung wären hier IP-Adressen, Netzwerkadresse, Router, Ports, DNS ggf Proxy beteiligt; nur weil man eine Webseite nicht aufrufen kann, folgt daraus nicht, dass keine Verbindung ins Netz existiert. Da wir aber alle nicht programmieren können und so haben wir den Lehrer gefragt und der meinte mit Access und VB wäre es sehr einfach. Es geht nicht darum, dass man irgendwie irgendwelche Befehle zusammen kopiert, sondern darum eine Problemstellung zu lösen und wie schon ausgeführt, ist die Lösung nicht sinnvoll. Vorher hat alles bestens funktioniert aber seit ich ein paar Dinge getestet habe und so funktioniert die Verbindung zur Datenbank nicht mehr besser gesagt das Auslesen ins DataGridView: Immer bei data.Fill(ds) gehts nicht "geht nicht" ist keine ausreichende Problembeschreibung. Es gibt so etwas wie Fehlermeldungen und ggf. ein Backup von einer älteren Version, die Du verwenden kannst Bearbeitet 3. Juni 2011 von flashpixx Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Chlochou Geschrieben 3. Juni 2011 Autor Teilen Geschrieben 3. Juni 2011 Fehlermeldung kann ich dir grad nicht liefern da ich das Programm nicht da hab. Aber der Code für die Internetverbindung haben wir jetzt eifnach so gemacht: If IsConnected() Then Me.txtVerbindung.Text = "Es besteht eine Internetverbindung" If Me.txtVerbindung.Text = ("Es besteht eine Internetverbindung") Then Me.txtVerbindung.BackColor = Color.GreenYellow End If Else Me.txtVerbindung.Text = "Es besteht KEINE Internetverbindung" If Me.txtVerbindung.Text = ("Es besteht KEINE Internetverbindung") Then Me.txtVerbindung.BackColor = Color.Red End If End If Private Function IsConnected() As Boolean 'auf Konnektivität prüfen Try My.Computer.Network.Ping("www.google.ch") Return 1 Catch ex As Exception Return 0 End Try End Function Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 3. Juni 2011 Teilen Geschrieben 3. Juni 2011 Und genau das reicht nicht aus. Wenn z.B. eine Firewall ICMP Pakete blockiert, wird false geliefert, obwohl die Verbindung z.B. via HTTP möglich ist. Wenn der DNS Server nicht erreichbar ist, wird ebenfalls false geliefert, obwohl ggf ein ping auf 209.85.149.106 (das wäre die zu www.google.ch passende IP) möglich ist. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Chlochou Geschrieben 6. Juni 2011 Autor Teilen Geschrieben 6. Juni 2011 so wegen Internetverbindung sagte uns der Lehrer jetzt es würde so reichen. Jetzt haben wir ein DataGridView eingebunden damit wir die Mitarbeiterliste des Betriebs anzeigen können. Diese zeigt es auch an mit diesem Code: Dim con3 As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=F:\Projekt\Datenbank\DB_Meldungen.accdb") Dim cmd3 As New OleDb.OleDbCommand cmd3.Connection = con3 cmd3.CommandText = "select * from Mitarbeiter" Dim data3 As New OleDb.OleDbDataAdapter(cmd3) Dim ds3 As New DataSet data3.Fill(ds3) dgvMitarbeiterliste.DataSource = ds3.Tables(0) Jetzt wollten wir aber das wir den Datensatz löschen und bearbeiten können sowie mit einer neuen Windows Form einen Benutzer hinzufügen. Das Hinzufügen klappt auch nicht ganz. Ich öffne zuerst die WindowsForm: Private Sub btnHinzufugen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHinzufugen.Click Mitarbeiter.Show() End Sub danach kann ich alle Daten eingeben und wenn ich auf Speichern klicke sollte es in die Access Datenbank schreiben und eine "Erfolgreich" Meldung ausgeben: Dim con As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=F:\Projekt\Datenbank\DB_Meldungen.accdb") Dim cmd As New OleDb.OleDbCommand cmd.Connection = con cmd.CommandText = "INSERT INTO Mitarbeiter (Name, Vorname, E-Mail, Telefon) VALUES ('" & Me.txtName.Text & "','" & Me.txtVorname.Text & "','" & Me.txtEMail.Text & "','" & Me.txtTelefon.Text & "')" Dim data As New OleDb.OleDbDataAdapter(cmd) Dim ds As New DataSet data.Fill(ds) MsgBox("Speicher Erfolgreich!") Aber leider gibt es immer den gleichen Fehler aus: Syntax error in INSERT INTO statement. Aber ich sehe ehrlich gesagt keinen Fehler oO Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
HJST1979 Geschrieben 6. Juni 2011 Teilen Geschrieben 6. Juni 2011 Aber leider gibt es immer den gleichen Fehler aus: Syntax error in INSERT INTO statement. Du solltest mal die KOMPLETTE Fehlermeldung schreiben! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.