Avatar billede bodekaer Nybegynder
21. oktober 2002 - 15:58 Der er 19 kommentarer og
1 løsning

SQL og Bytes/Bits

Hej igen,

Se venligst det her spørgsmål: http://www.eksperten.dk/spm/272352

Som i kan se lykkedes det mig at få svar på hvordan man tjekker om en bit indgår i byte.

Men når jeg bruger dette i MS Access SQL kode, så fungerer det ikke... er der noget specielt man skal gøre da?

/Michael
21. oktober 2002 - 16:06 #1
Koden bør vel se således ud:

    If (Bytedays And 2 ^ Bitnr) <> 0 Then
      MsgBox "Bit nr " & Bitnr & " er sat til 1"
    End If

Uden parenteserne regner den ikke rigtigt.

Bortset fra det, så ved jeg ikke helt, hvad din fejl er?
21. oktober 2002 - 16:13 #2
Som funktion ville jeg nok bruge den således:

Public Function CheckBytes(Bytedays As Long, Bitnr As Byte) As Boolean
      CheckBytes = (Bytedays And 2 ^ Bitnr)
End Function


Ved kald af f.eks:
?CheckBytes(54,4) fås True
Dvs at bit 4 er sat i tallet 54

Det virker fint i Access.

/Thomas
Avatar billede bodekaer Nybegynder
21. oktober 2002 - 16:22 #3
Jeg skal lave det i SQL...

F.eks. bliver følgende sandt:

SELECT 9 AND 2^5 as theBit


Hvilket det jo ikke burde right?
Avatar billede bodekaer Nybegynder
21. oktober 2002 - 16:23 #4
Også med parenteser... :)
21. oktober 2002 - 16:26 #5
:o)

Én løsning kunne være, at lave den funktion, som jeg viste herover og derefter kalde den i SQL'en:

Select CheckBytes(9,5) as theBit
21. oktober 2002 - 16:29 #6
Du kan IKKE bruge AND og OR m.fl. som boolske operatorer i SQL
Avatar billede bodekaer Nybegynder
21. oktober 2002 - 16:29 #7
Det kan jeg desværre ikke, da jeg ikke kan oprette en funktion i en MS access database via VB kode.

Desuden ville det ødelægge performance er jeg ret sikker på.

Men du tror ikke man kan tjekke det på en anden måde så?
21. oktober 2002 - 16:33 #8
hmm, jeg tror nu ikke at det vlle sløve så meget!

Men du kan i stedet lave det som en stored Procedure....(ja det kan man godt i Access)
Avatar billede bodekaer Nybegynder
21. oktober 2002 - 16:33 #9
Kan du give et eksempel?
Avatar billede bodekaer Nybegynder
21. oktober 2002 - 16:34 #10
Jeg er nødt til at smutte på BoomTown nu ;) men er tilbage senere idag.
Avatar billede fynbohans Nybegynder
21. oktober 2002 - 21:06 #11
Prøv i VBA:
Test = Bytedays And 2 ^ Bitnr
If Test = 2 ^ Bitnr så findes den pågælde bit i begge tal.
Avatar billede bodekaer Nybegynder
22. oktober 2002 - 13:42 #12
Ja, det virker fint i VB... men ikke i SQL.

Det undrer mig bare.
Thomas, kan du ikke forklare hvorledes jeg indbygger en procedure i min SQL kode?
Avatar billede bodekaer Nybegynder
22. oktober 2002 - 13:44 #13
Eller evt. hvordan opretter jeg en VB function i en SQL database via noget VB kode... :)
Avatar billede bodekaer Nybegynder
22. oktober 2002 - 14:57 #14
Ligemeget, jeg laver værdien om så den ikke er en Byte men i tekststreng med nuller og et-taller... så kan jeg bruge MID til at tjekke det.
22. oktober 2002 - 21:18 #15
Hej igen,

Undskyld, men jeg fik aldrig givet dig den stored procedure. Men det skyldtes faktisk, at jeg ikke kunne få den til at virke. Jeg kan godt lave en Stored Procedure vha VBA, men den virker ikke som jeg vil have det:

Public Sub CreateCheckBit()
    Dim TSQL As String
    TSQL = "CREATE PROCEDURE CheckBit " & _
      "@Tal  int, " & _
      "@bit smallint " & _
      "As " & _
      "Declare @Resultat bit " & _
      "Select @Resultat = @Tal & 2^@bit"
    CurrentProject.Connection.Execute TSQL 
End Sub

Syntaksen skulle være iorden (den virker på SQL server), men Access vil deværre ikke acceptere koden.

Beklager :o(
Avatar billede bodekaer Nybegynder
22. oktober 2002 - 21:24 #16
Jeg har netop snakket med nogen på experts-exhcange.com og de siger også at det ikke kan lade sig gøre i Access, kun via VBA.

Jeg har bare stadig ikke fundet ud af hvordan man opretter en VBA macro via en VB application som åbner cdatabase
Avatar billede fynbohans Nybegynder
24. oktober 2002 - 20:18 #17
VBA kender kun datatyperne Byte og HeltaL(=Integer). Udover over det
er det kun VBA, som kender talværdien af en variabel.
Hvis man f.eks. bruger en variabel i en betingelse i DLookUp er syntaksen "[ET FELT] =" & Str$(Variabelnavn).
Talværdien er lavet om til tekst.
Avatar billede fynbohans Nybegynder
24. oktober 2002 - 20:20 #18
...  Datatyper som er aktuelle her.
Avatar billede fynbohans Nybegynder
24. oktober 2002 - 23:34 #19
Og endnu en rettelse.
I VBA kan str$() kun bruges til datypen LONG.
I alle andre tilfælde skal bruges Cstr-funktioner.
For Valuta f.eks. CCur().
Avatar billede bodekaer Nybegynder
25. oktober 2002 - 07:55 #20
Jeg lavede min database lidt om, så jeg istedet havde en streng med nuller og et-taller. F.eks. "1100101"

Så brugte jeg bare MID funktionen til at tjekke om en værdi var sat... alternativ løsning, og den fungerer fint.
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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