Ungebundenes Formular Werte in Access DB schreiben (Anfänger)

01/09/2009 - 16:33 von Ralf Dorn | Report spam
Hallo alle zusammen,

ich habe ein Problem mit dem Schreiben in eine Access DB. Ich bin zwar
umsteiger von VB6 aber das letzte Mal habe ich 2001 was geschrieben und ich
muss feststellen, dass sich doch mehr geàndert hat als ich dachte.

Ich habe ein Formular in dem ich nach Eingabe der Daten und auf Klick eines
Buttons folgenden Code hinterlegt habe:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim con As New OleDb.OleDbConnection
Dim cmd As New OleDb.OleDbCommand
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=H:\Programmieren\Programmierarbeiten\Verwaltung\Verwaltung_V10.mdb"
cmd.Connection = con
con.Open()
cmd.CommandText = "insert into Mietstellungen (change, geràteid,
name, vorname, telefon, abteilung, kostenstelle, email, lieferung,
rückgabetermin, bemerkung) values " _
& "(" _
& "'Me.M_Change', " _
& "'Me.M_GeràteID', " _
& "'Me.M_Name', " _
& "'Me.M_Vorname', " _
& "'Me.M_Telefon', " _
& "'Me.M_Abt', " _
& "'Me.M_Kost', " _
& "'Me.M_Email', " _
& "Me.M_Lieferdat, " _
& "Me.M_Rückdat, " _
& "'Me.M_Bemerkung')"
cmd.ExecuteNonQuery()
con.Close()
End Sub

Alle Felder bis auf M_Lieferdat und M_Rückdat sind Textfelder. Die zwei eben
genannten sind Datumsfelder. Ich bekomme immer die Meldung, dass ich zu
wenige Parameter übergeben hàtte.

Ich weiß nicht mehr weiter und sitze schon den ganzen tag vor dem Problem.
Wie kann ich denn einfach einen neuen Datensatz in die Mietstellungen Tabelle
schreiben?

Wenn ich die gesamte Tabelle einfach mit Drag and Drop ins Formular ziehe,
wird halt immer der erste Datensatz angezeigt. Gigt es denn das keine
Möglichkeit gleich auf einen neuen zu springen. Dann könnte ich eventuell ein
gebundenes Formular verwenden.

Einen schönen gruß

Ralf Dorn
 

Lesen sie die antworten

#1 Peter Götz
01/09/2009 - 18:00 | Warnen spam
Hallo Ralf,

ich habe ein Problem mit dem Schreiben in eine Access DB.
Ich bin zwar umsteiger von VB6 aber das letzte Mal habe ich
2001 was geschrieben und ich muss feststellen, dass sich doch
mehr geàndert hat als ich dachte.

Ich habe ein Formular in dem ich nach Eingabe der Daten und
auf Klick eines Buttons folgenden Code hinterlegt habe:

Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click
Dim con As New OleDb.OleDbConnection
Dim cmd As New OleDb.OleDbCommand

con.ConnectionString > "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=H:\Programmieren\Programmierarbeiten\
Verwaltung\Verwaltung_V10.mdb"

cmd.Connection = con
con.Open()

cmd.CommandText > "insert into Mietstellungen (change, geràteid,
name, vorname, telefon, abteilung,
kostenstelle, email, lieferung,
rückgabetermin, bemerkung) values " _
& "(" _
& "'Me.M_Change', " _
& "'Me.M_GeràteID', " _
& "'Me.M_Name', " _
& "'Me.M_Vorname', " _
& "'Me.M_Telefon', " _
& "'Me.M_Abt', " _
& "'Me.M_Kost', " _
& "'Me.M_Email', " _
& "Me.M_Lieferdat, " _
& "Me.M_Rückdat, " _
& "'Me.M_Bemerkung')"
cmd.ExecuteNonQuery()
con.Close()
End Sub



Bei Deinen Me.M_..." handelt es sich offenbar um irgendwelche
Variablen resp. Eigenschaften.
Wie und wo sind diese deklariert?
Du möchtest sicher die Inhalte (Werte) dieser Variablen als
Values Deinem Command-Objekt übergeben.
Mit

"'Me.M_Change', "

übergibst Du aber nicht den Inhalt der Variablen/Eigenschaft,
sondern den String "Me.M_Change', ".

Richtig wàre z.B.

"... Values ('" & Me.M_Change.ToString & "', ."

wenn es sich um ein Textfeld handelt.


Alle Felder bis auf M_Lieferdat und M_Rückdat sind
Textfelder.
Die zwei eben genannten sind Datumsfelder. Ich bekomme
immer die Meldung, dass ich zu wenige Parameter
übergeben hàtte.



Eigentlich übergibst Du gar keine Parameter, sondern
(s.oben) Strings wie z.B. "Me.M_Change" usw.

Ich weiß nicht mehr weiter und sitze schon den ganzen tag
vor dem Problem.
Wie kann ich denn einfach einen neuen Datensatz in die
Mietstellungen Tabelle schreiben?



Schau Dir mal die Beispiele unter

www.gssg.de -> Visual Basic -> VB.net
-> DB CommandObjekte / DataReader

und

www.gssg.de -> Visual Basic -> VB.net
-> OLEDB2 (Access.mdb)

an.
Im ersten Beispiel siehst Du wie mit konkreten
Command-Objekten gearbeitet werden kann.
Setze einen Programmstop in der Sub UpdateRecord im
Klassenmodul DataBaseClass.vb bei der Befehlszeile

Cmd.CommandText = strSQL

, starte dann das Programm und klicke auf "akt. Datensatz àndern".
Nachdem das Programm bis zur o.g. Befehlszeile gelaufen ist,
kannst Du dir den Inhalt von strSQL ansehen, der dann etwa so
aussieht:

Update Tabelle Set FText = ?, FNum = ?, Bearbeiter = ?, TStamp = ? Where ID

Jedes der Fragezeichen ist ein Platzhalter für einen Parameter, dem
ebenfalls in der Sub UpdateRecord() ein entsprechender Wert
zugewiesen wurde.
Diese Übergabe der Werte als Parameter, vermeidet Probleme, die
Du bekommst, wenn Werte für Felder <> Textfeld direkt im
CommandText als Strings dargestellt werden (z.B. Probleme mit
der richtigen Darstellung des Dezimaltrenners Zahlenwerten, oder
Probleme mit der Darstellung von Datumswerten als Strings).

Das zweite Beispiel arbeitet mit einem OleDbDataAdapter
zum Lesen, Schreiben und Löschen von Daten in einer
DB-Tabelle.

Da Du mit .net arbeitest, bist Du mit Deiner Frage hier in der
falschen Newsgroup gelandet. Hier geht es um DB-Themen
im Zusammenhang mit VBclassic (... VB6).
Für Fragen zu DB-Themen im Zusammenhang mit dem .net-
Framework nutze künftig bitte die NG

microsoft.public.de.german.entwickler.dotnet.datenbank

Mehr zu den verschiedenen Newsgroups findest Du unter

www.gssg.de - NewsGroups

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen