Zum Inhalt springen

VB.NET - Anvisierter Datensatz + Filterung jede Minute


Chlochou

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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? :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von flashpixx
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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...