webForumDet fria alternativet

Fel datatyp

10 svar · 337 visningar · startad av m_soderlund

m_soderlundMedlem sedan sep. 20026 425 inlägg
#1

Jag har fyra variabler som får sina värden från några fält i ett formulär. För att kunna ta emot informationen från formulärfälten måste jag använda mig av findcontrol() och mycket riktigt hittas min data. När jag dock ska sätta in information i min databas så får jag ett felmeddelande, "Typblandningsfel i villkorsuttryck", vilket ju betyder att jag har fel datatyp jämfört med den som mina fält i databasen kräver. Fälten i databasen vill ha textdata, inget annat.
Hur ska jag gå tillväga för att det hela ska bli rätt?

De fyra variablerna:

categoryTxt = fixt(cType(e.item.findcontrol("art_category"),htmlselect).Value)
titleTxt = fixt(cType(e.item.findcontrol("art_title"),htmlinputtext).Value)
introductionTxt = fixt(cType(e.item.findcontrol("art_introduction"),textbox).Text)
textTxt = fixt(cType(e.item.findcontrol("art_text"),textbox).Text)

SQL-frågan som jag exekverar:

SQL = "UPDATE tbl_articles SET category='" & categoryTxt & "',title='" & titleTxt & "'" & _
                ",introduction='" & introductionTxt & "',art_text='" & textTxt & "'" & _
                " WHERE id=" & cType(e.item.findcontrol("art_id"),label).Text

Märk väl att det inte blir något felmeddelande vad gäller WHERE-klausulen i SQL-frågan. id är en räknare och är även primärnyckel.

m_soderlundMedlem sedan sep. 20026 425 inlägg
#2

Skriver jag

categoryTxt = fixt(cType(e.item.findcontrol("art_category"),htmlselect).[b]SelectedIndex[/b])

i stället så genereras inget felmeddelande, men när jag ska uppdatera i databasen så hämtas inte värdena från mitt formulär - utan uppdateras med samma värden som förut.

JonMedlem sedan juli 20011 304 inlägg
#3

Hur ser det ut om du skriver ut sql-frågan innan du kör den?

m_soderlundMedlem sedan sep. 20026 425 inlägg
#4

Den uppdaterar i databasen med exakt samma värden som tidigare. Dvs den tar inte in information från formulärfälten.. :l

Jag tror att jag är lösningen på spåret, dock har jag ingen möjlighet att arbeta med scriptet förrän på fredag, tidigast.

PaceMedlem sedan juni 20019 024 inlägg
#5

m_soderlund skrev:

Den uppdaterar i databasen med exakt samma värden som tidigare. Dvs den tar inte in information från formulärfälten.. :l

Det låter som att DataBind() körs när du gör en postback.

m_soderlundMedlem sedan sep. 20026 425 inlägg
#6

Pace skrev:

Det låter som att DataBind() körs när du gör en postback.

Jo, så är det nog. Och om jag inte kör postback så visas inte redigeringsläget när man trycker på redigera-knappen. :l

JonMedlem sedan juli 20011 304 inlägg
#7

posta lite kod!

PaceMedlem sedan juni 20019 024 inlägg
#8

Då har du ett annat problem. Det kan vara att viewstate är satt till false exempelvis.

m_soderlundMedlem sedan sep. 20026 425 inlägg
#9

Jag har typ exakt likadan kod som den i denna artikel: ASP.NET Data Controls Part 3: DataList

Den enda koden som inte är densamma är att jag inte kollar postback alls. Om jag kör koden nedan så kommer inte redigeringsläget fram när jag klickar på redigera-länken

        If Not IsPostBack Then
            LoadData()
        End If

Som skrivet kan jag inte visa mer kod förrän tidigast på fredag. Jag är inte hemma och kommer inte hem förrän på fredag.

JonMedlem sedan juli 20011 304 inlägg
#10

Den borde fyllas ändå eftersom du har:

Sub Edit_Command(ByVal sender As Object, _
	                 ByVal e As DataListCommandEventArgs)
        ' to rebind the DataList to the data source to 
		' refresh the control.
        DataList1.EditItemIndex = e.Item.ItemIndex
        LoadData()
    End Sub

Är du säker på att den körs?

m_soderlundMedlem sedan sep. 20026 425 inlägg
#11

Jag har löst problemet, och det var postback-relaterat. Det gjordes en databind() en gång - när inte postback inträffade. När postback inträffade gjordes ingen mer databind() och då var det inte så konstigt att jag inte kunde uppdatera. Det löste jag genom att låta min procedur som binder datan köras i proceduren för att utföra uppdateringen av en artikel. I page_load kollade jag om sidan gjorde postback eller inte.

'page_load
sub page_load(sender as object, e as eventargs)

    if not ispostback then

        dim catId as string = fixt(request.querystring("CatId"))

        if catId=3 then
            articles_binddata()
        end if

    end if

end sub

Så här ser proceduren för att binda datan ut:

'ladda lista med artiklar
sub articles_binddata()

    dim catId as string = fixt(Request.Querystring("CatId"))
    dim subId as string = fixt(Request.Querystring("SubId"))
    dim artId as string = fixt(Request.Querystring("ArtId"))
    dim SQL as string

    'visa alla artikelposter
    SQL = "SELECT id,category,title,introduction,art_text FROM tbl_articles ORDER BY id DESC"      

    dim Cn as new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;data source=" & Server.MapPath("../dbms/db_articles.mdb"))
    dim Cm as new OleDbCommand(SQL, Cn)
    Cm.Connection.Open()

        adm_articles.DataSource = Cm.ExecuteReader()
        adm_articles.DataBind()

    Cm.Dispose()
    Cn.Close()

end sub

Proceduren för att uppdatera ser nu ut så här:

'uppdatera artikel/utför redigering
sub adm_articles_UpdateCommand(obj as object, e as DatalistCommandEventargs)

    dim categoryTxt as integer
    dim titleTxt, introductionTxt, textTxt, dtTxt, writerTxt, SQL as string

    categoryTxt = cType(e.item.findcontrol("art_category"),htmlselect).selectedindex-1
    titleTxt = fixt(cType(e.item.findcontrol("art_title"),htmlinputtext).value)
    introductionTxt = fixt(cType(e.item.findcontrol("art_introduction"),textbox).text)
    textTxt = fixt(cType(e.item.findcontrol("art_text"),textbox).text)

    SQL = "UPDATE tbl_articles SET category=" & categoryTxt & ",title='" & titleTxt & "'" & _
          ",introduction='" & introductionTxt & "',art_text='" & textTxt & "'" & _
          " WHERE id=" & adm_articles.DataKeys(e.Item.ItemIndex)

    dim Cn as new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;data source=" & Server.MapPath("../dbms/db_articles.mdb"))
    dim Cm as new OleDbCommand(SQL,Cn)

        Cm.Connection.Open()
        Cm.ExecuteNonQuery()
 
        Cm.Dispose()
        Cn.Close
    
    [b]articles_binddata()[/b]

end sub

Ni ser också hur minga variabler tar emot värden korrekt. Exempelvis genom

cType(e.item.findcontrol("art_introduction",textbox).text)

Läs mer här: http://datawebcontrols.com/faqs/Editing/EditedValuesNotSaved.shtml

Tackar för svaren som ledde mig rätt! :bire

132 ms totalt · 3 externa anrop · v20260731065814-full.37765c92
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)