Printer koppelen aan database

Status
Niet open voor verdere reacties.

remmie63

Gebruiker
Lid geworden
4 jan 2011
Berichten
396
Ik heb met hulp van dit forum een database gebouwd voor het inventariseren van een planten bestand. Nu wil ik met de db graag labels uitprinten.
De db is zo gemaakt dat er voorafgaande aan de printopdracht eerst gevraagd wordt welke plant- en hoeveel van deze plant geprint moet worden.
Met Access krijg ik de labels niet ingesteld en daarom gebruik is een extern programma (Bartender). Koppeling met een db is hier mogelijk alleen leest bartender alle records van de db en pakt hij niet de geselecteerde. Iemand een idee hoe dit aan te pakken?
De db zet ik er vanavond als bijlage bij! Dat lukt vanuit mijn werk niet.
 
Aan de db hebben we niet zoveel, tenzij je ook de printer er bij doet... Op pagina 25 van de handleiding van BarTender staat niet zo bar veel, anders dan dat je met Access kunt koppelen, en de wizard moet volgen. Als je dat doet, zul je ongetwijfeld ook een query kunnen kiezen als basis i.p.v. een tabel.
 
Dat stukje had ik ook al gelezen maar het gaat vlgs mij niet over een query. Er is een stuk code ingebouwd welke checked of er wel of niet een selectie is gemaakt en waarmee ik de aantallen kan bepalen en dan zou ik met bartender daar op moeten aansluiten. Het is gebasseerd op de db: "Etiketten Printen op A4 vel_XP".
Ik heb de db toch maar even bijgevoegd.
Bekijk bijlage Planten bestand T+K.rar
 
Tja, en nu? Je moet in ieder geval je printer bij het rapport instellen op je Bartender. Denk ik. Al vermoed ik dus dat de rest bij Bartender ligt, die je een query moet voorschotelen. Access doet hier verder niks mee. Ook je label lay-out moet dus in Bartender.
 
Ik heb de serverinstelingen voor printers op de nieuwe printer ingesteld en heb dat ook in Access gedaan. En hij print ook gewoon, echter alle records, en dat is dus niet de bedoeling (en ook niet vlgs lay-out). Er is een mogelijkheid om in Bartender een query in te bouwen. Zie bijgesloten afbeelding.

Bartender qeury.jpg
 
Laatst bewerkt:
Ik zie de afbeelding niet. Maar ik geloof je op je blauwe ogen :)
 
Werkt zo te zien op ongeveer dezelfde manier als Access. Kwestie van je tabel uitklappen, velden selecteren en het criterium toevoegen. Overigens zou ik, als ik jou was, het voorwerk in Access doen en een tijdelijke tabel maken die de gefilterde records bevat. Dan kun je die koppelen aan je printer, en hoef je alleen maar de data in de tijdelijke tabel bij te werken.
Dat doe je dan met een Delete query (tijdelijke tabel leegmaken) en een Toevoegquery (query resultaat in de tijdelijke tabel zetten).
 
En via een omweg: om met de data (geproduceerd met code: dus aantal van specifiek record) net zoals een "make table query" een nieuwe tabel te maken waar die records in staan om te printen, en die bij afsluiten zijn records verwijdert?
 
Kun je doen, maar is in mijn ogen geen betere oplossing, omdat de opmaak dan ook weg is. Dus een tijdelijke tabel maken zou mijn voorkeur hebben. Je koppelt je labels immers ook aan een bestaande tabel, en die moet er dan wel al zijn. De procedure is simpel zat
Code:
    DoCmd.SetWarnings False
    DoCmd.RunSQL "DELETE FROM tblTemp"
    strSQL = "SELECT [Veld1], [Veld2] INTO tblTemp"
    DoCmd.RunSQL strSQL
    DoCmd.SetWarnings True
Als dummy code voorbeeld.
 
Vlgs mij zitten we op hetzelfde spoor! Vraag is dan alleen, omdat er een stuk code in zit, wat voeg ik dan toe aan die code zodat de geselecteerde data in een tabel terecht komt?
 
Ik snap het niet helemaal; je hebt nu een knop die het rapport opent. Dat werkt volgens jou niet, en daarom wil je met Bartender gaan werken. Ik denk dan: je print je rapport niet meer, maar werkt vanuit Bartender. En daar is dan die tijdelijke tabel voor bedoeld. De query die je gebruikt om het rapport te maken, gebruik je nu om de tabel te vullen. De ene code dus vervangen door de andere.
 
Nee, ik heb een knop die de selectie qry opent, vervolgens selecteer ik mijn record(s) dan druk ik op de printknop en krijg ik de vraag:"hoeveel labels overslaan" en dan het "aantal" en dat gaat naar het rapport.
 
Die knop opent het rapport, en vanuit het rapport worden de vragen gesteld. Dus niet andersom. Bovendien heb je het rapport niet meer nodig, maar de knop wel. Alleen moet die knop dus niet meer het rapport openen, maar de tabel vullen. Overigens zitten er in het rapport maar 2 velden, en gebruik je er in de onderliggende query van het rapport 33!!. Over Overkill gesproken :)
 
De code verwijst naar het rapport [Rpt-Label]. Verander ik dit dan simpelweg in query [Rpt-Label]? En maak ik een toevoegqry met die naam, een verwijderqry en een tabelletje?
Wat betreft die 33 velden: deze qry wordt voor meerdere rapporten gebruikt!
 
Dan nog; in je labels heb je maar 2 of 3 velden nodig. Je kunt voor een rapport overigens prima een 'ingesloten' query gebruiken, dat hoeft geen opgeslagen query te zijn. Geldt dus ook voor de twee queries die je nodig hebt: die hoef je niet op te slaan, maar kun je samenstellen in de VBA. Dat rapport heb je helemaal niet nodig, dus probeer dat te vergeten ;)
 
Kun je mij dan met de twee ingesloten qry's helpen? Ik zou niet weten hoe te beginnen.
 
Het gaat dan om dit stukje code:

Code:
Option Compare Database
Option Explicit

Dim intLabelBlanks As Integer
Dim intLabelCopies As Integer
Dim intBlankCount As Integer
Dim intCopyCount As Integer

Private Sub Report_Close()
    If fIsLoaded("SelectieMaken") Then
        Forms!SelectieMaken.Form.Visible = True
    Else
        DoCmd.OpenForm "SelectieMaken"
    End If
End Sub

Private Sub Report_Open(Cancel As Integer)
    LabelSetup
End Sub

Private Sub Report_Activate()
    LabelInitialize
End Sub
      
Function LabelSetup()
'-------------------------------------------------------------------------------------------------------
'Deze functie vraagt met een Inputbox om de startpositie, en het aantal etiketten per record.
'-------------------------------------------------------------------------------------------------------
  intLabelBlanks = Val(InputBox$("Hoeveel labels overslaan", "1e Label opgeven", 0))
  intLabelCopies = Val(InputBox$("Hoeveel kopieën van een label print", "Aantal etiketten opgeven", 1))
  If intLabelBlanks < 0 Then intLabelBlanks = 0
  If intLabelCopies < 1 Then intLabelCopies = 1
End Function

Function LabelInitialize()
'-------------------------------------------------------------------------------------------------------
'The following function sets the variables to a zero
'-------------------------------------------------------------------------------------------------------
   intBlankCount = 0
   intCopyCount = 0
End Function

Function LabelLayout(R As Report)
'-------------------------------------------------------------------------------------------------------
'This function is the main part of this code that allows the labels to print as the user desires.
'-------------------------------------------------------------------------------------------------------
   If intBlankCount < intLabelBlanks Then
      R.NextRecord = False
      R.PrintSection = False
      intBlankCount = intBlankCount + 1
   Else
      If intCopyCount < (intLabelCopies - 1) Then
         R.NextRecord = False
         intCopyCount = intCopyCount + 1
      Else
         intCopyCount = 0
      End If
   End If
End Function
 
Daar gaat het inderdaad niet om ;) Dit zit op het rapport, en dat ga je dus niet meer gebruiken. Het gaat om de code van je printknop.

Code:
Private Sub cmdPrinten_Click()
Dim strSQL As String
Dim obj As AccessObject, dbs As Object
Dim bChk As Boolean

    'Eerst controleren of er records zijn geselecteerd.
    x = DCount("[Selectie]", "[Planten T+K]", "[Selectie]=TRUE")
    If x = 0 Then
        MsgBox ("Eerst een adres/persoon selecteren")
        Exit Sub
    End If
    
    'Controleren of de tabel al bestaat. Anders moet die worden aangemaakt.
    Set dbs = Application.CurrentData
    For Each obj In dbs.AllTables
        If obj.Name = "tblTemp" Then
            bChk = True
            Exit For
        End If
    Next obj

    If bChk = True Then     'Tabel bestaat, dus tabel leegmaken en vullen
        strSQL = "DELETE FROM tblTemp"
        CurrentDb.Execute strSQL, dbFailOnError
        'Toevoeg query
        strSQL = "INSERT INTO tblTemp ( [Plantnaam NL], [Plantnaam Latijn], Prijs, Selectie) " _
            & "SELECT [Plantnaam NL], [Plantnaam Latijn], " _
            & "Round([Inkoopprijs]*[BTW]*[% factor]*[Afb GROOTTE],2) AS Prijs, Selectie " _
            & "FROM [Qry Prijs] WHERE (Selectie=True);"
    Else                    'Tabel bestaat niet, dus tabel aanmaken
        'Tabelmaak query
        strSQL = "SELECT [Plantnaam NL], [Plantnaam Latijn], " _
            & "Round([Inkoopprijs]*[BTW]*[% factor]*[Afb GROOTTE],2) AS Prijs, Selectie INTO tblTemp " _
            & "FROM [Qry Prijs] WHERE (Selectie=True);"
    End If
    CurrentDb.Execute strSQL, dbFailOnError
    
End Sub

Deze code maakt een tabel [tblTemp] aan, of maakt hem leeg en vult hem met de nieuwe selectie. Je labelprinter moet je dus koppelen aan de tabel tblTemp, en dan heb je alles wat je af wilt drukken in je printer zitten.
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan