[expr1000]=projectid wat is dit

Status
Niet open voor verdere reacties.

dinoshop

Terugkerende gebruiker
Lid geworden
8 sep 2000
Berichten
1.100
krijg in een planning als filter deze melding [Expr1000]
de code die rapport aanstuurt meegestuurd .
het moet dus iets zijn van teveel gegevens in een stuk code maar waar en welke .
denk zelf bij openen van rapport.


Code:
Private Sub Mail_Click()
Dim Email As String, FileName As String, Filepath As String
Dim strSQL As String
Dim rs As Recordset
Dim qTmp As QueryDef
Dim stDocName As String

Dim tmp As String
Dim folder As String
Me.Dirty = False

 On Error GoTo err_mail_click
  
    strSQL = "SELECT * FROM QryPlanningmail WHERE [projectid] = " & Me.CboProjectNR & " Order by Email"
    Set qTmp = CurrentDb.QueryDefs("TmpPlanning")
        qTmp.SQL = strSQL
        
    tmp = InputBox("", "", strSQL)
    
     strSQL = "SELECT * FROM TmpPlanning WHERE ([Email] Is Not Null And Not [Email] = """")"
    Set rs = CurrentDb.OpenRecordset(strSQL)
    If rs.RecordCount > 0 Then
       Do Until rs.EOF
            If Not Email = vbNullString Then Email = Email & ";"
            Email = Email & rs!Email
            rs.MoveNext
        Loop
    Else
        MsgBox "Geen email adressen..."
        Exit Sub
   End If
   
    
    
 ''Me.ProjectID.Requery
''opslaan in folder Verzonden met gevens projectid
stDocName = "rptPlanning"
folder = CurrentProject.Path & "\verzondenmail\"
DoCmd.OutputTo acOutputReport, stDocName, acFormatPDF, folder & Me!ProjectID & ".pdf"
''Verzenden

DoCmd.RunCommand acCmdSaveRecord
DoCmd.OpenReport stDocName, , , "[projectid]=" & Me.CboProjectNR, acHidden
DoCmd.SendObject acSendReport, stDocName, acFormatPDF, Email, "[projectid]=" & Me.CboProjectNR, , "Planning", True

DoCmd.Close acReport, "RptPlanning"

    

 If Len(Verzonden) = 0 Then
Verzonden.Value = False
Else
Verzonden.Value = True


 End If
    
Exit_mail_click:
Exit Sub
err_mail_click:
    MsgBox Err.Description
Resume Exit_mail_click

End Sub
 
Laatst bewerkt:
Als er al een fout is, zit die in de query van het rapport. Queries maken met het * is dan weliswaar makkelijk, je hebt geen controle over de velden meer. Dus als er een veld dubbel zit, dan krijg je een expr. veld. Blijkbaar zit dat er nog in bij jou.
 
dan nog een vraag je heir over
hij filter niet heb het al veranderd in me.filter maar nee hij blijft alles verzenden.
zou jij ff kunnen kijken waar dit in zit
ps had een dubbele id er instaan query
 
Dat is precies de reden dat ik tegenwoordig al mijn rapporten aan een vaste query hang, en m.b.v. de Querydefs selectie de bron van de query aanpas. Dan kan de door jou gebruikte methode de prullenbak in. Gek genoeg gebruik je de Querydef wel voor iets anders in dezelfde procedure ... Dus je weet hoe het werkt :)
 
dat deel heb ik ooit van jouw gekregen en snap daar nog niet veel van ,
zou jij op basis van de geleverde gegevens hem zo kunnen neerzetten dat die dus via query werkt en filtert
mijn dank zou groot zijn .
en dan ga ik dus kijken hoe je hebt gedaan en misschien valt kwartje .
 
Waarom zet je niet een linkje naar de Access cursus neer? Daar staat het beter uitgelegd en in het Nederlands :).
 
Zet dan tenminste die link naar die NL cursus neer.. (of leer engels).
 
Die 'link' staat gewoon op de voorpagina: de handleidingen sectie. En waarom moet ik Engels leren op een Nederlands forum? Bovendien denk ik niet dat jij me nog iets kunt leren waar het de Engelse taal betreft... Back on topic.

Code:
Dim qTmp As QueryDef
    strSQL = "SELECT * FROM QryPlanningmail WHERE [projectid] = " & Me.CboProjectNR & " Order by Email"
    Set qTmp = CurrentDb.QueryDefs("TmpPlanning")
    qTmp.SQL = strSQL

Laten we deze query eens als voorbeeld nemen, want hier zit een filter in op basis van de keuzelijst cboProjectNR. Je hebt een query gemaakt (TmpPlanning) en die query zou je dus als basis kunnen gebruiken voor je rapport. Oftwel: je bouwt je rapport op de query TmpPlanning. Deze query zou er, om te beginnen, zou uit kunnen zien:strSQL = "SELECT * FROM QryPlanningmail Order by Email". Het rapport moet natuurlijk wel dezelfde gegevens laten zien die je straks wilt mailen. Daarom is het een goede zaak om te beginnen met een query zonder filter.

In de functie gaan we nu diezelfde query toewijzen aan een variabele uit de QueryDefs collectie; die variabele wordt gedeclareerd met een naam, in dit voorbeeld dus qTmp. Een query heeft, zoals je ondertussen weet, altijd een SQL opdracht. En omdat we een object uit de QueryDefs collectie kunnen bewerken, kunnen we die SQL ook aanpassen. En dat doe je dus met de opdracht qTmp.SQL = strSQL.
Eigenlijk is het dus allemaal vrij simpel, en daarom gebruik ik het tegenwoordig bijna altijd bij rapporten die gefilterd moeten worden. De onder het rapport hangende query heeft steeds een andere bron (meestal dus een ander filter) en zal altijd werken. Omdat de recordbron gelimiteerd is, hoef je nooit meer te filteren op het rapport, en bij mailen heb je dus ook nooit meer problemen bij het versturen.
 
Code:
Dim qTmp As QueryDef
    strSQL = "SELECT * FROM QryPlanningmail WHERE [projectid] = " & Me.CboProjectNR & " Order by Email"
    Set qTmp = CurrentDb.QueryDefs("TmpPlanning")
    qTmp.SQL = strSQL
wat ik van begrijp is dat je de opdracht geef ga naar qryplanningmail en daar kijk je naar de projectid is deze zelfde als me.projectnr dan ga je naar de veld email
pak deze gegevens en zet deze in tijdelijke tmplanning.

dan komt bij probleem, hoe doe je dat met een rapport en wat moet die daar dan neer zetten . en ben al bezig om een soort van cursus te volgen via youtube.
 
In dit voorbeeld koppel je het rapport aan de query tmpPlanning.
 
en hoe zou dat er uit moeten zien met het onderste deel dan ? dus rapport mee zenden en gefilterd .
ik heb hier een boek staan php en sql maar das te summier qua informatie gaat over een tabel maken met sql en verder niet .
wel is zo dat ik nu opzoek ben naar een boek sql, dus heb je nog een tip qua boek graag.
 
Hetzelfde. Of je een rapport nu afdrukt of mailt, de output maak je op dezelfde manier. Je hoeft het rapport ook niet te veranderen, of er een andere query onder te hangen, want je verandert de SQL ervan.
 
ik heb er dit van gemaakt maar werkt niet
Code:
Dim Email As String, FileName As String, Filepath As String, sKlantnr As String, sRapport As String, sfilter As String
Dim strSQL As String
Dim strSQL_sRapport As String
Dim rs As Recordset
Dim qTmp As QueryDef
Dim tmp As String
Dim folder As String
Me.Dirty = False

 On Error GoTo Err_mail_click
 
 sRapport = "rptPlanning"
 sKlantnr = rs.Fields("CboProjectNR").Value

    
    strSQL = "SELECT * FROM QryPlanningmail WHERE [projectid] = " & Me.CboProjectNR & " Order by Email"
    Set qTmp = CurrentDb.QueryDefs("TmpPlanning")
        qTmp.SQL = strSQL
        
    tmp = InputBox("", "", strSQL)
    strSQL_sRapport = "select * from TmpRapport WHERE ([Projcetid]is not null and not[Projcetid]="""")"
     strSQL = "SELECT * FROM TmpPlanning WHERE ([Email] Is Not Null And Not [Email] = """")"
    Set rs = CurrentDb.OpenRecordset(strSQL)
    If rs.RecordCount > 0 Then
       Do Until rs.EOF
            If Not Email = vbNullString Then Email = Email & ";"
            Email = Email & rs!Email
            rs.MoveNext
        Loop
    Else
        MsgBox "Geen email adressen..."
        Exit Sub
   End If
  
folder = CurrentProject.Path & "\verzondenmail\"
DoCmd.OutputTo acOutputReport, "RptPlanning", acFormatPDF, folder & Me!ProjectID & ".pdf"
sfilter = " WHERE (ProjectID=" & sKlantnr & ");"
            strSQL_sRapport = strSQL_sRapport & sfilter
            Reports(sRapport).RecordSource = strSQL_sRapport
            DoCmd.Close acReport, sRapport, acSaveYes
DoCmd.OpenReport "RpTPlanning", acViewPreview, , Me.ProjectID, acHidden
DoCmd.SendObject acSendReport, sRapport, acFormatPDF, Email, , , "Planning", True

DoCmd.Close acReport, "RptPlanning"
Err_mail_click:
    MsgBox Err.Description
    

 If Len(Verzonden) = 0 Then
Verzonden.Value = False
Else
Verzonden.Value = True


 End If
    
Err_knop967_click:
    MsgBox Err.Description

End Sub

hij geeft aan dat die iets mist met blokvariabele is niet ingesteld
 
Omdat de link wat sneller uitkomst biedt, dan zoeken in 26 hoofdstukken.
Ik kan van jou geen link, noch een verwijzing naar de cursus vinden.... Virtueel linkje?
 
Laatst bewerkt door een moderator:
Dat het niet werkt, wil ik best geloven, want er zit nog steeds een dikke fout in. Eerst vul je deze variabele:
Code:
    strSQL_sRapport = "SELECT * FROM TmpRapport WHERE ([Projcetid]IS NOT NULL AND [Projcetid]="""")"
