Benutzer mit den meisten Antworten
Datenbank Listbox

Frage
-
Hallo
Ich möchte gerne aus meiner Datenbank(ID, Start, Stop, Zeit) 3 ListBoxen(Start,Stop,Zeit) machen, welche immer beim Laden des Forms den gesammten Inhalt der Datenbank anzeigen. Ausserdem möchte ich, dass wenn man Button1 anklickt, das Programm in Start das Aktuelle Datum einschreibt und wenn Button2 angeklickt das Programm in Stop das dann Aktuelle Datum reinschreibt und automatisch in Zeit die Differenz einträgt.
Beispiel:
Button1.Click
db1 mach neuen Datensatz Start = Date Now
Button2.Click
db1 letzter Datensatz Stop = Date Now, Zeit = start - stop
LG Yves Riedener
Antworten
-
Hallo Yves,
Roberts Beitrag geht davon aus, dass Du eine relationale Datenbank verwendest -
im Beispiel eine Access Datenbank (.mdb). Solange Du die nicht hast, wird nicht
viel passieren.
Ein DataSet (Dein mzDataSet1) ist nur eine Speicherdatenbank und "verflüchtigt" sich
beim Programmende wieder. Die Daten werden deshalb aus einer externen Datenbank
geladen und dort wieder gespeichert.
Wenn Du Dich jetzt nicht mit der Datenbankprogrammierung beschäftigen willst,
wäre eine Alternative, die Daten Deines DataSets als XML-Datei zu speichern.
Die DataSet Klasse bietet dazu die Methoden WriteXml (Schreben) und ReadXml (Lesen) an,
siehe auch: Schreiben von 'DataSet'-Inhalt als XML-Daten (ADO.NET)
Gruß Elmar- Bearbeitet Elmar BoyeEditor Dienstag, 9. März 2010 09:23 Link Korrektur
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Donnerstag, 11. März 2010 07:53
- Als Antwort markiert Yves Riedener Donnerstag, 11. März 2010 18:47
-
Hallo,
mit FTP und SQL geht da gar nichts. Da scheint dann auch wieder der Mangel an Grundlagen durch.
Thorsten Dörfler
Microsoft MVP Visual Basic- Als Antwort vorgeschlagen Robert BreitenhoferModerator Donnerstag, 11. März 2010 07:53
- Als Antwort markiert Yves Riedener Donnerstag, 11. März 2010 18:47
Alle Antworten
-
Hallo Yves,
Als Startpunkt wir haben zum Beispiel eine Access Datenbank mit folgender Struktur: Tabelle GeneralData mit Felder (ID – AutoNumber, Start – Date/Time, Stop – Date/Time und Zeit – Text)
Folgender Code Schnipsel bindet die Drei ListBoxen an die Felder Start, Stop und Zeit beim Laden des Forms.
Knopf Start zeigt das StartDatum in TextBox1 an.
Knopf Stop zeigt die Zeitdifferenz in TextBox2 und schreibt die drei Felder (Start, Stop und Zeit) in die Datenbank.
Die Differenz wird als String geschrieben wie folgt: “Tagen:Stunden:Minuten:Sekunden:Millisekunden“
Im Projekt hab ich noch ein Verweis auf C:\Program Files\Microsoft.NET\Primary Interop Assemblies\adodb.dll gemacht.
Imports System.Data Imports System.Data.OleDb Public Class Form1 Dim startTime, endTime As DateTime Dim span As TimeSpan Dim connString As String Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click startTime = DateTime.Now TextBox1.Text = startTime.ToString End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click endTime = DateTime.Now span = endTime.Subtract(startTime) TextBox2.Text = String.Format("{0}:{1}:{2}:{3}:{4}", span.Days, span.Hours, span.Minutes, span.Seconds, span.Milliseconds) '//schreiben in die Datenbank Dim CNtemp As ADODB.Connection Dim strSQL As String strSQL = "INSERT INTO GeneralData (Start,Stop,Zeit) VALUES (#" + Convert.ToString(startTime) + "#,#" + Convert.ToString(endTime) + "#,'" + TextBox2.Text + "')" CNtemp = New ADODB.Connection With CNtemp .Mode = ADODB.ConnectModeEnum.adModeReadWrite .CursorLocation = ADODB.CursorLocationEnum.adUseClient .Open(connString) End With CNtemp.Execute(strSQL) CNtemp.Close() '// End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim conn As OleDbConnection connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\...\Zeiten.mdb" conn = New OleDbConnection(connString) Dim dt As New DataTable("GeneralData") Dim adapter As OleDbDataAdapter = New OleDbDataAdapter Dim selectQuery As String = "SELECT * FROM GeneralData" adapter.SelectCommand = New OleDbCommand(selectQuery, conn) conn.Open() adapter.Fill(dt) conn.Close() ListBox1.DataSource = dt ListBox1.DisplayMember = "Start" ListBox1.ValueMember = "Start" ListBox2.DataSource = dt ListBox2.DisplayMember = "Stop" ListBox2.ValueMember = "Stop" ListBox3.DataSource = dt ListBox3.DisplayMember = "Zeit" ListBox3.ValueMember = "Zeit" End Sub End Class
Grüße,Robert
-
Hallo Robert,
um Daten einzufügen, sollte man auf ADODB verzichten, und dies auch mit dem OleDb Client erledigen.
Zumal es Yves leichter fallen sollte, wenn er nur eine Technik lernen muß.
Codeschnippsel (ungetestet) fürs Einfügen in Button2_Click:
Try Using connection As New OleDbConnection(connString) Using command As New OleDbCommand("INSERT INTO GeneralData (Start,Stop,Zeit) VALUES (?, ?, ?)", connection) command.Parameters.Add("@Start", OleDbType.DBTimeStamp).Value = startTime command.Parameters.Add("@Stop", OleDbType.DBTimeStamp).Value = endTime command.Parameters.Add("@Zeit", OleDbType.VarWChar, 255).Value = TextBox2.Text connection.Open() command.ExecuteNonQuery() End Using End Using Catch ex As Exception MessageBox.Show(ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) End Try
Weitere Lektüre: Befehle und Parameter (ADO.NET)
Gruß Elmar -
Ja, da stimme ich Elmar zu. ADODB sollte man wirklich nicht mehr einsetzen. Access als Datenbank wäre auch nicht meine erste Wahl. Wenn's eine ganz einfache Dateibasierte Datenbank sein soll kann man da inzwischen SQL Server Compact gut einsetzen, ansonsten SQL Server Express.
Yves: Für den Datenbankzugriff gibt es etliche verschiedene Möglichkeiten in .NET. Da wäre z.B. der direkte Einsatz von ADO.NET Connection / Command wie es Elmar hier gezeigt hat, DataSets, LINQ to SQL, das Entity Framework, NHibernate usw.
Für so ein einfaches kleines Beispiel reicht ADO.NET vollkommen aus. Wenn Deine Anwendung aber komplexer wird, solltest Du Dich mit den anderen Alternativen beschäftigen. Mein persönlicher Favorit für .NET 3.5 / 3.5 SP1 ist LINQ to SQL, ab .NET 4 das Entity Framework.
Grüße,
Mathias
Mathias Raacke - freiberuflicher .NET Trainer und Berater - Blog http://www.outofcoffeeexception.de Twitter oocx -
Also iwie verstehe ich das nicht, ich habe bereits eine Datenbank(mzDataSet1) mit der Tabelle Zeiten(Zeit) und jetzt habe ich folgenden code:
Imports System.Data Imports System.Data.OleDb Public Class Form1 Dim startTime, endTime As DateTime Dim span As TimeSpan Dim connString As String Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click startTime = DateTime.Now TextBox1.Text = startTime.ToString End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim conn As OleDbConnection connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\...\Zeiten.mdb" conn = New OleDbConnection(connString) Dim dt As New DataTable("GeneralData") Dim adapter As OleDbDataAdapter = New OleDbDataAdapter Dim selectQuery As String = "SELECT * FROM GeneralData" adapter.SelectCommand = New OleDbCommand(selectQuery, conn) conn.Open() adapter.Fill(dt) conn.Close() ListBox1.DataSource = dt ListBox1.DisplayMember = "Start" ListBox1.ValueMember = "Start" ListBox2.DataSource = dt ListBox2.DisplayMember = "Stop" ListBox2.ValueMember = "Stop" ListBox3.DataSource = dt ListBox3.DisplayMember = "Zeit" ListBox3.ValueMember = "Zeit" End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click endTime = DateTime.Now span = endTime.Subtract(startTime) TextBox2.Text = String.Format("{0}:{1}:{2}:{3}:{4}", span.Days, span.Hours, span.Minutes, span.Seconds, span.Milliseconds) Try Using connection As New OleDbConnection(connString) Using command As New OleDbCommand("INSERT INTO GeneralData (Start,Stop,Zeit) VALUES (?, ?, ?)", connection) command.Parameters.Add("@Start", OleDbType.DBTimeStamp).Value = startTime command.Parameters.Add("@Stop", OleDbType.DBTimeStamp).Value = endTime command.Parameters.Add("@Zeit", OleDbType.VarWChar, 255).Value = TextBox2.Text connection.Open() command.ExecuteNonQuery() End Using End Using Catch ex As Exception MessageBox.Show(ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) End Try End Sub End Class
Doch bei folgendem code passiert nichts... Es wird nur TextBox1 & TextBox2 beschrieben und eine MsgBox angezeigt:
Der Microsoft Provider ist nicht auf dem lokalen Computer registriert
Was muss ich ändern?
LG Yves Riedener- Bearbeitet Yves Riedener Montag, 8. März 2010 13:53 Gestaltung
-
Hallo Yves,
entwickelst Du unter einem 64 Bit Betriebssystem und kompilierst Deine Anwendung zu AnyCPU (Standard)? Der Jet DB Provider steht nur als 32 Bit Version zur Verfügung, folglich muss Deine Anwendung explizit als x86 Assembly kompiliert werden. Dies stellst Du entweder in den Projekt Eigenschaften unter Kompilieren => Erweitert ein oder unter VB Express über den Konfigurationsmanager.
Siehe unter anderem:
http://social.msdn.microsoft.com/Forums/de-DE/visualbasicde/thread/9a963dc8-c5d2-4d24-b31e-92f2d95cdc2a
Thorsten Dörfler
Microsoft MVP Visual Basic -
Hallo Yves,
Lies Dir mal durch auch die folgenden Links.
http://visualstudiohacks.com/articles/visual-studio-net-platform-target-explained/
Grüße,
Robert
-
Hallo Yves,
Roberts Beitrag geht davon aus, dass Du eine relationale Datenbank verwendest -
im Beispiel eine Access Datenbank (.mdb). Solange Du die nicht hast, wird nicht
viel passieren.
Ein DataSet (Dein mzDataSet1) ist nur eine Speicherdatenbank und "verflüchtigt" sich
beim Programmende wieder. Die Daten werden deshalb aus einer externen Datenbank
geladen und dort wieder gespeichert.
Wenn Du Dich jetzt nicht mit der Datenbankprogrammierung beschäftigen willst,
wäre eine Alternative, die Daten Deines DataSets als XML-Datei zu speichern.
Die DataSet Klasse bietet dazu die Methoden WriteXml (Schreben) und ReadXml (Lesen) an,
siehe auch: Schreiben von 'DataSet'-Inhalt als XML-Daten (ADO.NET)
Gruß Elmar- Bearbeitet Elmar BoyeEditor Dienstag, 9. März 2010 09:23 Link Korrektur
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Donnerstag, 11. März 2010 07:53
- Als Antwort markiert Yves Riedener Donnerstag, 11. März 2010 18:47
-
Hallo,
mit FTP und SQL geht da gar nichts. Da scheint dann auch wieder der Mangel an Grundlagen durch.
Thorsten Dörfler
Microsoft MVP Visual Basic- Als Antwort vorgeschlagen Robert BreitenhoferModerator Donnerstag, 11. März 2010 07:53
- Als Antwort markiert Yves Riedener Donnerstag, 11. März 2010 18:47