Avatar billede jmc Nybegynder
19. august 2003 - 10:14 Der er 39 kommentarer og
3 løsninger

SQL update eller insert

Kan man ikke gøre noget i retning af dette:

'forsøg :
' medlemmet eksistere i databasen
    if medlemsnr i databasen = medlemsnr i formen (at den findes, hvordan skriver jeg dette?)

                SQL =    "UPDATE Medlemmer set (medlemsnr,Firma,Adresse,Adresse2,vBy,Kontakt) " & _
                    " VALUES (" & medlemsnr & ",'" & firma & "','" & adresse & "','" & adresse2 & "','" & _
                    by & "','" & kontakt & "')"
                       
else ' et nyt medlem
                       
                SQL =    "INSERT INTO Medlemmer (medlemsnr,Firma,Adresse,Adresse2,vBy,Kontakt) " & _
                    " VALUES (" & medlemsnr & ",'" & firma & "','" & adresse & "','" & adresse2 & "','" & _
                    by & "','" & kontakt & "')"
end if           


Jeg har nok lige lidt brug for hjælp til dette, hvis du har tid.
Avatar billede erikjacobsen Ekspert
19. august 2003 - 10:15 #1
Du kan bruge en SELECT til at finde ud af om den er der allerede
Avatar billede ldanielsen Nybegynder
19. august 2003 - 10:18 #2
Update har en anden syntaks:

UPDATE Medlemmer set
Firma,Adresse = '" & firma & "',
Adresse2,vBy,Kontakt)=  '" & adresse & "'

osv ...

og husk!  WHERE medlemsnr = " & medlemsnr

ellers bliver alle records opdateret!
Avatar billede -thomas- Nybegynder
19. august 2003 - 10:18 #3
Jo, her kan du se princippet:

sql = "SELECT ID FROM MEDLEMMER WHERE MEDLEMSNUMMER = '" & Request.Form("Medlemsnummer") & "'"
Set rs = Conn.Execute(sql)

If Rs.Eof Then
  (Insert)
Else
  (Update)
End If

rs.Close
Set rs = Nothing
Avatar billede mm12010 Nybegynder
19. august 2003 - 10:33 #4
SQL = "UPDATE Medlemmer SET medlemsnr = " & medlemsnr & ", Firma = '" & firma & "', Adresse = '" & adresse & "', Adresse2 = '" & adresse2 & "', vBy = '" & by & ", Kontakt = '" & kontakt & "' WHERE medlemsnr = " & medlemsnr
Avatar billede jmc Nybegynder
20. august 2003 - 12:27 #5
Rs.Eof ??? hvad hedder mit recordset, kan du hjælpe.
her er min kode:

sub doFormatering
    'Response.Write Request.Form("fil")
    dim fil,f
   
    fil = Request.Form("fil")
    fil = Split(fil,vbCrLf)
   
    ' Initialisering af databaseconnection
    Set oConn = Server.CreateObject("ADODB.Connection")
    Set oRS = Server.CreateObject("ADODB.Recordset")
    c = Application("db")
   
    oConn.ConnectionString = c
    oConn.Open
   
   
    dim medlemsnr, firma, adresse, adresse2, by, kontakt, SQL
   
    for each f in fil
        t = split(f,""",""")
       
        if ubound (t) > -1 then
           
            medlemsnr        =    mid(t(0), 2)
            firma            =    re(t(1))
            adresse            =    re(t(2))
            adresse2        =    re(t(3))
            by                =    re(t(4))
            kontakt            =    re(t(5))
Avatar billede jmc Nybegynder
20. august 2003 - 12:52 #6
fil = min form
er det C eller Oconn eller t jeg skal benytte til at spørge:
If ***.Eof Then
Avatar billede -thomas- Nybegynder
20. august 2003 - 12:58 #7
Du kunne bare skrive:

    Set oConn = Server.CreateObject("ADODB.Connection")
    oConn.Open Application("db")

istedet for

' Initialisering af databaseconnection
    Set oConn = Server.CreateObject("ADODB.Connection")
    Set oRS = Server.CreateObject("ADODB.Recordset")
    c = Application("db")
   
    oConn.ConnectionString = c
    oConn.Open

Recordsettet angiver du jo først når du har lavet en sql-sætning at smide op imod databasen.
Avatar billede -thomas- Nybegynder
20. august 2003 - 13:01 #8
altså recordsettet kommer først efter ovenstående så der kommer til at stå:

Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open Application("db")

