Avatar billede Slettet bruger
25. maj 2004 - 10:37 Der er 6 kommentarer og
1 løsning

vælge value fra DropDownBox og opdater MS Access db

Hej
Jeg har bundet felter fra en table i en access db på følgende måde:

sqlCmd_1 = New OleDbCommand( "SELECT * FROM Type", DbConn )
DataReader_1 = sqlCmd_1.ExecuteReader()
dropType.DataSource = DataReader_1
dropType.DataTextField = "Type"
dropType.DataValueField = "Id"
dropType.Databind()
DataReader_1.Close

Disse bliver så vist i en dropdown-list, med Id = "dropType".

Til hver "type" i access db er knyttet et ID. Dette ID gemmer jeg i en anden tabel i samme db.

Men hvordan gør jeg når jeg vil opdatere min db? Jeg opdatere ved at køre en sub-rutine, der aktiveres af en knap. Men det felt, der skal indeholde ID'et der er knyttet til typen - hvordan vælger jeg det?

Her er lidt kode fra den sub-rutine som opdatere min db:

SqlCmd = New OleDbCommand( sqlUpdate, DbConn )
sqlCmd.Parameters.add( "@type", dropType.SelectedItem.Value )
sqlCmd.Parameters.add( "@Beskrivelse", txtBeskrivelse.Text )

Håber der er en der kan hjælpe - på forhånd tak.
Avatar billede jakobg Nybegynder
25. maj 2004 - 13:39 #1
Spørgsmål:
Hvad virker indtil nu?
Får du trukket data ud og vist dem? Hvis ja, i hvad (datagrid, repeater)?
Får du fyldt data i dropdown'en og valgt det rigtige element?

Prøv (igen) at erstatte * med kolonnenavnene i din SELECT statement, den skal vi lige kigge lidt på.
Avatar billede Slettet bruger
25. maj 2004 - 13:53 #2
Det hele virker, bort set fra at jeg ikke for værdien for type (fra table "type") ind i type (table "events").

Jeg læser altså fra to tabeller i samme db, det gør jeg med to reader (reader og reader_1).

Kode-uddrag-1 (her henter jeg det, der skal vises):
        Dim IDX As Integer
        IDX = Request.QueryString("ID")
       
        Dim sId, sEventDate, sTitle, sAnsvarlig_FollowUp, sBeskrivelse, sAfdeling, sHandling_1, sHandling_2, sHandling_3, sAnsvarlig_Handling_1, sAnsvarlig_Handling_2, sAnsvarlig_Handling_3, sDato_Oprettelse, sType As String
        Dim bAfsluttet, bStatus As Boolean
                       
        Dim DbConn As OleDbConnection
        Dim SqlCmd As OleDbCommand
        Dim sqlCmd_1 As OleDbCommand
        Dim DataReader As OleDbDataReader
        Dim DataReader_1 As OleDbDataReader
       
        DbConn = New OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=c:\inetpub\wwwroot\database\calendar.mdb")
        SqlCmd = New OleDbCommand( "SELECT e.Id, e.EventDate, e.Title, e.Ansvarlig_FollowUp, e.Beskrivelse, e.Comment, e.Afdeling, e.Handling_1, e.Handling_2, e.Handling_3, e.Ansvarlig_Handling_1, e.Ansvarlig_Handling_2, e.Ansvarlig_Handling_3, e.Afsluttet, e.Status, e.Dato_oprettelse, Type.Type FROM Events As e INNER JOIN Type ON e.Type=Type.ID WHERE e.ID =" & IDX, DbConn )
        DbConn.Open()
       
        sqlCmd_1 = New OleDbCommand( "SELECT * FROM Type", DbConn )
        DataReader_1 = sqlCmd_1.ExecuteReader()
        dropType.DataSource = DataReader_1
        dropType.DataTextField = "Type"
        dropType.DataValueField = "Id"
        dropType.Databind()
        DataReader_1.Close
       
        DataReader = SqlCmd.ExecuteReader()
        While DataReader.Read()
            sEventDate = DataReader(1)
            sTitle = Datareader(2)
            sType = Datareader(16)
            sAnsvarlig_FollowUp = DataReader(3)
            sBeskrivelse = DataReader(4)
            sAfdeling = Datareader(6)

