webForumDet fria alternativet

Problem med uppdate

10 svar · 311 visningar · startad av saw

sawMedlem sedan mars 20011 883 inlägg
#1

Nu är det tydligen dags för en runda igen.
Jag har problem med denna uppdaten:

   Set mittRS1 = minDB.OpenRecordset("SELECT
 t_SongTitlar.Arrno, t_SongTitlar.songtitel, t_placering.Datum 
FROM t_SongTitlar INNER JOIN t_placering ON t_SongTitlar.Arrno 
= t_placering.ArrNo WHERE songtitel = '" & List3.Text & "'   ORDER
 BY songtitel", dbOpenDynaset)
   strID = mittRS1.Fields!arrno

    SQL = "Update t_placering "
   SQL = SQL & " Set Datum = #" & strDatum & "#, Placering =" & 
strPlacSv & ",omr_id = 1 WHERE ArrNo =" & strID & " AND datum 
= #" & List4.Text & "#"
      
    Debug.Print SQL
   minDB.Execute SQL

Om jag låter debug printa SQL:em så ser det ut så här:

Update t_placering  Set Datum = #2002-04-13#, Placering =17
 WHERE ArrNo =41 AND datum = #2002-04-13#

Ändå så får jag detta felmedelande:
Runtime Error 3464
Data type missmatch in criteria expression

Det låter ju som om det vore fel på någon datatyp, men datum är datum/tid, placering är tal strId är text
Någon som har en god idé
:q

SPiNMedlem sedan mars 20005 832 inlägg
#2

Du försöker uppdatera fältet Datum, men du har ändå med det fältet i WHERE-satsen? Verkar skumt att du vill uppdatera datumet till 2002-04-13 på ett fält där datumet redan är det. Mycket möjligt att det är det som ställer till det också.

sawMedlem sedan mars 20011 883 inlägg
#3

Nix, jag testade med att ta bort datumet i uppdateringen, men samma felmedelande.

sawMedlem sedan mars 20011 883 inlägg
#4

JAg märkte ett fel som jag hade på uppdaten:

SQL = "Update t_placering "
   SQL = SQL & " Set Datum = #" & strDatum & "#, Placering =" & 
strPlacSv & " WHERE ArrNo =" & strID & " AND datum = #" & 
List4.Text & "# AND omr_id = 1"

Jag måste ju tala om vilket område som det gäller.

Tyvärr så hjälpte inte detta, jag har fortfarande samma fel
:(

sawMedlem sedan mars 20011 883 inlägg
#5

Löst:
WHERE ArrNo ='" & strID & " '
Så enkelt, och så mycket tid för att kolla ...

sawMedlem sedan mars 20011 883 inlägg
#6

Jag har ändå ett problem.
Om vi utgår ifrån att det inte ligger någon uppgift i databasen om Världen, men jag vill uppdatera den. Alltså strPlacVrld = Text3(3).text
Då blir ju SQL:en

        If Not IsNull(strPlacVrld) Or Len(strPlacVrld) > 0 Then
            SQL = "Update t_placering "
            SQL = SQL & " Set Datum = #" & strDatum & "#, Placering
 =" & strPlacVrld & " WHERE ArrNo ='" & strID & "' AND datum = 
#" & List4.Text & "# AND omr_id = 3"
           minDB.Execute SQL
           Debug.Print SQL
        End If

Jag får inget Error, men den uppdatera inte.

@ndersMedlem sedan juni 200026 914 inlägg
#7

Hur ser den färdiga SQL-frågan ut då?

sawMedlem sedan mars 20011 883 inlägg
#8

Jag har nog tänkt lite galet.
Jag glömde bort att för varje område så är det en ny post.
Oråde har då följande
1 = Sverige
2 = Europa
3 = Världen

Att jag inte kan uppdatera en tom post säger ju sig självt :r .
Vad jag nu försöker med är att i den SQL:en kolla om placering 3 är tomt eller inte.
Så här:

    If Not IsNull(strPlacEu) Or Len(strPlacEu) > 0 Then
        SQL = "Update t_placering "
        SQL = SQL & " Set Datum = #" & strDatum & "#, Placering 
=" & strPlacEu & " WHERE ArrNo ='" & strID & "' AND datum = #" 
& List4.Text & "# AND omr_id = 2"
        minDB.Execute SQL
         End If
        If Not IsNull(strPlacVrld) Or Len(strPlacVrld) > 0 Then
            Set mittRS1 = minDB.OpenRecordset("SELECT 
t_Placering.ArrNo, t_Placering.Datum, t_Placering.Placering " & _
            " FROM t_Placering WHERE ArrNo ='" & strID & "' AND
 datum = #" & List4.Text & "# AND omr_id = 3")
                
                If mittRS1.EOF Then
                  SQL = "INSERT INTO t_placering(Datum,Omr_Id,Placering,ArrNo) VALUES(#" & strDatum & "#,3,'"
 & strPlacVrld & "', '" & strID & "'"
                  
                Else
                   
                    SQL = "Update t_placering "
                   SQL = SQL & " Set Datum = #" & strDatum & "#, 
Placering =" & strPlacVrld & " WHERE ArrNo ='" & strID & "' AND 
datum = #" & List4.Text & "# AND omr_id = 3"
                                   End If
            minDB.Execute SQL
        End If

Jag tror att jag är på rätt väg, men jag får ett syntax medelande:

RunTime Error 3134
Syntax ERROR in INSERT INTO statement.
Jag tror att det är där jag vill ha in omr_Id vars värde skall vara 3
Vad tror ni?

@ndersMedlem sedan juni 200026 914 inlägg
#9

Du har glömt en slutparentes i din insertsats:

If mittRS1.EOF Then
                  SQL = "INSERT INTO t_placering(Datum,Omr_Id,Placering,ArrNo) VALUES(#" & strDatum & "#,3,'"
 & strPlacVrld & "', '" & strID &[b] "')"[/b]

Mvh,

sawMedlem sedan mars 20011 883 inlägg
#10

Tack @nders, nu fungerade den biten.
Har nu bara ett(vad jag vet) problem kvar.
Om det har funnits en makering i i världen, och jag tar bort den och vill uppdatera, så försvinner värdet, men det ersätts av en nolla!!
Hur får jag bort det??
Jag tror att du förstår bätre om jag nu visar all kod för dig.

    If Not IsNull(strPlacEu) Or Len(strPlacEu) > 0 Then
        SQL = "Update t_placering "
        SQL = SQL & " Set Datum = #" & strDatum & "#, Placering 
=" & strPlacEu & " WHERE ArrNo ='" & strID & "' AND datum = #" & List4.Text & "# AND omr_id = 2"
        minDB.Execute SQL
    End If
        If Not IsNull(strPlacVrld) Or Len(strPlacVrld) > 0 Then
            Set mittRS1 = minDB.OpenRecordset("SELECT 
t_Placering.ArrNo, t_Placering.Datum, t_Placering.Placering " & _
            " FROM t_Placering WHERE ArrNo ='" & strID & "' AND 
datum = #" & List4.Text & "# AND omr_id = 3")
                
                If mittRS1.EOF Then
                  SQL = "INSERT INTO t_placering
(Datum,Omr_Id,Placering,ArrNo) VALUES(#" & strDatum & "#,3,'" & strPlacVrld & "', '" & strID & "')"
                  
                ElseIf IsNull(strPlacVrld) Or Len(strPlacVrld) = 0 Then
                   SQL = "delete from t_placering WHERE ArrNo ='" & 
strID & "' AND datum = #" & List4.Text & "# AND omr_id = 3"
                Else
                   
                   SQL = "Update t_placering "
                   SQL = SQL & " Set Datum = #" & strDatum & "#, 
Placering =" & strPlacVrld & " WHERE ArrNo ='" & strID & "' AND 
datum = #" & List4.Text & "# AND omr_id = 3"
                End If
            minDB.Execute SQL
        End If

Jag är inte säker på att den kommer till delite, det är väll därför
som det blir en nolla?

sawMedlem sedan mars 20011 883 inlägg
#11

Efter en massa krabbande så har jag löst problemet med att köra en delite.

Genererad på 377 ms · cache AV · v20260730165559-full.f96bc7eb