16. juli 2004 - 07:35Der er
84 kommentarer og 3 løsninger
Print resultat af søgning i formular
Hejsa,
Jeg har en formular med nogle søge felter og et felt til at vise resultaterne når man har trukket på søg knappen. Jeg vil nu gerne oprette en knap som udskriver resultatet af søgningen og kun det. Den eneste måde jeg har kunne finde, er at trykke på print knappen i menu linien, men den udskriver alt i formularen også designet,søgefelter osv. men jeg skal kun udskrive resultatet af søgningen. Det er også et problem hvis der er rigtig mange poster, så udskriver den jo kun det der er på skærmen. er der nogen der kan hjælpe med det her.
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
det med "Du kan på felternes egenskaber angive om de skal medtages på udskrift eller ej (egenskaben Vises)" er rigtig godt men kan man få den til at udskrive alle posterne den finde ved søgningen, jeg har prøvet nu og den tager kun dem der vises i vinduet, altså ikke dem der ligger under, som man kan se ved at køre ned med scrollbaren. kan man lavet det så den udskriver det hele??
Desværre ikke med DoCmd.RunCommand acCmdPrintPreview ... det er kun aktuel visning som udskrives med denne funktion. Bedste løsning er oprettelse af en rapport på baggrund af dine søgekriterier.
sonos > resultatet i din formular bygger vel på en forespørgsel, med de pågøldende filter-kriterier ... du kan så bygge rapporten på selvsamme forespørgsel
Det er 4 forespørgsler ( alle startende med SELECT ) som giver resultatet af søgningerne, det er dem som skal isoleres til rapporten .... Terry >>> har du mere tid ... jeg skal på arbejdet c",)
On Error Resume Next Dim db As Database Dim qdef As QueryDef Set db = CurrentDb DoCmd.DeleteObject acQuery, "tmp" Set qdef = db.CreateQueryDef("tmp", Me![LstName].RowSource) DoCmd.OpenQuery "tmp", acViewPreview
øøhh, "Du skal oprette en global variable med navn LastFilter Global LastFilter as string" der er jeg allerede stået af, jeg ved ikke hvad dette betyder :( så kan du skære det ud i "pap" så jeg måske kan forstå det
Jeg må ikke sende den til dig, ikke fordi den indeholder noget specielt vigtigt, men det er en firmapolitik. Men hvis du kan hjælpe med at få det foreslag jensen363 kom med, til at virke så er det det jeg skal bruge. det virker sådan at når jeg trykke på knappen så skal jeg indtaste søgekriteriet igen, så hvis man kan få den til at finde søgekriteriet i de felter som er der i forvejen, så er det helt perfekt, hans foreslag ser sådan ud : Private Sub valgknap_Click()
Dim tmp1 As String On Error Resume Next Dim db As Database Dim qdef As QueryDef
If valgst <> " " Then tmp1 = "SELECT sted.stat, almen.cirknr, tidnr.fradato, tidnr.tildato, tidnr.frakl, tidnr.tilkl,sted.rfc " tmp1 = tmp1 & "FROM (sted INNER JOIN almen ON sted.stfork = almen.stfork) INNER JOIN tidnr ON almen.cirknr = tidnr.cirknr " tmp1 = tmp1 & "WHERE ((dato between tidnr.fradato AND tidnr.tildato) AND ((sted.stfork)=valgst)) " tmp1 = tmp1 & "ORDER BY sted.stat; " ElseIf valgfckmp <> " " Then tmp1 = "SELECT sted.stat, almen.cirknr, tidnr.fradato, tidnr.tildato, tidnr.frakl, tidnr.tilkl,sted.rfc " tmp1 = tmp1 & "FROM (sted INNER JOIN almen ON sted.stfork = almen.stfork) INNER JOIN tidnr ON almen.cirknr = tidnr.cirknr " tmp1 = tmp1 & "WHERE ((dato between tidnr.fradato AND tidnr.tildato) AND ((sted.fc)=valgfckmp OR (sted.kmp)=valgfckmp)) " tmp1 = tmp1 & "ORDER BY sted.stat; " ElseIf valgrfc <> "RFC" Then tmp1 = "SELECT sted.stat, almen.cirknr, tidnr.fradato, tidnr.tildato, tidnr.frakl, tidnr.tilkl, sted.rfc, sted.fc,sted.kmp " tmp1 = tmp1 & "FROM (sted INNER JOIN almen ON sted.stfork = almen.stfork) INNER JOIN tidnr ON almen.cirknr = tidnr.cirknr " tmp1 = tmp1 & "WHERE ((dato between tidnr.fradato AND tidnr.tildato) AND ((sted.rfc)=valgrfc)) " tmp1 = tmp1 & "ORDER BY sted.stat; " Else tmp1 = "SELECT sted.stat, almen.cirknr, opfoelg.fakfra, opfoelg.faktil, sted.rfc, sted.fc, sted.kmp " tmp1 = tmp1 & "FROM (sted INNER JOIN almen ON sted.stfork = almen.stfork) INNER JOIN opfoelg ON almen.cirknr = opfoelg.cirknr " tmp1 = tmp1 & "WHERE ((dato between opfoelg.fakfra AND opfoelg.faktil) AND ((sted.rfc)= 'RFC Fa')) " tmp1 = tmp1 & "ORDER BY sted.stat; " End If
Det var vist mig, som kom med det forslag, og ikke Jensen363 ;o)
Jeg ville bare lave en ny knap og lægge denne kode på:
On Error Resume Next Dim db As Database Dim qdef As QueryDef Set db = CurrentDb DoCmd.DeleteObject acQuery, "tmp" Set qdef = db.CreateQueryDef("tmp", Me![LstName].RowSource) DoCmd.OpenQuery "tmp", acViewPreview
Derved kan du vælge at udskriv resultatet, hvis du vil.
Hmm, det gør den vel ikke, når du klikker på valgknap-knappen?
Ideen er, at den blot tager den SQL (forespørgsel) som du har lagt på din listboks og generere en ny forespørgsel, som så udskrives. Så hvis din listboks virker, så burde den nye knap også virker.
der er 4 kriteriefelter, hvis jeg har noget i 2 af dem, så spørger den nye knap om de 2 igen og det samme hvis jeg kun har i 1 af dem så spørger den kun om den ene
hmm, prøv engang at indsætte 2 linier kode, således at koden nu ser således ud:
debug.Print Me![LstName].RowSource Exit sub On Error Resume Next Dim db As Database Dim qdef As QueryDef Set db = CurrentDb DoCmd.DeleteObject acQuery, "tmp" Set qdef = db.CreateQueryDef("tmp", Me![LstName].RowSource) DoCmd.OpenQuery "tmp", acViewPreview
-Kør formularen -klik først på valgknap'en og derefter på udskrift-knappen (bare én gang). -Tryk Ctrl+G og aflæs SQL'en i Immidiate-vinduet (formentlig nederst i VBA-editoren) -Copy/paste SQL'en her
terry-> resultatet af den genererede SQL ligger jo på en listboks, som ønskes udskrevet. Hvis listen er længere end der kan vises på skærmen, så duer det jo ikke at udskrive formen. Det er derfor, jeg foreslog, at man blot genererede en ny forespørgsel ud fra SQL'en, som lå på listboksen, og udskrev den....
SELECT sted.stat, almen.cirknr, tidnr.fradato, tidnr.tildato, tidnr.frakl, tidnr.tilkl, sted.rfc, sted.fc,sted.kmp, sted.landsdel FROM (sted INNER JOIN almen ON sted.stfork = almen.stfork) INNER JOIN tidnr ON almen.cirknr = tidnr.cirknr WHERE ((dato between tidnr.fradato AND tidnr.tildato) AND ((sted.rfc)=valgrfc)) ORDER BY sted.stat;
SELECT sted.stat, almen.cirknr, opfoelg.fakfra, opfoelg.faktil, sted.rfc, sted.fc, sted.kmp FROM (sted INNER JOIN almen ON sted.stfork = almen.stfork) INNER JOIN opfoelg ON almen.cirknr = opfoelg.cirknr WHERE ((dato between opfoelg.fakfra AND opfoelg.faktil) AND ((sted.rfc)= 'RFC Fa')) ORDER BY sted.stat;
Prøv at flytte linien Dim tmp1 As String op i toppen (lige under Option Compare Database og Option Explicit)
Herefter kan koden på udskrift-knappen ændres til:
On Error Resume Next Dim db As Database Dim qdef As QueryDef Set db = CurrentDb DoCmd.DeleteObject acQuery, "tmp" Set qdef = db.CreateQueryDef("tmp", tmp1) DoCmd.OpenQuery "tmp", acViewPreview
SELECT sted.stat, almen.cirknr, opfoelg.fakfra, opfoelg.faktil, sted.rfc, sted.fc, sted.kmp FROM (sted INNER JOIN almen ON sted.stfork = almen.stfork) INNER JOIN opfoelg ON almen.cirknr = opfoelg.cirknr WHERE ((dato between opfoelg.fakfra AND opfoelg.faktil) AND ((sted.rfc)= 'RFC Fa')) ORDER BY sted.stat;
SELECT sted.stat, almen.cirknr, tidnr.fradato, tidnr.tildato, tidnr.frakl, tidnr.tilkl, sted.rfc, sted.fc, sted.kmp, sted.landsdel FROM (sted INNER JOIN almen ON sted.stfork = almen.stfork) INNER JOIN tidnr ON almen.cirknr = tidnr.cirknr WHERE (((sted.rfc)=[valgrfc]) AND (([dato]) Between [tidnr].[fradato] And [tidnr].[tildato])) ORDER BY sted.stat;
Jeg har tidligere gået ud fra, at alle felter i SQL'en var felter i tabellen. Men fejlen ligger åbenbart i, at SQL'en er skrevt til at referere til formularens felter, hvorfor man entel skal ændre referencen eller indsætte værdien eksakt.
Prøv at udskifte koden på valgknappen med denne og se om vi kommer nærmere:
Private Sub valgknap_Click()
Dim tmp1 As String
If valgst <> " " Then tmp1 = "SELECT sted.stat, almen.cirknr, tidnr.fradato, tidnr.tildato, tidnr.frakl, tidnr.tilkl,sted.rfc " tmp1 = tmp1 & "FROM (sted INNER JOIN almen ON sted.stfork = almen.stfork) INNER JOIN tidnr ON almen.cirknr = tidnr.cirknr " tmp1 = tmp1 & "WHERE ((dato between tidnr.fradato AND tidnr.tildato) AND ((sted.stfork)='" & valgst & "')) " tmp1 = tmp1 & "ORDER BY sted.stat; " ElseIf valgfckmp <> " " Then tmp1 = "SELECT sted.stat, almen.cirknr, tidnr.fradato, tidnr.tildato, tidnr.frakl, tidnr.tilkl,sted.rfc " tmp1 = tmp1 & "FROM (sted INNER JOIN almen ON sted.stfork = almen.stfork) INNER JOIN tidnr ON almen.cirknr = tidnr.cirknr " tmp1 = tmp1 & "WHERE ((dato between tidnr.fradato AND tidnr.tildato) AND ((sted.fc)='" & valgfckmp & "' OR (sted.kmp)='" & valgfckmp & "')) " tmp1 = tmp1 & "ORDER BY sted.stat; " ElseIf valgrfc <> "RFC" Then tmp1 = "SELECT sted.stat, almen.cirknr, tidnr.fradato, tidnr.tildato, tidnr.frakl, tidnr.tilkl, sted.rfc, sted.fc,sted.kmp " tmp1 = tmp1 & "FROM (sted INNER JOIN almen ON sted.stfork = almen.stfork) INNER JOIN tidnr ON almen.cirknr = tidnr.cirknr " tmp1 = tmp1 & "WHERE ((dato between tidnr.fradato AND tidnr.tildato) AND ((sted.rfc)='" & valgrfc & "')) " tmp1 = tmp1 & "ORDER BY sted.stat; " Else tmp1 = "SELECT sted.stat, almen.cirknr, opfoelg.fakfra, opfoelg.faktil, sted.rfc, sted.fc, sted.kmp " tmp1 = tmp1 & "FROM (sted INNER JOIN almen ON sted.stfork = almen.stfork) INNER JOIN opfoelg ON almen.cirknr = opfoelg.cirknr " tmp1 = tmp1 & "WHERE ((dato between opfoelg.fakfra AND opfoelg.faktil) AND ((sted.rfc)= 'RFC Fa')) " tmp1 = tmp1 & "ORDER BY sted.stat; " End If
SELECT sted.stat, almen.cirknr, opfoelg.fakfra, opfoelg.faktil, sted.rfc, sted.fc, sted.kmp FROM (sted INNER JOIN almen ON sted.stfork = almen.stfork) INNER JOIN opfoelg ON almen.cirknr = opfoelg.cirknr WHERE ((dato between opfoelg.fakfra AND opfoelg.faktil) AND ((sted.rfc)= 'RFC Fa')) ORDER BY sted.stat;
On Error Resume Next Dim db As Database Dim qdef As QueryDef Set db = CurrentDb DoCmd.DeleteObject acQuery, "tmp" Set qdef = db.CreateQueryDef("tmp", tmp1) DoCmd.OpenQuery "tmp", acViewPreview
Ok, jeg kan også godt leve med at man taster kriteriet ind igen, der er jo ikke det store arbejde. og da det ikke er mig der har lavet basen fra bunden, så kan jeg jo ikke hjælpe jer så godt.
Hvis du åbner en af de 4 tabeller (almen, sted, tidnr eller opfoelg) hvilken en af dem ligger feltet dato så i? (åh, hvor ville det være nemt, hvis man kunne få lov at se databasen i stedet for at skulle famle i blinde - nå, men det er jo reglerne ;o)
SELECT sted.stat, almen.cirknr, tidnr.fradato, tidnr.tildato, tidnr.frakl, tidnr.tilkl, sted.rfc, sted.fc, sted.kmp FROM (sted INNER JOIN almen ON sted.stfork = almen.stfork) INNER JOIN tidnr ON almen.cirknr = tidnr.cirknr WHERE (((sted.rfc)='RFC FA') AND (([dato]) Between [tidnr].[fradato] And [tidnr].[tildato])) ORDER BY sted.stat;
Sendt retur....problemet var en slags 'omvendt' kriterie, hvor parameteren Dato stod som ny kolonne, mens kriteriet var 2 værdier fra de eksisterende tabeller (lidt svært at forklare ;)
Terry er vist nok ret lige glad, og jeg selv stod af ret tidligt i forløbet ... så det er helt fortjent at du får alle point c",)
Synes godt om
Ny brugerNybegynder
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.