Kode-uddrag-2: (Her opdatere jeg db):

DbConn = New OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=c:\inetpub\wwwroot\database\calendar.mdb")
    sqlUpdate = "UPDATE Events SET EventDate = @EventDate, Title = @Title, Ansvarlig_FollowUp = @Ansvarlig_FollowUp, Type = @Type, Beskrivelse = @Beskrivelse, Afdeling = @Afdeling, Handling_1 = @Handling_1, Handling_2 = @Handling_2, Handling_3 = @Handling_3, Ansvarlig_Handling_1 = @Ansvarlig_Handling_1, Ansvarlig_Handling_2 = @Ansvarlig_Handling_2, Ansvarlig_Handling_3 = @Ansvarlig_Handling_3, Dato_Oprettelse = @Dato_Oprettelse, Afsluttet = @Afsluttet, Status = @Status WHERE ID = " & IDX
   
    SqlCmd = New OleDbCommand( sqlUpdate, DbConn )
    sqlCmd.Parameters.add( "@EventDate", txtEventDate.Text )
    sqlCmd.Parameters.add( "@Title", txtTitle.Text )
    sqlCmd.Parameters.add( "@Ansvarlig_FollowUp", txtAnsvarlig_FollowUp.Text )
    sqlCmd.Parameters.add( "@type") = dropType.SelectedItem.value)
    sqlCmd.Parameters.add( "@Beskrivelse", txtBeskrivelse.Text )
    sqlCmd.Parameters.add( "@Afdeling", txtAfdeling.Text )
    sqlCmd.Parameters.add( "@Handling_1", txtHandling_1.Text )
    sqlCmd.Parameters.add( "@Handling_2", txtHandling_2.Text )
    sqlCmd.Parameters.add( "@Handling_3", txtHandling_3.Text )
    sqlCmd.Parameters.add( "@Ansvarlig_Handling_1", txtAnsvarlig_Handling_1.Text )
    sqlCmd.Parameters.add( "@Ansvarlig_Handling_2", txtAnsvarlig_Handling_2.Text )
    sqlCmd.Parameters.add( "@Ansvarlig_Handling_3", txtAnsvarlig_Handling_3.Text )
    sqlCmd.Parameters.add( "@Dato_Oprettelse", txtDato_Oprettelse.Text )
    sqlCmd.Parameters.add( "@Afsluttet", chkAfsluttet.checked )
    sqlCmd.Parameters.add( "@Status", chkStatus.checked )

    DbConn.Open()
    sqlCmd.ExecuteNonQuery()
    DbConn.Close()
Avatar billede Slettet bruger
25. maj 2004 - 13:55 #3
Hov - det der vælges med * er blot id, type
Avatar billede Slettet bruger
25. maj 2004 - 13:55 #4
ID er i access db et Autonummererings-felt
Avatar billede jakobg Nybegynder
25. maj 2004 - 14:16 #5
Det ser da fint ud? Hvad er det der ikke virker? Sker der ingenting når du kører din UPDATE statement? Brager det hele ned med en fejl?

Dog er
sqlCmd.Parameters.add( "@type") = dropType.SelectedItem.value)
noget vrøvl, der burde nok stå
sqlCmd.Parameters.add( "@type", dropType.SelectedValue)
(en slut-parentes for meget, og brug SelectedValue istedet)
Avatar billede Slettet bruger
25. maj 2004 - 14:22 #6
Tak - det var bare det der skulle til :-)
Sender du et svar?
Avatar billede jakobg Nybegynder
25. maj 2004 - 14:28 #7
Tadaaa :)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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