Avatar billede alexander_j Nybegynder
28. juni 2006 - 18:53 Der er 20 kommentarer og
2 løsninger

Problemer med kald til rapport

Jeg har lidt problemer med at kalde en rapport fra en formular.

Jeg har en tabel med navnet 'comments'.

I min formular får jeg genereret følgende streng:
[comments]![active]=true AND [comments]![user_id]=1 AND [comments]![t_date]>=#01-01-2006# AND [comments]![t_date]<=#31-07-2006#

Som jeg så kalder en rapport med følgende kode:
DoCmd.OpenReport "user_comments_report", acPreview, , rep_str

hvor rep_str er ovenstående streng.

Mit problem er blot, at den ikke bare viser ovenstående hvor active er sand, user_id er 1 og t_date er mellem 01-01-2006 og 31-07-2006! I stedet popper der en boks op, som siger:
Indtast parameterværdi
comments!user_id

Og her kan jeg så indtaste en værdi - hvad går galt?
Avatar billede -anders- Juniormester
28. juni 2006 - 19:56 #1
Et skud i tågen :o)

DoCmd.OpenReport "user_comments_report", acPreview, , "user_id =" & rep_str

Forudsætter at user_id er af datatypen tal, men blot et skud
Avatar billede -anders- Juniormester
28. juni 2006 - 19:57 #2
Forudsætter også at rep_str er erkæret som en variable Dim rep_str As string
Avatar billede alexander_j Nybegynder
28. juni 2006 - 20:13 #3
rep_str er erklæret som en string. dit forslag med "user_id=" & rep_str virker helt hen i vejret hvorfor skulle user_id være lig hele min streng?

Hvis jeg udelader '[comments]![user_id]=1 AND', så virker det fint - naturligvis bare uden den restriktion at den kune skal vise der hvor user_id fx er 1.

Kan det have noget at gøre med at elev_id er erklæret som en interger i tabellen?
Avatar billede alexander_j Nybegynder
28. juni 2006 - 20:14 #4
rep_str er den streng jeg nævnte jeg har fået genereret - det står vist ikke helt tydeligt i mit spørgsmål.
Avatar billede alexander_j Nybegynder
28. juni 2006 - 20:15 #5
hov jo det gjorde jeg jo!
Avatar billede fdata Forsker
28. juni 2006 - 20:16 #6
Det lyder som om dit felt IKKE hedder [comments]![user_id]. Er du 100% sikker på feltnavnet?
... og hvad er nu elev_id ?
Avatar billede alexander_j Nybegynder
28. juni 2006 - 20:39 #7
elev_id er user_id :-D

Ja jeg er 100% sikker på at min tabel hedder "comments" og at der er en kolonne der hedder "user_id" i den. kolonnen er sat til at være "tal". "user_id" har desuden en relation til en kolonne "id" i en anden tabel "users" - dvs.
users.id er relateret til comments.user_id og der er sat flueben i "Gennemtving referentiel integritet"

Kan noget af ovenstående give problemer eller må jeg ikke bruge tegn som "_"?
Avatar billede mugs Novice
28. juni 2006 - 20:55 #8
Det er en uskik at bruger specialtegn som underscore i objektnavne, men om det betyder noget her kan jeg ikke gennemskue.

Når jeg skal udskrive en rapport fra en formular, hvor kriteriet er et numerisk felt der eksisterer i formularen bruger jeg denne:

DoCmd.OpenReport "rapport1", acViewPreview, , "[Tabel1]![tal] = " & Me!tal & ""
Avatar billede mugs Novice
28. juni 2006 - 20:56 #9
Og med 2 kriterier numerisk og alfanumerisk:

DoCmd.OpenReport "rapport1", acViewPreview, , "[Tabel1]![tekst]= '" & Me!tekst & "' And [Tabel1]![tal]= " & Me!tal & ""
Avatar billede alexander_j Nybegynder
28. juni 2006 - 21:03 #10
Synes også det er det jeg har gjort - her kan du se koden jeg har brugt til at generere den del med "user_id=1":
rep_str & "[comments]![user_id]=" & [com_user] & " AND "

com_user er fra et felt med dropdown.
Avatar billede mugs Novice
28. juni 2006 - 21:29 #11
Prøv alligevel at bygge et nyt kriterie. Tag et ad gangen og fungerer det, så læg et nyt kriterie på.

Kontroller desuden, at com_user virkelig er navnet på din combo og ikke blot titelteksten. Noget tyder på, at db ikke genkender com_user.
Avatar billede alexander_j Nybegynder
28. juni 2006 - 21:45 #12
Jeg har jo prøvet at fjerne "[comments]![user_id]=" & [com_user] & " AND " - og så virker det - så det må vel være der problemet er.

Min samlede string med user_id-delen giver:
[comments]![active]=true AND [comments]![user_id]=1 AND [comments]![t_date]>=#01-01-2006# AND [comments]![t_date]<=#31-07-2006#

Og her ser det ud til at den fint forstår at [com_user] er 1. Jeg har også forsøgt at fjerne [com_user] og sætte 1 direkte i stringen i stedet - men med samme fejl som tidligere beskrevet.
Avatar billede alexander_j Nybegynder
28. juni 2006 - 22:16 #13
Hele koden på min knap ser sådan her ud:
Private Sub but_show_report_Click()
    Dim rep_str As String
   
    If IsNull([tex_date_from]) Or IsNull([tex_date_too]) Then
        MsgBox ("Du skal vælge dato - både fra og til.")
    Else:
        rep_str = "[comments]![active]=true AND "
        If [com_user] <> -1 Then rep_str = rep_str & "[comments]![user_id]=" & [com_user] & " AND "
        If [com_type] <> " alle fag" Then rep_str = rep_str & "[comments]![type]='" & [com_type] & "' AND "
        rep_str = rep_str & "[comments]![t_date]>=#" & [tex_date_from] & "# AND [comments]![t_date]<=#" & [tex_date_too] & "#"
       
        MsgBox (rep_str)
        DoCmd.OpenReport "user_comments_report", acPreview, , rep_str
        'DoCmd.Close acForm, "make_report"
    End If
End Sub
Avatar billede -anders- Juniormester
29. juni 2006 - 03:23 #14
dit forslag med "user_id=" & rep_str virker helt hen i vejret hvorfor skulle user_id være lig hele min streng?

Fordi der i koden er angivet user_id = et eller andet unikt, hvilket jeg så tolker som en unik post ud af mange poster.
Avatar billede alexander_j Nybegynder
29. juni 2006 - 08:58 #15
Undskyld -anders-, jeg kan godt se, at mit indlæg kan virke noget groft og ubehøvlet - det var abosolut ikke ment sådan, men det er det evindelige problem med skriftsproget - man kan nemt blive misforstaet. Jeg værdsætter virkelig den hjælp jeg får, også den jeg får og har fået af dig.

Men hvis jeg følger dit råd med "user_id = " & rep_str, så bliver den samlede kode bare:
DoCmd.OpenReport "user_comments_report", acPreview, ,"user_id = [comments]![active]=true AND [comments]![user_id]=1 AND [comments]![t_date]>=#01-01-2006# AND [comments]![t_date]<=#31-07-2006#"

og det kan jeg ikke se der kommer noget godt ud af.
Avatar billede alexander_j Nybegynder
29. juni 2006 - 09:25 #16
Jeg har endda prøvet direkte med:
DoCmd.OpenReport "user_comments_report", acPreview, , "[comments]![user_id]=1"

Og alligevel fremkommer der en boks med:
Indtast parameterværdi
comments!user_id
<og så et felt til at indtasteværdien>

Jeg har også forsøgt at fjerne relationen mellem users!id og comments!user_id, men med samme resultat.

Jeg har også forsøgt at fjerne'_' fra user_id både i koden og i tabellen, men samme resultat blot med userid.
Avatar billede alexander_j Nybegynder
29. juni 2006 - 09:57 #17
hehe - så fandt jeg fejlen.

Mit problem var at den forespørgsel som rapporten var lavet over ikke indeholdt nogen user_id!

Smid nogen svar jer der vil dele point.
Avatar billede -anders- Juniormester
29. juni 2006 - 11:29 #18
Hej alexander, ingen grund til at undskylde, jeg redegjorde blot for min indledende kommentar :o), det fint at du har fået det til at virke. Nedenstående lister jeg et tip til hvordan det også kan laves via en såkaldt parameterforspørgsel stort set uden brug af kode eks. tager udgangspunkt i et salgssystem.

Lav en forspørgsel denne skal så fungere som postkilde til rapporten. Medtage alle relevante felter.

Eks.
I forspørgseldesign kan man gøre følgende:

I feltet Salgsdato skrives der følgende: Between [Forms]![frmrapport![Startdato]And[Forms]![frmrapport]![slutdato]

I feltet Vartype skrives følgende:[Forms]![frmrapport]![Vartype]

Gem og luk forspørgsel

Opret en ny form, navngiv den frmrapport, indsæt 3 ubunde tekstbokse og navngiv dem:Startdato,Slutdato,Varetype. Indsæt en kommandoknap, navngiv den cmdrunreport, ved OnClick eventet, skriver du: DoCmd.OpenReport "NavnPåRapport",,acPreview

Gem og luk formen.

Åben formen igen, indtast start og slutdato, samt navnet på en specifik varetype, og klik på knappen, nu åbnes rapporten, med de angivne kriterier.

Hvis man i Accesshjælpen søger på ovenstående problematik er det nøjagtig det der kommer frem

Det kan sagtens udbygges med mange flere kritrier i forspørgslen, og tekstbokse på formen. Jeg har en demodb som netop anvender ovenstående metode, du velkommen til at få en kopi, blot post din mailadresse.
Avatar billede alexander_j Nybegynder
29. juni 2006 - 15:08 #19
Jamen så deler vi da bare mugs
Avatar billede fdata Forsker
30. juni 2006 - 10:22 #20
... og så nåede vi tilbage til kernen i problemet  ;o)
(28/06-2006 20:16:39)
Avatar billede alexander_j Nybegynder
30. juni 2006 - 11:42 #21
Feltnavnet var nu korrekt, det var bare ikke defineret i forespørgslen - men lidt søgt kan man vel godt sige du havde ret eller hvad???
Avatar billede fdata Forsker
30. juni 2006 - 12:54 #22
Tjah... Det fremgik jo ikke helt klart, om du baserede din rapport på en tabel eller en forespørgsel. Fejlmeddelelsen indikerede, at [comments]![user_id] var "ukendt" i din parameterstreng - og det viste sig jo at være korrekt.
Det vigtigste er at du fandt fejlen og kan komme videre  ;o)
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