en verderop doe je dit:
Code:
    sfilter = " WHERE (ProjectID=" & sKlantnr & ");"
    strSQL_sRapport = strSQL_sRapport & sfilter
Je zet dus een extra filter op je sql voor je rapport. Je mag nooit twee keer een WHERE in een SQL hebben, dat ten eerste, maar veel belangrijker: ik heb al een paar keer gezegd dat je de SQL van de onder het rapport liggende query moet aanpassen, en niet filteren. En dat doe je nog steeds niet. Je zou het m.i. zo moeten doen:

Code:
    strSQL_sRapport = "SELECT * FROM TmpRapport WHERE (ProjectID=" & sKlantnr & ")"
    Set qTmp = CurrentDb.QueryDefs("qRapport")
    qTmp.SQL = strSQL
    DoCmd.OutputTo acOutputReport, "RptPlanning", acFormatPDF, Folder & Me!ProjectID & ".pdf"
    DoCmd.SendObject acSendReport, sRapport, acFormatPDF, Email, , , "Planning", True
Nogmaals: vergeet de techniek die je nu gebruikt, hang je rapport aan een vaste query (anders werkt het niet) en pas daar de SQL van aan. Je kunt het, want eerder in de procedure doe je het wél. Wat houdt je tegen om het goed te doen?
 
