App installieren
How to install the app on iOS
Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature may not be available in some browsers.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Visual Basic und SQLite?
- Ersteller lord_fritte
- Erstellt am
lord_fritte
Vice Admiral Special
Hallo ich bastel jetzt ein bisschen mit SQLite und Visual Basic .Net 2005.
Ich habe eine Datenbank mit einer Tabelle:
Das Auslesen geht ja eigentlich wunderbar:
Aber wie siehts mit den Befehlen INSERT, UPDATE, DELETE aus? ich habe schon alles mögliche versucht die befehle da einzubauen aber da passiert reingar nix, es wird nichts hinzugefügt, nichts gelöscht und nichts geändert.
Also wie muss ich die befehle dort einbauen?
Ich habe es schon so versucht, aber das geht nicht:
Ich habe eine Datenbank mit einer Tabelle:
Code:
Settings:
SettingID: | SettingName: | SettingValue:
-----------------------------------------
1 | test1 | Wert 1
2 | test2 | Wert 2
3 | test3 | Wert 3
Das Auslesen geht ja eigentlich wunderbar:
Code:
Module Module1
Sub Main()
Try
Dim sqlConnect = New SQLiteConnection("Data Source=Database.db3")
sqlConnect.Open()
Dim sqlCommand = New SQLiteCommand()
sqlCommand.Connection = sqlConnect
sqlCommand.CommandText = "SELECT * from Settings"
Dim sqlRead = sqlCommand.ExecuteReader()
While (sqlRead.Read())
Console.WriteLine("SettingID: {0}, SettingName: {1}, SettingValue: {2} ", sqlRead.GetValue(0), sqlRead.GetValue(1), sqlRead.GetValue(2))
End While
sqlRead.Close()
sqlConnect.Close()
Console.ReadLine()
Catch e As Exception
Console.WriteLine("Fehlermeldung: {0}", e.Message)
End Try
End Sub
End Module
Aber wie siehts mit den Befehlen INSERT, UPDATE, DELETE aus? ich habe schon alles mögliche versucht die befehle da einzubauen aber da passiert reingar nix, es wird nichts hinzugefügt, nichts gelöscht und nichts geändert.
Also wie muss ich die befehle dort einbauen?
Ich habe es schon so versucht, aber das geht nicht:
Code:
Module Module1
Sub Main()
Try
Dim sqlConnect = New SQLiteConnection("Data Source=Database.db3")
sqlConnect.Open()
Dim sqlCommand = New SQLiteCommand()
sqlCommand.Connection = sqlConnect
sqlCommand.CommandText = "UPDATE from Settings SET SettingValue='Blabla' WHERE SettingName='test2'"
Console.ReadLine()
Catch e As Exception
Console.WriteLine("Fehlermeldung: {0}", e.Message)
End Try
End Sub
End Module
- Mitglied seit
- 16.11.2001
- Beiträge
- 21.665
- Renomée
- 1.249
- Standort
- München
- Aktuelle Projekte
- World Community Grid
- Lieblingsprojekt
- Folding@Home
- Meine Systeme
- AMD Ryzen 9 5950X
- BOINC-Statistiken
- Folding@Home-Statistiken
- Prozessor
- AMD Ryzen 9 5950X
- Mainboard
- ASUS TUF Gaming X570-Pro [WI-FI]
- Kühlung
- be quiet! Shadow Rock 3
- Speicher
- 4x 16GB DDR4-3200 Corsair Vengeance LPX
- Grafikprozessor
- ASRock Radeon RX 550 Phantom Gaming Aktiv 2GB
- Display
- LG 27UL850-W, 27"
- SSD
- Samsung 980 PRO 2TB, Samsung 840 EVO 500GB
- HDD
- Seagate Barracuda 7200.14 3TB SATA3
- Optisches Laufwerk
- Samsung SH-S183A SATA schwarz (im externen Gehäuse)
- Gehäuse
- be quiet! Silent Base 802 schwarz
- Netzteil
- be quiet! Straight Power 11 Platinum 550W
- Tastatur
- Logitech G613 Lightspeed
- Maus
- Logitech M510
- Betriebssystem
- Ubuntu Linux 22.04
- Webbrowser
- Vivaldi
- Internetanbindung
-
▼100 MBit
▲40 MBit
Du hast nen Syntaxfehler in Deiner SQL-Query.
Die Syntax für UPDATE lautet:
für INSERT:
oder
für DELETE:
Außerdem führst Du Deine Update-Query nicht aus. Da fehlt ein sqlCommand.ExecuteReader() oder sqlCommand.ExecuteNonQuery().
Die Syntax für UPDATE lautet:
Code:
UPDATE Tabelle SET Spalte1 = 'Wert1', Spalte2 = 'Wert2' WHERE Bedingung
Code:
INSERT INTO Tabelle SET Spalte1 = 'Wert1', Spalte2 = 'Wert2'
Code:
INSERT INTO Tabelle (Spalte1, Spalte2) VALUES ('Wert1', 'Wert2')
Code:
DELETE FROM Tabelle WHERE Bedingung
Außerdem führst Du Deine Update-Query nicht aus. Da fehlt ein sqlCommand.ExecuteReader() oder sqlCommand.ExecuteNonQuery().
lord_fritte
Vice Admiral Special
Danke, es geht, ich hätte aber auch selber drauf kommen können das da ein ExecuteNonQuery() fehlte.
.
EDIT :
.
Aber ist es nicht möglich bei sqlRead.GetValue(0) anstatt die indexnummer der spalte den namen der spalte anzugeben?
.
EDIT :
.
Aber ist es nicht möglich bei sqlRead.GetValue(0) anstatt die indexnummer der spalte den namen der spalte anzugeben?
Zuletzt bearbeitet:
- Mitglied seit
- 16.11.2001
- Beiträge
- 21.665
- Renomée
- 1.249
- Standort
- München
- Aktuelle Projekte
- World Community Grid
- Lieblingsprojekt
- Folding@Home
- Meine Systeme
- AMD Ryzen 9 5950X
- BOINC-Statistiken
- Folding@Home-Statistiken
- Prozessor
- AMD Ryzen 9 5950X
- Mainboard
- ASUS TUF Gaming X570-Pro [WI-FI]
- Kühlung
- be quiet! Shadow Rock 3
- Speicher
- 4x 16GB DDR4-3200 Corsair Vengeance LPX
- Grafikprozessor
- ASRock Radeon RX 550 Phantom Gaming Aktiv 2GB
- Display
- LG 27UL850-W, 27"
- SSD
- Samsung 980 PRO 2TB, Samsung 840 EVO 500GB
- HDD
- Seagate Barracuda 7200.14 3TB SATA3
- Optisches Laufwerk
- Samsung SH-S183A SATA schwarz (im externen Gehäuse)
- Gehäuse
- be quiet! Silent Base 802 schwarz
- Netzteil
- be quiet! Straight Power 11 Platinum 550W
- Tastatur
- Logitech G613 Lightspeed
- Maus
- Logitech M510
- Betriebssystem
- Ubuntu Linux 22.04
- Webbrowser
- Vivaldi
- Internetanbindung
-
▼100 MBit
▲40 MBit
Probiers spaßeshalber einfach mal. Ich nutze MySQL statt SQLite und deshalb etwas andere Klassen, aber mit denen gehts. Die Chancen stehen also nicht schlecht. Das müsste dann wohl so aussehen: sqlRead.GetValue("Spalte1").Aber ist es nicht möglich bei sqlRead.GetValue(0) anstatt die indexnummer der spalte den namen der spalte anzugeben?
lord_fritte
Vice Admiral Special
Nee dann gibt er einen Fehler das er das nicht zum Integer Konvertieren kann. Ich habe es jetzt einfach mit einer Funktion und einer Case-Anwendung gemacht.
MagicAndre1981
Vice Admiral Special
- Mitglied seit
- 05.09.2005
- Beiträge
- 674
- Renomée
- 10
- Standort
- Nordhausen
- Mein Laptop
- FSC Amilo 1424
- Prozessor
- AMD AthlonXP 2400+@2,2GHz
- Mainboard
- ASUS A7V600
- Speicher
- 1GB PC3200 MDT
- Grafikprozessor
- ATI Radeon 9500Pro@350MHz Chip- und 300MHz Speichertakt
- Display
- 19" CRT
- HDD
- 2*120GB Maxtor IDE
- Optisches Laufwerk
- PIONEER DVD 120-S (DVD-ROM)
- Soundkarte
- Creative Soundblaster Live! 5.1
- Netzteil
- 350W Enermax
- Betriebssystem
- WindowsXP Prof. SP2
btw, gib deine benutzen Ressourcen mit Dispose wieder frei, sonst hast du Speicherlücken.
- Mitglied seit
- 16.11.2001
- Beiträge
- 21.665
- Renomée
- 1.249
- Standort
- München
- Aktuelle Projekte
- World Community Grid
- Lieblingsprojekt
- Folding@Home
- Meine Systeme
- AMD Ryzen 9 5950X
- BOINC-Statistiken
- Folding@Home-Statistiken
- Prozessor
- AMD Ryzen 9 5950X
- Mainboard
- ASUS TUF Gaming X570-Pro [WI-FI]
- Kühlung
- be quiet! Shadow Rock 3
- Speicher
- 4x 16GB DDR4-3200 Corsair Vengeance LPX
- Grafikprozessor
- ASRock Radeon RX 550 Phantom Gaming Aktiv 2GB
- Display
- LG 27UL850-W, 27"
- SSD
- Samsung 980 PRO 2TB, Samsung 840 EVO 500GB
- HDD
- Seagate Barracuda 7200.14 3TB SATA3
- Optisches Laufwerk
- Samsung SH-S183A SATA schwarz (im externen Gehäuse)
- Gehäuse
- be quiet! Silent Base 802 schwarz
- Netzteil
- be quiet! Straight Power 11 Platinum 550W
- Tastatur
- Logitech G613 Lightspeed
- Maus
- Logitech M510
- Betriebssystem
- Ubuntu Linux 22.04
- Webbrowser
- Vivaldi
- Internetanbindung
-
▼100 MBit
▲40 MBit
Sicher? Dispose ist doch eigentlich nur dazu da, der Garbage Collection unter die Arme zu greifen. Sprich: Man kann Dispose aufrufen, um die Ressourcen sofort freizugeben, aber wenn man es nicht tut, tuts später eben die Garbage Collection.btw, gib deine benutzen Ressourcen mit Dispose wieder frei, sonst hast du Speicherlücken.
MagicAndre1981
Vice Admiral Special
- Mitglied seit
- 05.09.2005
- Beiträge
- 674
- Renomée
- 10
- Standort
- Nordhausen
- Mein Laptop
- FSC Amilo 1424
- Prozessor
- AMD AthlonXP 2400+@2,2GHz
- Mainboard
- ASUS A7V600
- Speicher
- 1GB PC3200 MDT
- Grafikprozessor
- ATI Radeon 9500Pro@350MHz Chip- und 300MHz Speichertakt
- Display
- 19" CRT
- HDD
- 2*120GB Maxtor IDE
- Optisches Laufwerk
- PIONEER DVD 120-S (DVD-ROM)
- Soundkarte
- Creative Soundblaster Live! 5.1
- Netzteil
- 350W Enermax
- Betriebssystem
- WindowsXP Prof. SP2
nope, der GC ruft nie Dispose auf, das muss man selber machen, es sei denn man packt es in den Finalizer, aber das ist Mist, da man nie sagen kann wann und ob der aufgerufen wird. Und unmanged Res. sind kostbar, also immer mit Dispose wieder freigeben.
unter C# nimmst du einfach
unter C# nimmst du einfach
Code:
using(SQLiteConnection sqlConnect = new SQLiteConnection("Data Source=Database.db3"))
{
}<- Am Ende wird Dispose automatisch aufgerufen und du musst dir keinen Kopf machen, aber der VB Mist kennt das ja nicht, also muss man selber ran :]
lord_fritte
Vice Admiral Special
Warum funktionieren Boolean werte aus der Datenbank nicht?
Das erste Feld was ich habe, hat den Typ Boolean
Und egal was als Wert drin steht es kommt immer die Message box mit Nein.
Das erste Feld was ich habe, hat den Typ Boolean
Code:
While (sqlRead.Read())
If sqlRead(0) Then
checkHideInTray.Checked = True
MessageBox.Show("Ja")
Else
checkHideInTray.Checked = False
MessageBox.Show("Nein")
End If
End While
- Mitglied seit
- 16.11.2001
- Beiträge
- 21.665
- Renomée
- 1.249
- Standort
- München
- Aktuelle Projekte
- World Community Grid
- Lieblingsprojekt
- Folding@Home
- Meine Systeme
- AMD Ryzen 9 5950X
- BOINC-Statistiken
- Folding@Home-Statistiken
- Prozessor
- AMD Ryzen 9 5950X
- Mainboard
- ASUS TUF Gaming X570-Pro [WI-FI]
- Kühlung
- be quiet! Shadow Rock 3
- Speicher
- 4x 16GB DDR4-3200 Corsair Vengeance LPX
- Grafikprozessor
- ASRock Radeon RX 550 Phantom Gaming Aktiv 2GB
- Display
- LG 27UL850-W, 27"
- SSD
- Samsung 980 PRO 2TB, Samsung 840 EVO 500GB
- HDD
- Seagate Barracuda 7200.14 3TB SATA3
- Optisches Laufwerk
- Samsung SH-S183A SATA schwarz (im externen Gehäuse)
- Gehäuse
- be quiet! Silent Base 802 schwarz
- Netzteil
- be quiet! Straight Power 11 Platinum 550W
- Tastatur
- Logitech G613 Lightspeed
- Maus
- Logitech M510
- Betriebssystem
- Ubuntu Linux 22.04
- Webbrowser
- Vivaldi
- Internetanbindung
-
▼100 MBit
▲40 MBit
Hmm, okay, und wie verhält sich das bei folgendem Code?nope, der GC ruft nie Dispose auf, das muss man selber machen, es sei denn man packt es in den Finalizer, aber das ist Mist, da man nie sagen kann wann und ob der aufgerufen wird. Und unmanged Res. sind kostbar, also immer mit Dispose wieder freigeben.
Code:
// command ist ein MySqlCommand-Objekt
using(MySqlDataReader reader = command.ExecuteReader()) {
...
// anderer Command
reader = command.ExecuteReader();
...
}
/edit: BTW, folgendes steht im MSDN:
The following rules outline the usage guidelines for the Dispose method
(...)
Do not assume that Dispose will be called. Unmanaged resources owned by a type should also be released in a Finalize method in the event that Dispose is not called.
(...)
- Mitglied seit
- 16.11.2001
- Beiträge
- 21.665
- Renomée
- 1.249
- Standort
- München
- Aktuelle Projekte
- World Community Grid
- Lieblingsprojekt
- Folding@Home
- Meine Systeme
- AMD Ryzen 9 5950X
- BOINC-Statistiken
- Folding@Home-Statistiken
- Prozessor
- AMD Ryzen 9 5950X
- Mainboard
- ASUS TUF Gaming X570-Pro [WI-FI]
- Kühlung
- be quiet! Shadow Rock 3
- Speicher
- 4x 16GB DDR4-3200 Corsair Vengeance LPX
- Grafikprozessor
- ASRock Radeon RX 550 Phantom Gaming Aktiv 2GB
- Display
- LG 27UL850-W, 27"
- SSD
- Samsung 980 PRO 2TB, Samsung 840 EVO 500GB
- HDD
- Seagate Barracuda 7200.14 3TB SATA3
- Optisches Laufwerk
- Samsung SH-S183A SATA schwarz (im externen Gehäuse)
- Gehäuse
- be quiet! Silent Base 802 schwarz
- Netzteil
- be quiet! Straight Power 11 Platinum 550W
- Tastatur
- Logitech G613 Lightspeed
- Maus
- Logitech M510
- Betriebssystem
- Ubuntu Linux 22.04
- Webbrowser
- Vivaldi
- Internetanbindung
-
▼100 MBit
▲40 MBit
VB2005 kennt Usingaber der VB Mist kennt das ja nicht
lord_fritte
Vice Admiral Special
Ich finde Visual Basic eigentlich ganz OK, ich habe damals mal mit C++ angefangen aber wo ich Windows Fenster Programmieren wollte habe ich es sein lassen.
MagicAndre1981
Vice Admiral Special
- Mitglied seit
- 05.09.2005
- Beiträge
- 674
- Renomée
- 10
- Standort
- Nordhausen
- Mein Laptop
- FSC Amilo 1424
- Prozessor
- AMD AthlonXP 2400+@2,2GHz
- Mainboard
- ASUS A7V600
- Speicher
- 1GB PC3200 MDT
- Grafikprozessor
- ATI Radeon 9500Pro@350MHz Chip- und 300MHz Speichertakt
- Display
- 19" CRT
- HDD
- 2*120GB Maxtor IDE
- Optisches Laufwerk
- PIONEER DVD 120-S (DVD-ROM)
- Soundkarte
- Creative Soundblaster Live! 5.1
- Netzteil
- 350W Enermax
- Betriebssystem
- WindowsXP Prof. SP2
Hmm, okay, und wie verhält sich das bei folgendem Code?
Müsste ich da reader.Dispose() aufrufen bevor ich die Variable wiederverwende?Code:// command ist ein MySqlCommand-Objekt using(MySqlDataReader reader = command.ExecuteReader()) { ... // anderer Command reader = command.ExecuteReader(); ... }
nöö, macht doch using automatisch. Das ist ja der Sinn der using Anweisung.
- Mitglied seit
- 16.11.2001
- Beiträge
- 21.665
- Renomée
- 1.249
- Standort
- München
- Aktuelle Projekte
- World Community Grid
- Lieblingsprojekt
- Folding@Home
- Meine Systeme
- AMD Ryzen 9 5950X
- BOINC-Statistiken
- Folding@Home-Statistiken
- Prozessor
- AMD Ryzen 9 5950X
- Mainboard
- ASUS TUF Gaming X570-Pro [WI-FI]
- Kühlung
- be quiet! Shadow Rock 3
- Speicher
- 4x 16GB DDR4-3200 Corsair Vengeance LPX
- Grafikprozessor
- ASRock Radeon RX 550 Phantom Gaming Aktiv 2GB
- Display
- LG 27UL850-W, 27"
- SSD
- Samsung 980 PRO 2TB, Samsung 840 EVO 500GB
- HDD
- Seagate Barracuda 7200.14 3TB SATA3
- Optisches Laufwerk
- Samsung SH-S183A SATA schwarz (im externen Gehäuse)
- Gehäuse
- be quiet! Silent Base 802 schwarz
- Netzteil
- be quiet! Straight Power 11 Platinum 550W
- Tastatur
- Logitech G613 Lightspeed
- Maus
- Logitech M510
- Betriebssystem
- Ubuntu Linux 22.04
- Webbrowser
- Vivaldi
- Internetanbindung
-
▼100 MBit
▲40 MBit
Ich glaube, Du hast mich missverstanden.
Ich tendiere dazu, dass ich Dispose explizit aufrufen oder eben 2 using-Blöcke nutzen muss, aber vll. irre ich mich ja.
Using ruft Dispose auf, wenn der Block irgendwie (per Exception oder regulär) verlassen wird. Ich verwende aber die Variable innerhalb des using-Blocks wieder, d. h. ich setze sie innerhalb des using-Blocks auf eine neue Referenz. Meine Frage ist nun, ob ich vor diesem Neusetzen explizit Dispose aufrufen muss. Der using-Block wird da ja nicht verlassen.nöö, macht doch using automatisch. Das ist ja der Sinn der using Anweisung.
Ich tendiere dazu, dass ich Dispose explizit aufrufen oder eben 2 using-Blöcke nutzen muss, aber vll. irre ich mich ja.
MagicAndre1981
Vice Admiral Special
- Mitglied seit
- 05.09.2005
- Beiträge
- 674
- Renomée
- 10
- Standort
- Nordhausen
- Mein Laptop
- FSC Amilo 1424
- Prozessor
- AMD AthlonXP 2400+@2,2GHz
- Mainboard
- ASUS A7V600
- Speicher
- 1GB PC3200 MDT
- Grafikprozessor
- ATI Radeon 9500Pro@350MHz Chip- und 300MHz Speichertakt
- Display
- 19" CRT
- HDD
- 2*120GB Maxtor IDE
- Optisches Laufwerk
- PIONEER DVD 120-S (DVD-ROM)
- Soundkarte
- Creative Soundblaster Live! 5.1
- Netzteil
- 350W Enermax
- Betriebssystem
- WindowsXP Prof. SP2
Meine Frage ist nun, ob ich vor diesem Neusetzen explizit Dispose aufrufen muss.
nee brauchst du nicht.
Ähnliche Themen
- Antworten
- 0
- Aufrufe
- 443
- Antworten
- 1
- Aufrufe
- 472
- Antworten
- 1
- Aufrufe
- 545
- Antworten
- 0
- Aufrufe
- 435