Avatar billede hemberg Forsker
29. juni 2005 - 14:08 Der er 17 kommentarer og
1 løsning

select distinct sql

Hej allesammen,

Hvad går galt her:

strSQL2 ="SELECT DISTINCT notat FROM dxlog WHERE Contest <> '' AND Dato=#" & date & "#"
RS2.OPEN strSQL2, CONN, 3, 1

Det virkede lige før. Men er åbenbart kommet til at lave en rettelse. Jeg er ved at blive idiot over det,

Please help
Avatar billede hemberg Forsker
29. juni 2005 - 14:10 #1
Hov glemte lige fejlmeldingen:

Fejltype:
Der opstod en Microsoft VBScript-kørselsfejl (0x800A01A8)
Et objekt er obligatorisk: 'rs2'
/Oz6hr/pages/dxlog/EDR30mhz.inc, line 386
Avatar billede goose Nybegynder
29. juni 2005 - 14:13 #2
Ved ikke om det er det, men skal der stå Contest og ikke Content ?

/Goose
Avatar billede hemberg Forsker
29. juni 2005 - 14:17 #3
Jep...Den er god nok. Der skal stå Contest.
Avatar billede imago-dei Nybegynder
29. juni 2005 - 14:30 #4
Jeg kender intet til ASP, men mangler du ikke komma før rs2.open?
Avatar billede hemberg Forsker
29. juni 2005 - 14:40 #5
Det er en ny linie. Men ellers kunne det have været et godt bud
Avatar billede erikjacobsen Ekspert
29. juni 2005 - 14:45 #6
Hvor kommer rs2 fra ?
Avatar billede hemberg Forsker
29. juni 2005 - 14:48 #7
RS2 er det recordset der er defineret i strSQL2. Det er fordi jeg har mere end et racordset kørende.
Avatar billede erikjacobsen Ekspert
29. juni 2005 - 14:54 #8
strSQL2 er bare en streng. Hvor kommer rs2 fra?
Avatar billede Spotgun Seniormester
29. juni 2005 - 14:55 #9
Umiddelbart ser det ud til at RS2 aldrig er blevet defineret. Er du sikker på at du har en linie ala det her:

Set RS2 = Server.CreateObject("ADODB.RecordSet")
Avatar billede hemberg Forsker
29. juni 2005 - 15:07 #10
OK. Kan godt se der mangler lidt info derfor kommer hele smørren med 3 SQL'er. Det er normalt måden jeg laver det på. Har lige prøver at sætte den til en normal RS og ikke rs2. Hvilket bevirker at den virker men ikke de andre. Her er hvad der er skrevet . forklare måske lidt:

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../db/Dxlog.mdb")
Conn.Open DSN
strSQL2 ="SELECT count(*) FROM dxlog where Contest <> '' AND Dato=#" & date & "#"
Set rs2 = Conn.Execute(strSQL2)
strSQL3 ="SELECT * FROM dxlog where Contest <> '' AND Dato=#" & date & "#"
Set rs3 = Conn.Execute(strSQL3)
strSQL ="SELECT DISTINCT notat FROM [dxlog] where Contest <> '' AND Modulation='CW' AND Dato=#" & date & "#"
RS.OPEN STRsql, CONN, 3, 1
Avatar billede Spotgun Seniormester
29. juni 2005 - 15:13 #11
Når du bruger RS.Open skal dit RecordSet-object også altid være instantieret. Det er det jo ikke i dette tilfælde.

Så prøv at rette det til:

Set Conn = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.RecordSet")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../db/Dxlog.mdb")
Conn.Open DSN
strSQL2 ="SELECT count(*) FROM dxlog where Contest <> '' AND Dato=#" & date & "#"
Set rs2 = Conn.Execute(strSQL2)
strSQL3 ="SELECT * FROM dxlog where Contest <> '' AND Dato=#" & date & "#"
Set rs3 = Conn.Execute(strSQL3)
strSQL ="SELECT DISTINCT notat FROM [dxlog] where Contest <> '' AND Modulation='CW' AND Dato=#" & date & "#"
RS.OPEN STRsql, CONN, 3, 1
Avatar billede Spotgun Seniormester
29. juni 2005 - 15:14 #12
...ved dine andre recordsets har du jo "Set RSx = ...", så de instantieres på samme tidspunkt som de fyldes med data. Sådan fungerer RS.Open desværre ikke :)
Avatar billede hemberg Forsker
29. juni 2005 - 15:23 #13
Kanon. Det virkede. Der er vist lang vej endnu inden jeg kan skrive nørd på mit visitkort.... HE..HE.

Lægger du lige et svar.
Har du tid til et lille tillagsspørgsmål ?

Hvis et RS skal bestå af tre tal men der kun er et i DB. FX. i DB står 22 men rs skal retunere 022. Eller 5 bliver til 005. Findes der en kommando til det.
Avatar billede Spotgun Seniormester
29. juni 2005 - 15:30 #14
Ikke umiddelbart, men man kan lave en funktioner der returnerer det. Kan da lige hurtigt smække noget sammen til dig...
Avatar billede Spotgun Seniormester
29. juni 2005 - 15:37 #15
Function doZero(data)
    If len(data) < 3 Then
        If len(data) = 2 Then
            doZero = "0" & data
        ElseIf len(data) = 1 Then
            doZero = "00" & data
        Else
            doZero = "000"
        End If
    Else
        doZero = data
    End If
End Function

Værsgo :)
Avatar billede hemberg Forsker
29. juni 2005 - 15:46 #16
Tak. Skal funktionen kaldes på en måde`?

Hvis jeg skriver Response.write rs3("qsonr") retunere den 7
Avatar billede Spotgun Seniormester
29. juni 2005 - 15:55 #17
Ja, du skal skrive:

Response.Write doZero(rs3("qsonr")). Så returnerer den 007.
Avatar billede thesurfer Nybegynder
30. juni 2005 - 03:01 #18
Du kan vist nøjes med:

function doZero(data)
if CDbl(data) = 0 then data = "000"
if CDbl(data) > 0 and CDbl(data) < 10 then data = "00" & data
if CDbl(data) > 9 and data < 100 then data = "0" & data
doZero = data
end function

hmm.. måske burde denne function giv et ukorrekt resultat, da data-værdien før anden og tredje IF-sætning..

Men hverken spotguns script, eller mit script, tager højde for negative tal (f.eks. -5, -22). Man skal lige huske, at "-" optager 1 tegn i længden.. dvs "-5" er 2 tegn, "-22" er 3 tegn..

Hvis jeg ville check længden (som spotgun gjorde), ville jeg nok gøre sådan her:

function doZero(data)
if len(data) = 1 then
    data = "00" & data
elseif len(data) = 2 then data = "0" & data
end if
doZero = data
end function

eller sådan her:

function doZero(data)
select case len(data)
case 1
  data = "00" & data
case 2
  data = "0" & data
end select
doZero = data
end function

/theSurfer
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