ben aan sleutelen geslagen wat ik er van maak ?????
wel is zo dat nu de query tmp goed word ingevuld dus dat werkt .
nu heb ik dit
Code:
Dim Email As String, FileName As String, Filepath As String
Dim strSQL As String
Dim rs As Recordset
Dim qTmp As QueryDef

''Dim tmp As String
Dim folder As String
Me.Dirty = False

 On Error GoTo Err_Mail_click
     
    strSQL = "SELECT * FROM QryPlanningmail WHERE [projectid] = " & Me.CboProjectNR & " Order by Email"
    Set qTmp = CurrentDb.QueryDefs("TmpMail")
        qTmp.SQL = strSQL
        
    strSQL = "Select * from QryPlanning WHERE [Projectid]=" & Me.CboProjectNR & "order by ProjectID"
        Set qTmp = CurrentDb.QueryDefs("tmpRapport")
        qTmp.SQL = strSQL
         
        
    ''tmp = InputBox("", "", strSQL)
    
     strSQL = "SELECT * FROM TmpMail WHERE ([Email] Is Not Null And Not [Email] = """")"
    Set rs = CurrentDb.OpenRecordset(strSQL)
    If rs.RecordCount > 0 Then
       Do Until rs.EOF
            If Not Email = vbNullString Then Email = Email & ";"
            Email = Email & rs!Email
            rs.MoveNext
        Loop
    Else
        MsgBox "Geen email adressen..."
        Exit Sub
   End If
   strSQL = "SELECT * FROM TmpPlanning WHERE ([ProjectID] Is Not Null And Not [ProjectID] = """")"
    Set rs = CurrentDb.OpenRecordset(strSQL)
    If rs.RecordCount > 0 Then
       Do Until rs.EOF
            If Not Email = vbNullString Then ProjectID = ProjectID & ";"
            ProjectID = ProjectID & rs!ProjectID
            rs.MoveNext
        Loop
    Else
        MsgBox "Geen email adressen..."
        Exit Sub
   End If
    
    
 Me.ProjectID.Requery

folder = CurrentProject.Path & "\verzondenmail\"
DoCmd.OutputTo acOutputReport, "RptPlanning", acFormatPDF, folder & Me!ProjectID & ".pdf"

DoCmd.OpenReport "RpTPlanning", acViewPreview, , Me.Filter, acHidden
DoCmd.SendObject acSendReport, "RptPlanning", acFormatPDF, Email, , , "Planning", True

DoCmd.Close acReport, "RptPlanning"
Err_Mail_click:
    MsgBox Err.Description

 If Len(Verzonden) = 0 Then
Verzonden.Value = False
Else
Verzonden.Value = True

 End If
    
End Sub
zoalsje net al zij zal hier dus aanspreken rapport nog niet goed zitten maar daar ga ik nu mee bezig
 
Nee slimmerd het linkje van Domero.
Zo slim ben ik dan gelukkig nog wel... Ik vroeg me alleen af wat de toegevoegde waarde voor TS is van het plaatsen van dit soort (overtollige) berichtjes. Waar dit er dan ook weer een van is :). En, mea culpa, dan ook de laatste van dit soort. Want ik steek liever tijd in berichtjes waar de TS wat aan heeft. Maar ik geef toe dat de omschrijving van de hoofdstukken een heel stuk beter kan. Maar ik zit niet meer in de redactie :).
 
Laatst bewerkt door een moderator:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan