Avatar billede skildpadden Nybegynder
25. november 2010 - 20:50 Der er 6 kommentarer og
1 løsning

1+1 giver 11 - Det skal jo gerne give 2?

Jeg prøver at lægge to tal sammen, men det driller.

Det første tal henter jeg fra en database (oprettet som INT).

Tallet jeg henter er INT 1 og jeg ønsker så at lægge 1 til (altså 1+1). Scriptet siger at det er 11, men det skal jo gerne give 2.

Jeg har prøvet med parseInt(databasetal)+1 samt parseFloat(databasetal)+1, men det giver også 11.

Er der nogen som kan hjælpe?
Avatar billede mortvader Nybegynder
25. november 2010 - 20:51 #1
Må vi se scriptet? :)
Avatar billede skildpadden Nybegynder
25. november 2010 - 21:18 #2
SELECT SCRIPT:

var database = new SQLite();
database.openDatabase('database.sqlite',0);

database.executeSQL('select xxx from tabel');
results = database.getResults();

for(i=0; i<results.length; i++){
    var xxx=results[i].xxx;
}

database.closeDatabase();



UPDATE SCRIPT:

var database = new SQLite();
database.openDatabase('database.sqlite',0);
database.executeSQL('update tabel set xxx=' + xxx+1);
database.closeDatabase();
Avatar billede crazysnap Seniormester
25. november 2010 - 21:23 #3
Hej skildpadden,


prøv med:

database.executeSQL('update tabel set xxx=' + (Number(xxx)+Number(1)));

Eller:

database.executeSQL('update tabel set xxx=' + (parseInt(xxx)+parseInt(1)));


Mvh.
CS
Avatar billede bkp Nybegynder
25. november 2010 - 21:55 #4
Du kan ikke:
database.executeSQL('update tabel set xxx=' + xxx+1);

Det burda da være:
database.executeSQL('update tabel set xxx=xxx+1');

I øverste tager du et felt i databasen og siger at den skal være lig med en variabel + 1 som tilædigvis også hedder xxx men som er uden for database scriptet som i alle tilfælde vil indsætte samme værdi i alle xxx felter i din tabel.

Det ville være det samme som at skrive:
var i = 1;
database.executeSQL('update tabel set xxx=' + i+1);
hvilket vil sende følgende script til databasen:
'update tabel set xxx=2'

Eller:

var i = '1';
database.executeSQL('update tabel set xxx=' + i+1);
bliver til:
'update tabel set xxx=11'
Avatar billede Slettet bruger
26. november 2010 - 00:04 #5
Du mangler bare en parantes - fordi:
Dit: database.executeSQL('update tabel set xxx=' + xxx+1);
Siger: En streng + noget = en streng + noget mere = stadig en streng.

Brug i stedet:
database.executeSQL('update tabel set xxx=' + (xxx + 1) );

Så udregens indholdet i parantesen separat, før det lægges til strengen.


Disclaimer:
- Selvfølgelig under forudsætning at xxx faktisk ER et tal : )
Avatar billede bkp Nybegynder
26. november 2010 - 07:35 #6
Jeg kan se at jeg misforstod problemet lidt.

Men hvorfor først læse tal fra databasen og herefter putte det ind igen, nu kender jeg ikke SQLite, men jeg kender Sql og du burde kunne gøre som jeg foreslog, uden først at hente tallet ud:

database.executeSQL('update tabel set xxx=xxx+1');

Jeg er ikke helt klar over hvad du vil med dit loop:
for(i=0; i<results.length; i++){
    var xxx=results[i].xxx;
}

Det vil jo ende ud med at du har den sidste værdi som findes, men kun inde i din for løkke, da variabel dannes her.

Hvorfor droppe din første tilgang til tabellen og bare nøjes med dette script:

database.executeSQL('update tabel set xxx=(SELECT MAX(xxx) FROM tabel)+1');
Avatar billede bkp Nybegynder
26. november 2010 - 07:36 #7
Hvorfor droppe = Hvorfor ikke droppe
;-)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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