sql = "SELECT ID FROM MEDLEMMER WHERE MEDLEMSNUMMER = '" & Request.Form("Medlemsnummer") & "'"
Set rs = oConn.Execute(sql)

If Rs.Eof Then
osv.
Avatar billede jmc Nybegynder
20. august 2003 - 13:02 #9
Jeg skal løbe alle records igennem og trekke om de findes og skal opdateres eller ikke og skal oprettes.

loppet findes egentligt i:
for each f in fil
        t = split(f,""",""")

If Rs.Eof Then virker ikke i denne forbindelse...

men hvordan jeg lige fletter det hele sammen er jeg gået i stå.
Avatar billede -thomas- Nybegynder
20. august 2003 - 13:06 #10
Du løber da ikke records igennem med for each f in fil, hvis fil er din form. Så løber du jo bare felterne igennem i formen?
I ovenstående er fil jo heller ikke din form, men et felt formen og du løbe alle linier i feltet igennem.
Avatar billede jmc Nybegynder
20. august 2003 - 13:34 #11
Men tidligere har den opdateret på følgende måde, som virkede. Det er jo det sammen den går. Løber formen igennem og opdatere imens.

Nu skal den bare tjekke om den findes og opdatere hvis ikke insert!'
Kan jeg ikke få en hjælpende håndsrækning til dette.

for each f in fil
        t = split(f,""",""")
       
        if ubound (t) > -1 then
           
            medlemsnr        =    mid(t(0), 2)
            firma            =    re(t(1))
            adresse            =    re(t(2))
            adresse2        =    re(t(3))
            by                =    re(t(4))
            kontakt            =    re(t(5))
           
            SQL =    "INSERT INTO Medlemmer (medlemsnr,Firma,Adresse,Adresse2,vBy,Kontakt) " & _
                    '" VALUES (" & medlemsnr & ",'" & firma & "','" & adresse & "','" & adresse2 & "','" & _
                    'by & "','" & kontakt & "')"
           
            'Response.Write SQL
            oConn.Execute(SQL)
           
            medlemsnr = ""
            firma = ""
            adresse = ""
            adresse2 = ""
            by = ""
            kontakt = ""
        end if
       
    next
   
    count = UBound(fil)
   
    %>
Avatar billede jmc Nybegynder
20. august 2003 - 13:53 #12
if (alle records) contains medlemsnr then
update()
else
insert()
end if

men hvordan?
Avatar billede jmc Nybegynder
20. august 2003 - 13:57 #13
Skal jeg benytte Dreamweaver MX bliver det noget i denne retning:

<%
Dim rs_medlemmer
Dim rs_medlemmer_numRows

Set rs_medlemmer = Server.CreateObject("ADODB.Recordset")
rs_medlemmer.ActiveConnection = MM_ssid_STRING
rs_medlemmer.Source = "SELECT * FROM medlemmer"
rs_medlemmer.CursorType = 0
rs_medlemmer.CursorLocation = 2
rs_medlemmer.LockType = 1
rs_medlemmer.Open()

rs_medlemmer_numRows = 0
%>

længenre nede:

        If (rs_medlemmer.Fields.Item("medlemsnr").Value) contains medlemsnr  Then ' denne linie skal den løbe alle records igennem.
update()
else
insert()
end if

Er der ikke en som vil vise mig hvordan? Jeg hæver points.
Avatar billede -thomas- Nybegynder
20. august 2003 - 14:27 #14
Du løber alle felter i din form igennem og for hvert felt der findes splitter du det op i 6 variabler. Herefter vil du tjekke om den første variabel (medlemsnummeret) findes i databasen i forvejen, opdatere hvis den gør og indsætte hvis den ikke gør. Har jeg forstået det rigtigt?

Så er det i hvert fald noget hen af:

for each f in fil
        t = split(f,""",""")
       
        if ubound (t) > -1 then
           
            medlemsnr        =    mid(t(0), 2)
            firma            =    re(t(1))
            adresse            =    re(t(2))
            adresse2        =    re(t(3))
            by                =    re(t(4))
            kontakt            =    re(t(5))
           
            '## Check om medlemsnummeret findes i databasen findes i forvejen'
            SQL = "SELECT ID FROM Medlemmer WHERE medlemsnr= '" & medlemsnr & "'"
            Set rs = ConnO.Execute(sql)
           
            '## Hvis det ikke gør, indsættes det'
            If Rs.Eof Then
              SQL =  "INSERT INTO Medlemmer (medlemsnr,Firma,Adresse,Adresse2,vBy,Kontakt) " & _
                                  '" VALUES (" & medlemsnr & ",'" & firma & "','" & adresse & "','" & adresse2 & "','" & _
                                'by & "','" & kontakt & "')"
            '## Hvis det gør, opdateres det'
            Else
              SQL = UPDATE " osv osv
            End If
           
            rs.Close
            Set rs = Nothing

           
           
            'Response.Write SQL
            oConn.Execute(SQL)
           
            medlemsnr = ""
            firma = ""
            adresse = ""
            adresse2 = ""
            by = ""
            kontakt = ""
        end if
       
    next
Avatar billede jmc Nybegynder
20. august 2003 - 14:45 #15
Microsoft VBScript runtime error '800a01a8'

Object required: 'ConnO'

/admin/upload.asp, line 65

jeg har også prøvet at rette til conn stadigt samme fejl.
Avatar billede jmc Nybegynder
20. august 2003 - 14:47 #16
jeg har rettet til:
            SQL_findes = "SELECT medlemsnr FROM Medlemmer WHERE medlemsnr= '" & medlemsnr & "'"
            Set rs = Conn.Execute(SQL_findes)
MEN STADIGT SAMME FEJL.
Avatar billede -thomas- Nybegynder
20. august 2003 - 15:04 #17
Set rs = ConnO.Execute(SQL_findes)

ConnO er jo dit database objekt.
Avatar billede -thomas- Nybegynder
20. august 2003 - 15:05 #18
sorry oConn skal det jo være...
Avatar billede jmc Nybegynder
20. august 2003 - 15:19 #19
øv...

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.

/admin/upload.asp, line 65

det er denne linie:
    SQL_findes = "SELECT medlemsnr FROM medlemmer WHERE medlemsnr= '" & medlemsnr & "'"
Avatar billede jmc Nybegynder
20. august 2003 - 15:58 #20
ahhh, hvad kan der dog være galt.
medlemsnr findes Medlemmer er en tabel som findes, der er da ikke noget mismatch in criteria expression???
Avatar billede jmc Nybegynder
20. august 2003 - 16:05 #21
jeg hæver points
Avatar billede -thomas- Nybegynder
20. august 2003 - 16:30 #22
feltet medlemsnr er muligvis et tal-felt. Derfor skal apostrofferne væk, så det bliver:

SQL_findes = "SELECT medlemsnr FROM medlemmer WHERE medlemsnr= " & medlemsnr & ""
Avatar billede -thomas- Nybegynder
20. august 2003 - 16:30 #23
Eller du kan nøjes med:

SQL_findes = "SELECT medlemsnr FROM medlemmer WHERE medlemsnr= " & medlemsnr
Avatar billede jmc Nybegynder
21. august 2003 - 10:46 #24
Skal oConn.Execute(SQL) egentligt ikke executes inde i if-then-else for hvor gang den er is eller else?

Jeg har følgende fejl:


Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression '', Kontakt = '9900 Frederikshavn"' WHERE medlemsnr = 31'.

/admin/upload.asp, line 79

jeg byttede lidt rundt på værdierne i den kommeseparede fil og dernæst denne fejl. Jeg kan ikke få det på plads.

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression ''9900 Frederikshavn", Kontakt = 'Sille' WHERE medlemsnr = 31'.

/admin/upload.asp, line 80

Håber du kan hjælpe -thomas-
Avatar billede -thomas- Nybegynder
21. august 2003 - 10:54 #25
Hvorfor er der to apostroffer før 9900?

Prøv at paste din sql-sætning herind, så kan jeg lige kigge på den. Brug evt. Response.Write istedet for oConn.Execute(sql)
Avatar billede jmc Nybegynder
21. august 2003 - 11:15 #26
UPDATE Medlemmer SET medlemsnr = 30001, Firma = 'MANSE', Adresse = 'F Julvej 2', Adresse2 = '', vBy = '9900 Frederikshavn", Kontakt = 'Sille' WHERE medlemsnr = 30001UPDATE Medlemmer SET medlemsnr = 30009, osv.
Avatar billede jmc Nybegynder
21. august 2003 - 11:19 #27
ja det er rigtigt, der var en fejl i SQLén
Avatar billede -thomas- Nybegynder
21. august 2003 - 11:22 #28
så det virker nu eller hvad?
Avatar billede jmc Nybegynder
21. august 2003 - 11:34 #29
nej, jeg roder stadigt rundt med:
SQL = "UPDATE Medlemmer SET medlemsnr = " & medlemsnr & ", Firma = '" & firma & "', Adresse = '" & adresse & "', Adresse2 = '" & adresse2 & "', vBy = '" & by & ", Kontakt = '" & kontakt & "' WHERE medlemsnr = " & medlemsnr
Avatar billede jmc Nybegynder
21. august 2003 - 11:41 #30
jeg har rettet til:
    SQL = "UPDATE Medlemmer SET medlemsnr = " & medlemsnr & "', Firma = '" & firma & "', Adresse = '" & adresse & "', Adresse2 = '" & adresse2 & "', vBy = '" & by & "', Kontakt = '" & kontakt & "' WHERE medlemsnr = " & medlemsnr
men den skriver stadigt vBy = '9900 Frederikshavn"',
Avatar billede -thomas- Nybegynder
21. august 2003 - 11:48 #31
SQL = "UPDATE Medlemmer SET medlemsnr = " & medlemsnr & ", Firma = '" & firma & "', Adresse = '" & adresse & "', Adresse2 = '" & adresse2 & "', vBy = '" & by & "', Kontakt = '" & kontakt & "' WHERE medlemsnr = " & medlemsnr

skulle virke forudsat at medlemsnr er et tal.
Avatar billede ldanielsen Nybegynder
21. august 2003 - 12:03 #32
Drop SET medlemsnr = " & medlemsnr & "

Fordi du siger WHERE medlemsnr = " & medlemsnr

jeg forstår at medlemsnr IKKE er autonummerering
Avatar billede jmc Nybegynder
21. august 2003 - 12:35 #33
medlemsnr er et tal men ikke autonum
Avatar billede -thomas- Nybegynder
21. august 2003 - 12:38 #34
ldanielsen har ret - du skal ikke opdatere medlemsnr, når du kun opdaterer linien hvor medlemsnr = medlemsnr
Avatar billede jmc Nybegynder
21. august 2003 - 12:40 #35
ldanielsen
jeg vil meget gerne beholde medlemsnr da noget jo skal oprettes og noget opdateres fra det samme upload af en kommasep.

Den skriver stadigt:  "' efter Frederikshavn

???

UPDATE Medlemmer SET medlemsnr = 30001, Firma = 'MANSE', Adresse = 'F Julvej 2', Adresse2 = '', vBy = '9900 Frederikshavn"', Kontakt = 'Sille' WHERE medlemsnr = 30001UPDATE Medlemmer SET medlemsnr = 30009, osv.
Avatar billede -thomas- Nybegynder
21. august 2003 - 12:45 #36
Jamen der er ingen grund til at gøre det. Prøv:

SQL = "UPDATE Medlemmer SET Firma = '" & firma & "', Adresse = '" & adresse & "', Adresse2 = '" & adresse2 & "', vBy = '" & by & "', Kontakt = '" & kontakt & "' WHERE medlemsnr = " & medlemsnr

Det giver ingen mening at skrive sæt 30001 = 30001 alle steder hvor 30001 = 30001.
Avatar billede jmc Nybegynder
21. august 2003 - 13:18 #37
Tak det ser nu ud til at virke. Lad mig fordele points.
Avatar billede -thomas- Nybegynder
21. august 2003 - 13:37 #38
lægger lige et svar, hvis nogle af pointene skulle være til mig :)
Avatar billede jmc Nybegynder
21. august 2003 - 13:41 #39
Jeg fordeler ud fra hvor meget man har skrevet opløftet og en kvadratrod hvorefter jeg ganger med de antal rigtige svar.
Avatar billede jmc Nybegynder
28. august 2003 - 13:19 #40
Det var egentligt rigtigt svaret da den nu gerne ville opdatere. Problemet er bare at den nu smider et " ind efter alle vby records ?

any clues?
Avatar billede jmc Nybegynder
28. august 2003 - 13:23 #41
SQLén ser sådan ud:
SQL = "UPDATE Medlemmer SET Firma = '" & firma & "', Adresse = '" & adresse & "', Adresse2 = '" & adresse2 & "', vBy = '" & by & "', Kontakt = '" & kontakt & "' WHERE medlemsnr = " & medlemsnr
Avatar billede jmc Nybegynder
28. august 2003 - 13:24 #42
på behøring vis vil jeg oprettte en nyt spgsm
http://www.eksperten.dk/spm/393723
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