Avatar billede jesperthomsen1980 Nybegynder
21. januar 2005 - 17:28 Der er 16 kommentarer og
1 løsning

Problemer med at indsætte i access database

Hej

Jeg har oprettet en databaseadgang, og fået det til at virke så jeg kan hente et objekt i tabellen.

Samtidig med har udviklingsværktøjet autogeneret en insert command, og er i tvivl om hvordan man denne skal bruge, og om man overhovedet kan bruge den...

Ser ud som nedenstående:

Me.OleDbInsertCommand1.CommandText = "INSERT INTO Kunder(ForNavn, EfterNavn, Adresse, PostNr, ByNavn, TelefonNr, MobilN" & _
        "r, Fax, Email, BetalingId) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
        Me.OleDbInsertCommand1.Connection = Me.OleDbConnection1
        Me.OleDbInsertCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("ForNavn", System.Data.OleDb.OleDbType.VarWChar, 50, "ForNavn"))
        Me.OleDbInsertCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("EfterNavn", System.Data.OleDb.OleDbType.VarWChar, 50, "EfterNavn"))
        Me.OleDbInsertCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Adresse", System.Data.OleDb.OleDbType.VarWChar, 50, "Adresse"))
        Me.OleDbInsertCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("PostNr", System.Data.OleDb.OleDbType.Integer, 0, "PostNr"))
        Me.OleDbInsertCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("ByNavn", System.Data.OleDb.OleDbType.VarWChar, 50, "ByNavn"))
        Me.OleDbInsertCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("TelefonNr", System.Data.OleDb.OleDbType.Integer, 0, "TelefonNr"))
        Me.OleDbInsertCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("MobilNr", System.Data.OleDb.OleDbType.Integer, 0, "MobilNr"))
        Me.OleDbInsertCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Fax", System.Data.OleDb.OleDbType.Integer, 0, "Fax"))
        Me.OleDbInsertCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Email", System.Data.OleDb.OleDbType.VarWChar, 50, "Email"))
        Me.OleDbInsertCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("BetalingId", System.Data.OleDb.OleDbType.Integer, 0, "BetalingId"))

Vil gerne benytte insert commandoen ved tryk på en knap - knappen er oprettet.

Håber nogen kan give mig et hint i den rigtige retning
Avatar billede arne_v Ekspert
21. januar 2005 - 17:55 #1
OleDbInsertCommand1.ExecuteNonQuery
Avatar billede arne_v Ekspert
21. januar 2005 - 17:56 #2
Er der OleDbInsertCommand1 tilknyttet din connection ?

Ellers først:

OleDbInsertCommand1.Connection = dinconnection
Avatar billede jesperthomsen1980 Nybegynder
21. januar 2005 - 18:00 #3
Jeg har godt nok prøvet lidt forskelligt, så jeg er lidt forvirret lige nu!

Det giver følgende fejlmeddelelse:

An unhandled exception of type 'System.InvalidOperationException' occurred in system.data.dll

Additional information: ExecuteNonQuery requires an open and available Connection. The connection's current state is Closed.
Avatar billede jesperthomsen1980 Nybegynder
21. januar 2005 - 18:03 #4
Jeg har prøvet at åbne forbindelse med Me.OleDbConnection1.Open()
Avatar billede arne_v Ekspert
21. januar 2005 - 18:05 #5
Hvis du har sat:

OleDbInsertCommand1.Connection = OleDbConnection1

og kaldt:

Me.OleDbConnection1.Open()

så bør det virke.
Avatar billede jesperthomsen1980 Nybegynder
21. januar 2005 - 18:09 #6
EFter jeg har åbnet den, så giver den følgende fejlmeddelse

An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in system.data.dll

Kan du bruge det til noget
Avatar billede jesperthomsen1980 Nybegynder
21. januar 2005 - 18:11 #7
Dette er hvad der er blevet autogenereret udenfor min knap

'OleDbInsertCommand1
        '
        Me.OleDbInsertCommand1.CommandText = "INSERT INTO Kunder(ForNavn, EfterNavn, Adresse, PostNr, ByNavn, TelefonNr, MobilN" & _
        "r, Fax, Email, BetalingId) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
        Me.OleDbInsertCommand1.Connection = Me.OleDbConnection1
        Me.OleDbInsertCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("ForNavn", System.Data.OleDb.OleDbType.VarWChar, 50, "ForNavn"))
        Me.OleDbInsertCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("EfterNavn", System.Data.OleDb.OleDbType.VarWChar, 50, "EfterNavn"))
        Me.OleDbInsertCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Adresse", System.Data.OleDb.OleDbType.VarWChar, 50, "Adresse"))
        Me.OleDbInsertCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("PostNr", System.Data.OleDb.OleDbType.Integer, 0, "PostNr"))
        Me.OleDbInsertCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("ByNavn", System.Data.OleDb.OleDbType.VarWChar, 50, "ByNavn"))
        Me.OleDbInsertCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("TelefonNr", System.Data.OleDb.OleDbType.Integer, 0, "TelefonNr"))
        Me.OleDbInsertCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("MobilNr", System.Data.OleDb.OleDbType.Integer, 0, "MobilNr"))
        Me.OleDbInsertCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Fax", System.Data.OleDb.OleDbType.Integer, 0, "Fax"))
        Me.OleDbInsertCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Email", System.Data.OleDb.OleDbType.VarWChar, 50, "Email"))
        Me.OleDbInsertCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("BetalingId", System.Data.OleDb.OleDbType.Integer, 0, "BetalingId"))
Avatar billede jesperthomsen1980 Nybegynder
21. januar 2005 - 18:13 #8
Og dette er hvor jeg vil indsætte

Private Sub OpretButton3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OpretButton3.Click

        Me.OleDbConnection1.Open()
        Me.OleDbInsertCommand1.Connection = OleDbConnection1
        Me.OleDbInsertCommand1.CommandText = "INSERT INTO Kunder(ForNavn, EfterNavn, Adresse, PostNr, ByNavn, TelefonNr, MobilN" & _
            "r, Fax, Email, BetalingId) VALUES ('Bent', 'Thomsen', 'Varde Landevej 40', 4534, 'Varde', 33333333, 33333333, 33333333, 'Bent@mail.dk',1 )"
        Me.OleDbInsertCommand1.Connection = Me.OleDbConnection1
        Me.OleDbInsertCommand1.ExecuteNonQuery()
    End Sub
Avatar billede arne_v Ekspert
21. januar 2005 - 18:33 #9
Hm - den fejl meddelse siger jo ikke meget.

Kan du udføre den INSERT direkte i Accees (eller hvilken database det nu er) ?
Avatar billede jesperthomsen1980 Nybegynder
21. januar 2005 - 19:45 #10
Ja det ser ud til at virke fint...

Jeg har første felt til autonummerering - Vil det ikke sige at den ikke skal med i SQL sætningen i programmet? Altså kundeId f.eks
Avatar billede arne_v Ekspert
21. januar 2005 - 19:59 #11
Et felt med autonummerering skal normalt ikke angives ved INSERT
Avatar billede jesperthomsen1980 Nybegynder
21. januar 2005 - 20:05 #12
nej jeg kan ikke lige se hvad fejlen er - jeg prøver mig lige frem og vender tilbage...
Avatar billede jesperthomsen1980 Nybegynder
21. januar 2005 - 20:54 #13
Jeg har nu fundet en fejl - når jeg bruger min sql sætning i access skal jeg stadig indsætte id nr selvom feltet står til autonummerering - Hvordan kan det hænge sammen?
Avatar billede arne_v Ekspert
21. januar 2005 - 21:06 #14
Det forstår jeg ikke.

Hvis man angiver feltnavnene, så bør et auto increment felt ikke skulle angives.
Avatar billede jesperthomsen1980 Nybegynder
22. januar 2005 - 09:24 #15
Jeg ved ikke hvad der har været galt...

Jeg er helt sikker på at problemet først var jeg ikke brugte kommandoen:
OleDbInsertCommand1.ExecuteNonQuery

Da jeg indsatte den virkede det godt nok heller ikke, men efter at have flyttet lidt rundt på noget kode virker det. Synes bare ikke det jeg har gjort burde gøre nogen forskel!
Jeg har indsat en .close() på den forbindelse jeg har åben...

Ved ikke hvad der har været galt, men hvis du lige vil smide et svar, så siger jeg tak for hjælpen!

VH Jesper
Avatar billede arne_v Ekspert
22. januar 2005 - 09:26 #16
Det vigtigste er at det virker nu
Avatar billede jesperthomsen1980 Nybegynder
22. januar 2005 - 09:27 #17
Det jo det - tak for det
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester