Avatar billede bombur Nybegynder
03. maj 2006 - 21:43 Der er 11 kommentarer

Hvordan putter jeg et ' i min database?? JScript

Hej

Jeg koder i JScript må jeg lige starte med at sige, ikke VBscript

Jeg har en række tekstbokse og jeg ved at ' laver rod i ens SQL sætninger hvis man lader sine brugere indtaste dem. Men hvis man nu SKAL kunne indtaste dem, hvad gør man så?

Jeg har prøvet at replace dem, men jeg ved ikke hvad jeg skal replace dem med!?

På forhånd tak
Rune
Avatar billede nielle Nybegynder
03. maj 2006 - 22:26 #1
Et enkelt '-tegn skal replaces med 2 '-tegn - altså til ''. Eller med \'. Det afhænger lidt af hvilkene database der bruges.
Avatar billede fennec Nybegynder
04. maj 2006 - 08:29 #2
Nu er det lang tid siden jeg har bruge JScript, men mener det skal se sådan ud, hvis du udskifter enkelt ' med to:

test = "en tekst med ' tegnet ' to gange"
test = test.replace(/'/g,"''")
Avatar billede bombur Nybegynder
04. maj 2006 - 09:29 #3
Det er en Access database. og når jeg skifter ' ud med \' får jeg en SQL fejl:

tekst = aes\'df\'fd\'fg\'fg
UPDATE SpecificationProject SET specProtext='aes\'df\'fd\'fg\'fg' WHERE specId=6 AND langId=1 AND projectId=113

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

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression ''aes\'df\'fd\'fg\'fg''.
Avatar billede fennec Nybegynder
04. maj 2006 - 09:33 #4
Access skal have dobbelt '. Ikke \' :o)
Avatar billede fennec Nybegynder
04. maj 2006 - 09:35 #5
Altså sådan:
tekst = "aes''df''fd''fg''fg"

Og det kan du bruge min funk til at klare:
tekst = "aes'df'fd'fg'fg"
tekst = tekst.replace(/'/g,"''")
Avatar billede bombur Nybegynder
04. maj 2006 - 09:35 #6
Jeg har i øvrigt lavet denne metode til at udskifte dem:

function escapeAll(s) {
    tmp = "";
    for (i =0; i < s.length; i++) {
        switch (s.charAt(i)) {
            case "'":
                tmp = tmp + "\\'";
                break;
            case "\"":
                tmp = tmp + "\\\"";
                break;
            default:
                tmp = tmp + s.charAt(i);
        }
    }
    return tmp;
}
Avatar billede fennec Nybegynder
04. maj 2006 - 09:45 #7
Sålænge du bare sender dine tekster igennem replace funktionen, kan du indsætte hvad som helst. Det er kun ' tegnet der giver problemer :o)
Så din egen funktion behøver du ikke...
Avatar billede bombur Nybegynder
04. maj 2006 - 10:10 #8
Når jeg bare gør dette, så cutter den al tekst efter ' tegnet inklusive tegnet

tekst=tekst.replace(/'/g,"''")

Det vil sige at
tekst = dsf'rg'fgf
Bliver til:
tekste = dsf
Avatar billede fennec Nybegynder
04. maj 2006 - 10:22 #9
Mærkligt. Jeg har lige kørt dette eks:
<% @LANGUAGE = JScript %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
    <title>Untitled</title>
</head>
<body>
<%
tekst = "aes'df'fd'fg'fg";
tekst = tekst.replace(/'/g,"''");
%>
<%= tekst %>
</body>
</html>

Og der får jeg aes''df''fd''fg''fg ud på skærmen, og den tekst er klar til at blive smidt i en DB:

tekst = "aes'df'fd'fg'fg";
tekst = tekst.replace(/'/g,"''");
sql = "inset into dinTabel(enTekst) values('"& tekst &"')"
Avatar billede bombur Nybegynder
04. maj 2006 - 10:57 #10
Ok, har testet det nu og Replace metoden virker fint, men det går galt når man sætter det ind i DB, så det altså er DB der skærer alt resten væk efter '

Så det må betyde at Access ikke kan bruge den string vi får lavet
Avatar billede fennec Nybegynder
05. maj 2006 - 12:44 #11
Hvordan ser din kode til indsættelse i DB ud???
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