Avatar billede xfox Nybegynder
08. juni 2003 - 23:05 Der er 22 kommentarer og
4 løsninger

SQL med boolean værdi

Jeg skal lave en "insert into" sætning med en boolean variable. Jeg kan bare ikke få det til at virke. Jeg gør sådan:

db.Execute "insert into placering(vandret) select '" & vandret & "'"

Hvor vandret er en boolean variable. Det virker hvis jeg gør sådan:

db.Execute "insert into placering(vandret) select '" & true & "'"

men jeg skal bruge en variable i stedet. Kan det ikke lade sig gøre?
Avatar billede eagleeye Praktikant
08. juni 2003 - 23:17 #1
Jeg forstår ikke du har en select i insert into..:

Normalt skriver man true/1 eller false/0 eks på indsætte true:
db.Execute "insert into placering(vandret) values (true)"
db.Execute "insert into placering(vandret) values (1)"



Så din kode bliver:

db.Execute "insert into placering(vandret) values (" & vandret & ")"
Avatar billede noaz Nybegynder
08. juni 2003 - 23:19 #2
jeg er ikke helt sikker på hvad du mener, men du kunne jo lave en 'if then else' istedet, når det nu er det der virker... ex.

Dim Exec1
Exec1 = "INSERT INTO placering(vandret) SELECT "
if vandret = true then
    Exec1 = Exec1 & "'true'"
else
    Exec1 = Exec1 & "'false'"
end if
db.Execute Exec1
Avatar billede xfox Nybegynder
08. juni 2003 - 23:30 #3
>>eagleeye
Den vil stadig ikke acceptere (" & vandret & ") som en gyldig værdi.
Den siger for få parameter der var 1 ventet.

>>noaz
Jeg vil helst undgå en if sætning her. Det må kunne laves på en anden måde.
Avatar billede eagleeye Praktikant
08. juni 2003 - 23:32 #4
Hvad indeholder vandret ?
Avatar billede xfox Nybegynder
08. juni 2003 - 23:36 #5
>>eagleeye

Enten false eller true
Avatar billede ocp Nybegynder
16. juni 2003 - 13:26 #6
Så prøv:

db.Execute "insert into placering(vandret) select '" & cbool(vandret) & "'"
Avatar billede ocp Nybegynder
16. juni 2003 - 13:26 #7
Forklaring følger hvis det virker ;)
Avatar billede xfox Nybegynder
16. juni 2003 - 15:43 #8
Jeg har desværre ikke mulighed for at prøve det nu, da jeg er  på kursus, men når jeg kommer hjem på mandag skal jeg nok give det en chance.
Det lyder som den rigtig forklaring.
Avatar billede xfox Nybegynder
22. juni 2003 - 22:39 #9
>>ocp

Det virker desværre heller ikke. Den sætter aldrig værdien i databasen :-(
Avatar billede nielle Nybegynder
22. juni 2003 - 22:54 #10
Normalt plejer der ikke at være en SELECT i en INSERT INTO sætning. Mon ikke snarer den skal hedde:

INSERT INTO placering (vandret) VALUES (true)

- eller når det er med en variabel:

SQL = ”INSERT INTO placering (vandret) VALUES (” & vandret & ”)”

Måske skal vandret typecastes med et CBool, og/eller måske skal der enkelt-gnyffer rundt om variabelnavnet:

SQL = ”INSERT INTO placering (vandret) VALUES (’” & vandret & ”’)”
Avatar billede xfox Nybegynder
22. juni 2003 - 23:21 #11
>>nielle

Har prøvet alle kombinationer. Desværre uden held.
Avatar billede ocp Nybegynder
23. juni 2003 - 00:41 #12
Der må være et eller andet grundlæggende galt med din tilgang til databasen. Er du sikker på at datatyperne er korrekte?
Avatar billede ocp Nybegynder
23. juni 2003 - 11:41 #13
Læg lige denne sætning ind i din kode før db.execute og lad mig vide hvad det medfører:

MsgBox TypeName(vandret)
Avatar billede xfox Nybegynder
23. juni 2003 - 14:06 #14
Jeg tror ikke at der er noget galt med adgangen til databasen. Jeg indsætter andre variabler i samme sætning, og det virker okay. Det er kun den variabel med den boolean værdi at den ikke får ført rigtigt over.
Jeg skal prøve msgbox'en når jeg kommer hjem(Er på arbejde nu).
Tak for interessen i øvrigt.
Avatar billede xfox Nybegynder
23. juni 2003 - 23:23 #15
>> ocp

"MsgBox TypeName(vandret)" giver "boolean", som forventet.
Avatar billede nielle Nybegynder
24. juni 2003 - 07:59 #16
Prøv så også lige med en: MsgBox SQL

- for at se om SQL sætningen nu også ser ud som forventet.
Avatar billede ocp Nybegynder
24. juni 2003 - 10:15 #17
Har du prøvet med 1 og 0 i stedet for true og false?
Avatar billede xfox Nybegynder
24. juni 2003 - 12:07 #18
Jeg har prøvet at indsætte 1 istedet for variablen, og så virker det, men det er jo ikke helt det der er hensigten. Jeg kan godt sætte variablen til 1 eller 0, men den får stadig værdien true eller false, hvilket i princippet jo er det samme. Du får lige et svar på MsgBox SQL når jeg kommer hjem.
Avatar billede nielle Nybegynder
24. juni 2003 - 12:32 #19
Du siger at du har prøvet med:

INSERT INTO Placering (Vandret) VALUES ('true')

- og at det virker der.

Hvis du sætter vandret = true og derefter indsætter denne:

SQL = "INSERT INTO placering (Vandret) VALUES ('" & vandret & "')"

- får du imidlertid:

INSERT INTO Placering (Vandret) VALUES ('True')

- altså et stort T i True. Det er desværre slet ikke sikkert at din datadase forstår denne lille øjensynligt uskyldige variation.
Avatar billede ocp Nybegynder
24. juni 2003 - 12:43 #20
Er det Access eller SQL Server?
Avatar billede xfox Nybegynder
24. juni 2003 - 14:50 #21
Jeg har tænkt samme tanke selv. Jeg bruger desværre access(XP), og det kan da godt tænkes at den ikke forstår den "advancerede" SQL sætning.
Har du mulighed for selv at lave en test op imod en access database?
Avatar billede nielle Nybegynder
24. juni 2003 - 15:14 #22
Har "desværre" kun MySQL. ;^)

Du kan dog nemt teste det selv; Prøv simpelthen med begge variationer - fra en streng (altså uden at blande variable ind i det).
Avatar billede ocp Nybegynder
24. juni 2003 - 20:26 #23
>>Nielle: God ide.
>>xfox: Access kan sagtens håndtere din SQL - Men jeg ville måske overveje at kigge på MSDE (en gratis mini SQL-server til max. 2 GB data) hvis du er ked af access.
Avatar billede xfox Nybegynder
24. juni 2003 - 21:36 #24
Det lader til at der er et "lille" problem med at overføre en boolean værdi til access.
Jeg har dog, med jeres inspiration, fundet et smuthul.
Hvis man giver en boolean variabel værdien "1" bliver variablens værdi "true".
Hvis man istedet for laver en string variabel og giver den værdien "1" holder den værdien(altså "1") og kan derfor bruges til at overfører boolean værdier til access. Det undre mig dog at den ikke fejler pga. forskellige datatyper, men det er vel en anden sag.
I skal alle have mange tak for hjælpen.
Avatar billede nielle Nybegynder
24. juni 2003 - 21:45 #25
Der er såmen ingen grund til at undre sig. Idet at du konstruere din SQL streng bliver det altsammen lavet om til - ja - en streng! Uanset om det er tekst, tal, dato eller boolean for den skyld. Når du så derefter eksekvere SQL sætningen bliver de konverteret videre til databasens interne format.
Avatar billede xfox Nybegynder
24. juni 2003 - 23:57 #26
Okay. Det giver jo et nyt perspektiv til SQL programmering.
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