Just nu i M3-nätverket
Gå till innehåll

'Fnuttar' och "dubbelfnuttar"


Jonas12

Rekommendera Poster

Hej,

Jag har byggt stegvisa ASP-formulär för att administrera (granska,ändra, visa och slutligen uppdatera)långa djurtexter i en Accessdatabas. Men i uppdateringsfunktionen får jag felmeddelanden.

 

Hur skriver jag sql-koden om den ska hämta in namnet på fältet som ska uppdateras från valet/visningen i ett tidigare formulär och sätta det nya innehållet i fältet lika med ändringarna som gjorts i ett "textarea"-fält?

 

Jag har gjort en provsida som visar att fältets namn, den nya texten och artens namn verkligen levereras hela vägen till slutsidan korrekt (via "hidden"-formulär). Men jag får inte ihop update-satsen, utan får syntax-anmärkningar eller meddelande om att fältnamnet har felaktiga "-tecken omkring sig.

 

Undrar

Jonas

Länk till kommentar
Dela på andra webbplatser

låte kod hade underlättat, skall dock ge dig ett tips redan här.

 

Du har säkert använt dig av sql-satsen INSERT INTO.... vilket suger om du har mycket som skall uppdateras, eftersom det blir lätt fel med " och '

 

använd recordser istället det blir mycket lättare, här kommer ett ex:

 

<%

set objConn = server.createObject("ADODB.COnnection")

set objRs = server.createObject("ADODB.RecordSet")

 

objConn.open "DIN_SÖKVÄG_TILL_DATABASEN"

objRs.cursorType = 1

objRs.lockType = 3

 

objRs.open "DITT_TABEL_NAMN_I_DATABASEN", objConn

objRs.filter = "idnummer = "& idnummer

 

objRs.fields("KOLUMNNAMN1") = "text som skall in i kolumn1"

objRs.Fields("KOLUMNNAMN2") = "text som skall in i kolumn2"

.

.

.

objRs.update

 

objrs.close : set objRs = nothing

objConn.close : set objConn = nothing

%>

 

här har du och ändra i själv....

 

- Magnus

 

 

 

 

Länk till kommentar
Dela på andra webbplatser

>Du har säkert använt dig av sql-satsen INSERT >INTO.... vilket suger om du har mycket som skall >uppdateras, eftersom det blir lätt fel med " >och '

 

Suger? vad är det som suger...att inte du kan göra rätt när du skriver verkar det som i mina ögon...

 

/ Vide

Länk till kommentar
Dela på andra webbplatser

Patetiskt påhopp....

 

Du kan ju få en uppgift av mig att uppdatera en databas, sen kan du ju välja själv vilket du vill använda dig av....

 

- Magnus

 

 

Länk till kommentar
Dela på andra webbplatser

Hej,

och tack för din tid Magnus. Nej,jag använder faktiskt UPDATE enl. nedan:

----

<%

X=Request.Form("arten") <---fr. "Hidden field"

Y=Request.Form("amnet") <---fr. "Hidden field"

Z=Request.Form("textfalt") <--- fr.-"- (textarea)

myDSN="DSN=arter"

mySQL="update tb_web set Y='"&Z&"' where djur='"&X&"'"

 

set conntemp=server.createobject("adodb.connection")

conntemp.open myDSN

conntemp.execute(mySQL)

 

%>

--------------------

Då får jag (i den här versionen) uppgift om att "för få argument" skickats. Om jag däremot sätter Y till '"&Y&"' visar den rätt fältnamn i error-msg, men talar om att " och " är ogiltiga runt argumentet.

 

Så, hur får jag programmet att förstå att Y är namnet det fält som SET verkar på?

 

Jag grunnar vidare på ditt förslag, men min kod verkar enkel och rättfram tycker jag.

 

Och som bör betonas i detta och andra forum: folk som tar sig tid att skriva flera rader kod i sina svar ska man inte hoppa på. En vacker dag behöver man dem.

 

/Jonas

 

Länk till kommentar
Dela på andra webbplatser

Det var inte min mening att hoppa på någon...men jag tyckte att hans argument att inte använda metoden UPDATE var/är patetiska...Sorry!

 

Testa att göra såhär:

 

mySQL = "update tb_web"

mySQL = mySQL & " set Y = '"&Z&"'"

mySQL = mySQL & " where djur = '"&X&"'"

 

obsevera att om variabel "X" innehåller ett numeriskt värde så behöver du inte snuffa den...

Länk till kommentar
Dela på andra webbplatser

Hej Vide,

Nej, uppdateringssidan ger samma svar: "För få parametrar angavs, 1 förväntades". Det är som om den inte förstår att uppdateringsadressen är låst av X=djur (text) och Y=ämne (fältnamn utan å,ä,ö). Att plocka ut alla eller vissa fält med SELECT och '"&djurnamn&"' fungerar i alla andra lägen, men att hämta både fältnamn och ersättningstext från HIDDEN-formulär i sql-satsen tycks krångla till det.

 

mvh

Jonas

Länk till kommentar
Dela på andra webbplatser

Ett typiskt problem som kan uppstå när man försöker föra in text i ett fält i db som skall vara tal etc.

Det kanske kan vara så att du får göra om fältnamnets typ, eller något annat av det som skickas i formuläret.

(Testa också att skriva ut sql satsen innan du exekverar den så att du ser att den verkligen är ok.)

Här är ett exempel på hur du kan se vilken typ en viss variabel är:

 

Response.Write "Typ för Y: " &TypeName(ar) &"<br>" &vbCRLF

Länk till kommentar
Dela på andra webbplatser

Så klart jag menade UPDATE den fungera ju nästan på samma sätt som INSERT, har du testat mitt förslag så kan det vara som bjarne säger att du försöker skicka in ett text värde till en kolumn msom skall ha tal.

 

Det blir så när du kör request metoden då får du tillbaka ett strängvärd och då måste det omvandlas till ett tal, ex CInt(MITT_VÄRDE)

 

- Magnus

Länk till kommentar
Dela på andra webbplatser

Om man ska hämta en sträng från ett formulär och man vill gardera sig mot att användaren har skrivit in specialtecken som ' (enkelt citat), " (dubbelt citat) och , (komma tecken) - slipper man dessa problem genom att använda recordsets eller finns det någon bättre lösning?

Länk till kommentar
Dela på andra webbplatser

Du slipper inte dessa sätt genom att använda dig av RecordSet, recordset är bara ett verktyg för att på ett smidigare sätt hantera data från/till en databas.

 

Du måste göra som bjarne säger med Replace

 

- Magnus

Länk till kommentar
Dela på andra webbplatser

Hmm...

Det verkar bli struligt. Jag testade Bjarnes förslag och fann att HIDDEN-fälten skickades över som strängar, inte tal. Men mina långa och "taggade" texter innehåller här och var Javascriptkod för att öppna fönster med ordförklaringar och diagram, när besökaren klickar på en tumnagel eller ett svårt ord.

 

Dessa kodsnuttar innehåller ju som bekant apostroftecken på sina ställen. Om jag går in med REPLACE och t ex lägger till ett extra apostroftecken förstör jag väl den koden, eller...?

 

Tacksam för vidare diskussion i ämnet. Jag lär mig massor.

 

mvh

Jonas

Länk till kommentar
Dela på andra webbplatser

Var kan man hitta (online) referensmaterial som visar vilka tecken som ska översättas och till vad man ska översätta dessa? Kunde ej hitta något på www.microsoft.com.

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...