Oprettet man. d. 22. november 2010 kl. 10:40:54

maddog_em
maddog_em (5.880 point. Point ude: 0)

Tømme en kolonne i access

Hej

Jeg har et problem med at tømme en kolonne i access fra en asp fil.
jeg kender godt sql= "Delete * from table_name where area = 'E'"
så slettes en række, men hvoedan pokker sletter jeg indholdet i en bestemt kolonne, og hvordan får jeg nyt indhold ind igen?

Jeg har prøve med ALTER TABLE men uden held, hvis det er den rigtige vej at gå, så håber jeg der er en der kan smide et eksempel på sql statment - fordi jeg må gøre noget forkert.....

Skrevet man. d. 22. november 2010 kl. 10:52:22| #1

fennec
fennec (118.176 point)
Som jeg opfatter dit problem, skal du bare opdatere med "tom" data:

update table_name set kolonneNavn=NULL where area = 'E'

Skrevet man. d. 22. november 2010 kl. 11:07:49| #2

maddog_em
maddog_em (5.880 point)
Hej Fennec

vil det være muligt at gøre følgende:
update priser set 'E'= '"& request.form("u_newpris") &"'

Skrevet man. d. 22. november 2010 kl. 12:17:46| #3

hnteknik
hnteknik (32.695 point)
ja og du kan selektere ved at forsætte med & " where ....

Og pas nu SQL injection ved at teste om det er et tal, der kommer ind ;-)

Skrevet man. d. 22. november 2010 kl. 13:45:20| #4

maddog_em
maddog_em (5.880 point)
Hmm - nu får jeg denne fejl:
Microsoft OLE DB Provider for ODBC Drivers fejl '80040e10'

[Microsoft][ODBC Microsoft Access-driver] Der er for få parametre. Der var ventet 1.

/Options/UpdatePris1.asp, linje 15


--------------min kode----------------------

Set Conn = Server.CreateObject("ADODB.Connection")
DBPath = "DBQ=" & server.mappath("/Members.mdb")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};"&DBPath

SQL = "update priser set '"& request.form("u_pris") &"' = '"& request.form("u_newpris") &"' "

Set rs = Conn.Execute(SQL)
conn.Close
Set Conn = Nothing
----------------slut på kode----------------------

dette er linje 15:
Set rs = Conn.Execute(SQL)

Jeg har andre steder på site hvor jeg skriver ned i databasen, så det er muligt...

Skrevet man. d. 22. november 2010 kl. 14:06:42| #5

fennec
fennec (118.176 point)
Det er altid en god ide at udskrive din sql til skærmen hvis du oplever fejl.

Så sæt denne linje ind:

SQL = "update priser set '"& request.form("u_pris") &"' = '"& request.form("u_newpris") &"' "
response.write SQL &"<br>"
Set rs = Conn.Execute(SQL)

Evt med response.end lige efter write'en.

Men jeg gætter på du ikke har angivet kolonne navnet. Så din sql er nærmere noget ala:
SQL = "update priser set kolonne = '"& request.form("u_newpris") &"' where kolonne='"& request.form("u_pris") &"'"

Skrevet man. d. 22. november 2010 kl. 14:08:15| #6

fennec
fennec (118.176 point)
Måske du heller skulle fortælle os helt præcis hvad du vil opdatere??

Hvad indeholder request.form("u_newpris") og request.form("u_pris") af værdi?

Skrevet man. d. 22. november 2010 kl. 14:14:04| #7

hnteknik
hnteknik (32.695 point)
Du skal update .... set [PRIS] =  request.form("u_newpris")

WHERE

[VAREID] = request.form("Vareid et eller andet")



glem den gamle pris.

Skrevet man. d. 22. november 2010 kl. 14:16:38| #8

maddog_em
maddog_em (5.880 point)
hej igen - selvfølelig er det vigtig - beklager...

request.form("u_pris") = navn på kolonnerne A til og med E

request.form("u_newpris") = indholdet i rækkerne (tal)

databasen kan eks. indeholde dette
Id    A    B    C    D    E     
1    100    125  250  320  450

u_pris formen er en dropdown hvor der kan vælges ABCDE og u_newpris er et indtastningsfelt til at skrive i

det jeg gerne vil er så at kunne vælge evt. D i dropdown og skrive 360 i u_newpris hvorefter databasen skal opdateres til 360

Skrevet man. d. 22. november 2010 kl. 14:20:43| #9

maddog_em
maddog_em (5.880 point)
hej hnteknik

det hjælper desværre heller ikke....

SQL = "update priser set '"& request.form("u_pris") &"'='"& request.form("u_newpris") &"' WHERE Id = 1 "

(one line)

Skrevet man. d. 22. november 2010 kl. 14:27:01| #10

maddog_em
maddog_em (5.880 point)
stadig fejl:

-------fejl------------
UPDATE priser SET 'D'='360' WHERE Id = 1

Microsoft OLE DB Provider for ODBC Drivers fejl '80040e10'

[Microsoft][ODBC Microsoft Access-driver] Der er for få parametre. Der var ventet 1.

/Options/UpdatePris1.asp, linje 16

Skrevet man. d. 22. november 2010 kl. 14:42:50| #11

fennec
fennec (118.176 point)
Hvis request.form("u_pris") skal du ikke have ' omkring. Men med fordel kan du smide [] i stedet.

Det skal bare være:
SQL = "update priser set ["& request.form("u_pris") &"]='"& request.form("u_newpris") &"'"

Denne sql bliver f.eks. til:

update priser set [E]='123'

hvilket opdatere ALLE e kolonner med værdien 123.

Skrevet man. d. 22. november 2010 kl. 14:42:54| #12

hnteknik
hnteknik (32.695 point)
Fejler denne her i Access ?

UPDATE priser SET 'D'='360' WHERE Id = 1

Hvor tabellen hedder [Priser]
og de variable hedder
[VareID] = 1
[Varepris] = 360

eller

360 skal vel være et tal go skal ikke i anføringstegn og det skal D heller ikke.
Jeg tror du blander tingene sammen. Kald dine variable noget du kan genkende så du ikke blander tingenen sammen.

Dette her skulle virke.

UPDATE PRISER set Varepris = " & request.form("Nyvarepris") & " WHERE VareID = " & request.form("valgtvareID")

Begge er tal, så de skal ikke i anførelsestegn.

Skrevet man. d. 22. november 2010 kl. 14:46:16| #13

fennec
fennec (118.176 point)
Jeg vil dog KRAFTIGT fraråde at sende kolonne navne som form værdi, hvis det er noget alle og enhver har adgang til. Formdata kan manipuleres af brugerne som de ønsker og derfor kan de faktisk slette hele din database.

Send hellere 1, 2, 3, 4 ,5 og lav så et tjek for hvilken værdi og erstat med aktuel kolonne:

if request.form("u_pris") = "1" then
  kol="A"
elseif request.form("u_pris") = "2" then
  kol="B"
elseif request.form("u_pris") = "3" then
  kol="C"
...
else
  response.write "Error"
  response.end
end if

Skrevet man. d. 22. november 2010 kl. 14:48:01| #14

maddog_em
maddog_em (5.880 point)
arrrr efter adskillige timer i weekenden også er løsningen så nem, at det er helt pinlig

hnteknik smid et svar, for nu virker det.............

Skrevet man. d. 22. november 2010 kl. 14:50:04| #15

maddog_em
maddog_em (5.880 point)
kan jeg give fennec samme antal point, for det var jo denne linje response.write SQL &"<br>" der hjalp

Skrevet man. d. 22. november 2010 kl. 15:02:32| #16

fennec
fennec (118.176 point)
.o) <-- One Eyed Jack

Skrevet man. d. 22. november 2010 kl. 15:06:52| #17

maddog_em
maddog_em (5.880 point)
hey

kan det ikke lade sig gøre at både og hnteknik får 100 P hver?

Skrevet man. d. 22. november 2010 kl. 15:23:02| #18

hnteknik
hnteknik (32.695 point)
Det er altid godt at udskrive sin SQL sætninger, hvis det ikke makker ret. Klassisk ASP har en ringe debugging funktion. Husk nu at teste for hvad du får ind via request.form så du ikke bliver angrebet af SQL Injection fra nettet.

Når der er to svar kan du fordele. Tak anyway.,

Skrevet man. d. 22. november 2010 kl. 15:42:29| #19

fennec
fennec (118.176 point)
Lige for at følge op på SQL injection som alle SKAL vide noget om.

Inden du skriver noget mere kode så tag lige et kik på hvad SQL injection er og hvordan man undgår det. Du kan lige så godt lære at undgå det fra starten så du ikke skal igennem 100 mill linjer kode bagefter.

http://www.4guysfromrolla.com/ (...)

I den forbindelse har jeg lavet nogle database funktioner, som jeg bruger til ALLE data, der skal i en SQL streng. De vigtige funktioner er DBText, DBNumber og DBDate, der dækker de 3 datatyper, som man kan smide i en databse. Du får lige hele min kode her:

function DBdate(funkDato)
    if MyIsDate(funkDato) then
        DBdate = ConstDateDele & ConvertDateToSQL(funkDato) & ConstDateDele
    else
        Response.write "'"& funkDato &"' is not valid date."
        response.end
    end if
end function

function DBNumber(funkNumber)
    if IsNum(funkNumber) then
        DBNumber = replace(funkNumber,",",".")
    else
        Response.write "'"& funkNumber &"' is not a number."
        response.end
    end if
end function

function DBText(funkText)
    DBText = replace(trim(funkText&"")&"","'","''")
end function

Function ConvertDateToSQL(dato)
    dim SQLYear,SQLMonth,SQLDay
    SQLYear = Year(dato)
    SQLMonth = right("0"&Month(dato),2)
    SQLDay = right("0"&Day(dato),2)
    if ConstDateFormat = 1 then
        ConvertDateToSQL = SQLMonth&"-"&SQLDay&"-"&SQLYear
    elseif ConstDateFormat = 2 then
        ConvertDateToSQL = SQLYear&SQLMonth&SQLDay
    else
        ConvertDateToSQL = SQLYear&SQLMonth&SQLDay
    end if
End Function

function IsNum(funkNumber)
    IsNum = isnumeric(funkNumber&"")
end function

function MyIsDate(dato)
dim returVal
returVal = false
if len(dato) = 10 then
  if isnumeric(left(dato,2)) then
  if cint(left(dato,2)) >= 1 and cint(left(dato,2)) <= 31 then
    if isnumeric(mid(dato,4,2)) then
    if cint(mid(dato,4,2)) >= 1 and cint(mid(dato,4,2)) <= 12 then
      if isnumeric(right(dato,4)) then
      if mid(dato,3,1) = "-" and mid(dato,6,1) = "-" then
        if isDate(dato) then
        returVal = true
        end if
      end if
      end if
    end if
    end if
  end if
  end if
end if
MyIsDate = returVal
end function

Skrevet man. d. 22. november 2010 kl. 15:47:07| #20

fennec
fennec (118.176 point)
Alternativt kan man bruge sql parameter. Så klare systemet det selv, men jeg synes personlige det er lidt indviklet.

I mere advanceret sprog (som C#) bruger jeg dog kun sql parameter. Men oldschool ASP understøtter også sql parameter. Jeg har dog aldrig fundet en god tutorial af det til ASP.

Skrevet man. d. 22. november 2010 kl. 15:50:28| #21

fennec
fennec (118.176 point)
...
Havde da lige glemt opsætningerne til datoformatet. Det er nemlig forskellige afhængig af hvilken database man bruger (Access, SqlServer...)

til Access skal der sætte disse:

ConstDateFormat = 1
ConstDateDele = "#"

Skrevet tir. d. 23. november 2010 kl. 10:54:47| #22

maddog_em
maddog_em (5.880 point)
Hold da op - der er lige lidt læsestof :)

men igen - tak for hjælpen

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

ASP: formular udtræk med mulighed for at rette

Oprettet den 21. maj 2012 kl. 15.09
quarkb giver 200 point for svar | Giv et svar »

Sorter biblioteker efter dato i ASP

Oprettet den 17. maj 2012 kl. 16.52
4ks giver 60 point for svar | Giv et svar »

Simpel login-funktion (web) - behov for flere logins/brugere

Oprettet den 15. maj 2012 kl. 09.54
madx giver 75 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger