Access stopt soms zonder foutmelding of waarschuwing

Status
Niet open voor verdere reacties.

jhdw

Gebruiker
Lid geworden
15 dec 2012
Berichten
166
Goedemorgen,

Ik zit met een raar probleem wat alleen voor komt in Access runtime (2016). Ik heb zelf ook Access 2016 - 32 bit.
Het probleem treedt ook niet elke keer op. In het weekend heb ik thuis een PC met een runtime versie van een collegea via een VPN benaderd en toen heb ik het probleem niet gehad. Het lijkt wel of het met de drukte op de server te maken heeft. Iedereen (gisteren waren er maar 3) is hun eigen FE bezig.

Hieronder de code waarbij het dan soms mis gaat:

Code:
Private Sub cmd_print_rapport_Click()
Dim rst As DAO.Recordset
Dim strSQL As String, strSQL1 As String, strSQL2 As String
Dim qTmp As QueryDef
Dim sRPT As String
Dim stdocname As String

   On Error GoTo cmd_print_rapport_Click_Error

        Me.Refresh
        Set qTmp = CurrentDb.QueryDefs("qCreditDealer")
        strSQL = "SELECT tbl_claim_basis.Claimnummer, tbl_claim_basis.Equipment, tbl_claim_basis.Serienummer, tbl_claim_basis.Referentie, tbl_claim_basis.Dealer, tbl_claim_basis.Merk, tbl_claim_basis.SAP_klantnumer, tbl_claim_basis.Uren_crediteren, tbl_claim_basis.Uurtarief, tbl_claim_basis.Status, tbl_claim_basis.Status_datum, tbl_credit_dealers.Creditnota_nummer, tbl_credit_dealers.Credit_datum "
        strSQL = strSQL & "FROM tbl_claim_basis LEFT JOIN tbl_credit_dealers ON tbl_claim_basis.Claimnummer = tbl_credit_dealers.Cnummer "
        strSQL = strSQL & "WHERE (((tbl_claim_basis.Claimnummer) = [Formulieren]![frm_dealer_crediteren]![Claimnummer]))"
        strSQL = strSQL & "GROUP BY tbl_claim_basis.Claimnummer, tbl_claim_basis.Equipment, tbl_claim_basis.Serienummer, tbl_claim_basis.Referentie, tbl_claim_basis.Dealer, tbl_claim_basis.Merk, tbl_claim_basis.SAP_klantnumer, tbl_claim_basis.Uren_crediteren, tbl_claim_basis.Uurtarief, tbl_claim_basis.Status, tbl_claim_basis.Status_datum, tbl_credit_dealers.Creditnota_nummer, tbl_credit_dealers.Credit_datum; "
        qTmp.sql = strSQL
        stdocname = "rpt_credit"
        sRPT = "K:\Data website\Creditnotas"
            If Dir(sRPT, vbDirectory) = "" Then MkDir sRPT
                sRPT = sRPT & "\" & Me.Claimnummer & ".pdf"
                    If Len(Dir(sRPT, vbDirectory)) > 0 Then Kill sRPT
        DoCmd.OutputTo acOutputReport, stdocname, acFormatPDF, sRPT, True, , , acExportQualityScreen
    
   On Error GoTo 0
   Exit Sub

cmd_print_rapport_Click_Error:

    Select Case Err.Number
        Case 70
            MsgBox "Je hebt nog een PDF bestand open staan!" & vbCrLf _
                & "" & vbCrLf _
                & "Deze eerst afssluiten en dan opnieuw proberen..", vbOKOnly Or vbExclamation, Application.Name
        Case Else
            MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure cmd_print_rapport_Click of VBA Document Form_frm_dealer_crediteren"
    End Select
    
End Sub

Het is de bedoeling dat elke keer als je op de printknop klikt het desbetreffende record als PDF wordt weggeschreven op de server. Als het PDF bestand al bestaat dan wordt deze eerst verwijderd en dan weggeschreven.

Ziet iemand iets in deze code waardoor het soms fout kan gaan.

Als het helpt, kan ik vanavond misschien nog wel een testje maken.

Een alternatief zou kunnen zijn om 's avonds een programma te laten draaien waarin alle creditnota's van die dag als PDF worden weggeschreven. Alleen ik weet niet hoe ik dat moet aanpakken.

Alle hulp is welkom.

Gr. Jan
 
Ik zie zo gauw niet waar het fout zou kunnen gaan, maar de Me.Refresh aan het begin zou volgens mij weg kunnen. Dat is een opdracht die wat tijd zou kunnen kosten, en waardoor je dus extra belasting op de procedure zet. Verder zou ik geen criterium maken waarbij je het formulier gebruikt; je kunt immers vanuit de knop de filterwaarde al ophalen. Sterker nog: dat doe je al bij de bestandsnaam :). Je krijgt dan zoiets:
PHP:
    strSQL = "SELECT tbl_claim_basis.Claimnummer, tbl_claim_basis.Equipment, tbl_claim_basis.Serienummer, tbl_claim_basis.Referentie, " _
        & "tbl_claim_basis.Dealer, tbl_claim_basis.Merk, tbl_claim_basis.SAP_klantnumer, tbl_claim_basis.Uren_crediteren, tbl_claim_basis.Uurtarief, " _
        & "tbl_claim_basis.Status, tbl_claim_basis.Status_datum, tbl_credit_dealers.Creditnota_nummer, tbl_credit_dealers.Credit_datum " _
        & "FROM tbl_claim_basis LEFT JOIN tbl_credit_dealers ON tbl_claim_basis.Claimnummer = tbl_credit_dealers.Cnummer " _
        & "WHERE (tbl_claim_basis.Claimnummer = " & Me.Claimnummer & ") " _
        & "GROUP BY tbl_claim_basis.Claimnummer, tbl_claim_basis.Equipment, tbl_claim_basis.Serienummer, tbl_claim_basis.Referentie, " _
        & "tbl_claim_basis.Dealer, tbl_claim_basis.Merk, tbl_claim_basis.SAP_klantnumer, tbl_claim_basis.Uren_crediteren, tbl_claim_basis.Uurtarief, " _
        & "tbl_claim_basis.Status, tbl_claim_basis.Status_datum, tbl_credit_dealers.Creditnota_nummer, tbl_credit_dealers.Credit_datum; "

Maar probeer hem dus ook eens zonder de Refresh.
 
Ik gebruik een gelijkaardig, maar dan verborgen wegschrijven van een PDF voorafgaand aan het afdrukken zelf maar daarbij moet je de PDF niet verwijderen; die wordt gewoon overschreven (als die tenminste niet open staat). Spaart weer wat opzoekwerk voor de PC en een regeltje code uit.
 
Goedenavond,

Bedankt voor de reacties.

Ik heb vandaag het advies van Michel opgevolgd en de Refresh verwijderd. In deze code was deze refresh inderdaad overbodig, Op een andere plek in een subformulier wel, helaas heeft het niet geholpen. Op mijn eigen werk PC is er niks aan de hand maar op andere PC's met runtime gaat het soms mis en dat is het frusterende. Ging het maar altijd mis dan weet je zeker dat je een andere oplossing moet bedenken.

Ik ben nu wel toe aan plan B.
Elke avond draait er al een BE die de gegevens ververst en het lijkt mij de beste oplossing om daar iets aan toe te voegen.
Ik heb een test dB gemaakt met een aantal records. Op het formulier heb ik een knop "PDF jes ......" waaronder dan de code zou moeten komen om in een loop de creditnota's van vandaag op te slaan als PDF. Ik heb er nog een hulpknop opgezet om in één keer alle creditdatums op vandaag te zetten.

Wie zou mij hier mee kunnen helpen?

Alvast bedankt.

Gr. Jan
 

Bijlagen

  • Test_helpmij.zip
    70,6 KB · Weergaven: 12
Goedemorgen,

Ik heb de Where voorwaarde aangepast omdat de vorige niet 100% zekerheid geeeft. Als nl. de server een keer uit valt of iemand houdt 's avonds het programma bezet omdat hij/zij zonodig moet overwerken, dan werkt de date() voorwaarde de volgende dag natuurlijk niet meer. Ik heb nu een extra veld (Ja/Nee) toegevoegd die op Ja gezet moet worden als de PDF gemaakt.
In de bijlage een nieuw voorbeeld bestand.

Hopelijk kan iemand mij hiermee helpen.

Bekijk bijlage Test_helpmij (2).zip

Mvg
Jan
 
Waar heb je nog hulp bij nodig? Ik heb je code eens bekeken, en ik zie niet waarom hij niet goed zou werken, anders dan dat je een beetje slordig (in mijn ogen dan ;) ) programmeert. Ik heb in de pdf knop een pauze van 3 seconden ingelast; wellicht dat het probleem daarmee verholpen is. En ik zou de pdf ook niet automatisch laten openen; dus alleen wegschrijven. Tenslotte heb je het rapport ook al om te controleren of alles er goed op staat. Kijk maar eens of je er mee uit de voeten kan.
 

Bijlagen

  • Test_helpmij.zip
    81,6 KB · Weergaven: 31
Hallo Michel,

De code die ik onder de knop "PDF jes ...." had gezet was ook geen werkende code. Ik had alleen iets voorbereid waarmee je verder mee zou kunnen.

Ik heb jouw code in de productie dB verwerkt en op mijn eigen PC (met Access 2016) werkt het prima. Dat deed het voordien ook al. Daarna heb ik een PC (met Runtime 2016) van een collega over genomen. Bij de tweede PDF ging de dB onderuit, opnieuw geopend en toen ging het na de 13de mis. Er is dus geen touw aan vast te knopen wanneer en waarom het mis gaat.

Ik zat zelf te denken om op PC's met runtime de PDF jes niet meer te maken. Ze kunnen dan een creditnotanummer invullen, de datum wordt dan automatisch ingevuld en eventueel nog een print maken.

Op de server zou dan 's avonds / 's nachts een programma moeten draaien die van de openstaande creditnota's een PDF maakt en "PDF_gemaakt" op True zet.

Ik heb geen idee hoe de code er dan uit moet zien?

Alvast bedankt voor de hulp.

Gr. Jan
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan