bei Berichten man kann, wenn man die Recourdsource leer gelassen hat,
_E_I_N_M_A_L_I_G_ beim Start die Recordsource eines Berichtes bzw.
Unterberichtes setzen -- wenn sie denn einmal gesetzt wurde, nicht mehr.
Das daraus entstehende Problem, dass - da automatisch die Öffnungsroutine
intern mehrmals durchlaufen wird - beim zweiten bis n. Durchlauf ein Fehler
auftritt, habe ich einfach ganz brutal (ich weiss, schlechter
Programmierstil) mittels eines "On Error Resume Next" abgewürgt. Das hat bei
mir eigentlich bisher immer gut funktioniert. <achselzuck>
--
mit freundlichen Grüßen aus Nürnberg
Klaus Oberdalhoff KO...@gmx.de
Ich beantworte keine NG-Fragen und -Nachfragen per Mail!
Newbie-Info: http://www.doerbandt.de/Access/Newbie.htm
KnowHow-mdb und andere Beispiele: http://www.freeaccess.de
Sofern Access 200x bitte beachten:
http://www.freeaccess.de/MS-Access-Artikel.asp?ID=99
Ich unterstütze PASS Deutschland e.V. (http://www.sqlpass.de)
Nächstes Treffen in Nürnberg am 23.10.2007
martin wrote:
Abgesehen von Klaus' Variante geht das bei Unterberichten offiziell nur
ueber eine gespeicherte Abfrage.
Wenn der Unterbericht die Abfrage qryUB als Datenherkunft hat, kannst du in
Report_Open des HAUPTberichts die Recordsource so aendern:
Set Db = CurrentDb
Set strSQL = "SELECT ... FROM ..." 'Neue Recordsource
Db.QueryDefs("qryUB").SQL = strSQL
Gruss - Peter
--
Ich beantworte keine Fragen per Email.
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com
Danke
Martin
martin wrote:
> Der String mit dem SQL Statement darf allerdibgs eine gewisse Länge nicht
> überschreiten.(> Set strSQL = "SELECT ... FROM ..." 'Neue Recordsource)
Welche Version setzt du denn ein? Seit A02(?) sind es lt. OH "approximately
64,000" Zeichen.
Zeig mal deinen Code, einschl. Deklarationen.
> den Tip von Klaus habe ich leider nicht hingekriegt
OK, dann hier ein zweiter Tipp:
Stelle die Recordsource fix auf eine Abfrage mit einem bestimmten Namen und
erstelle/ändere vor dem Öffnen des Berichtes diese Abfrage nach dem
folgenden Prinzip (DAO)
Function CreateQuery(strSQL As String, Optional Queryname As String =
"qrySorting") As Boolean
Dim dbs As Database
Dim qdf As QueryDef
On Error GoTo CreateQuery_Error
Set dbs = CurrentDb
If ObjectExists("Query", Queryname) Then
DoCmd.DeleteObject acQuery, Queryname
End If
Set qdf = dbs.CreateQueryDef(Queryname, strSQL)
DoEvents
CreateQuery = True
On Error GoTo 0
Exit Function
CreateQuery_Error:
' MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure
CreateQuery of Modul DataFunctions"
CreateQuery = False
End Function
Klaus Oberdalhoff schrieb folgendes:
> OK, dann hier ein zweiter Tipp:
>
> Stelle die Recordsource fix auf eine Abfrage mit einem bestimmten
> Namen und erstelle/ändere vor dem Öffnen des Berichtes diese
> Abfrage nach dem folgenden Prinzip (DAO)
>
> Function CreateQuery(strSQL As String, Optional Queryname As String
> = "qrySorting") As Boolean
...
warum nicht nur ein:
dbs.QueryDefs(Queryname).SQL = strSQL
Gruß
Gunter
--
__________________________________________________________
Access FAQ: http://www.donkarl.com
home: http://www.avenius.com - http://www.AccessRibbon.de
10. Access-Entwickler-Konferenz (AEK)
Nürnberg 6./7.10.2007 und 20./21.10.2007
http://www.donkarl.com/?AEK
ich habe ein ähnliches Problem wie martin, komme aber gar nicht so weit
(Access 97). Ich erhalte die Fehlermeldung Nr. 2455 "Sie haben einen Ausdruck
eingegeben, der einen unzulässigen Verweis auf die Eigenschaft Form/Report
enthält. Die Eigenschaft existiert eventuell nicht oder glit nicht für das
von Ihnen angegebene Objekt." Ist meine Syntax falsch??? Ich schreibe (in
Report_Open des Hauptberichts):
Unterbericht.Report.Recordsource = "SELECT ..."
und wende dies auf einen Bericht mit einer leeren recordsource an.
Thomas
Thomas Pomper wrote:
Hast du meine Antwort auf das OP gelesen?
Du kannst zur Laufzeit die RecordSource-Eigenschaft eines Unterberichts
*nicht* aendern.
> Du kannst zur Laufzeit die RecordSource-Eigenschaft eines
> Unterberichts *nicht* aendern.
Tut mit ja leid, dir widersprechen zu müssen, aber das stimmt so nicht ganz.
Es ist wie bei Radio Eriwan:
Du kannst sie beim Öffnen ändern - ABER NUR EINMALIG - und nur dann, wenn
der die Recordsource <leer> d.h. nicht gesetzt ist.
Du kannst (ich glaube aber erst ab Access 97 <g>) beim Öffnen auch die
RecordSource eines Unterberichtes ändern, aber nur solange sie leer / nicht
zugeordnet ist.
D.h. das wichtigste in einem solchen Programm, da die Öffnen-Routine u.U.
intern mehrfach durchlaufen wird, ist vor dem Setzen ein
On Error Resume Next
damit der Fehler, wenn die Routine intern ein zweites/drittes mal
durchlaufen wird, ignoriert wird. In diesem ganz speziellen Falle ist On
Error Resume Next IMHO nicht nur "ausnahmsweise geduldet" sondern fast
"zwingend erforderlich".
--
mit freundlichen Grüßen aus Nürnberg
Klaus Oberdalhoff KO...@gmx.de
Klaus Oberdalhoff wrote:
>
>> Du kannst zur Laufzeit die RecordSource-Eigenschaft eines
>> Unterberichts *nicht* aendern.
>
> Du kannst sie beim Öffnen ändern - ABER NUR EINMALIG - und nur dann, wenn
> der die Recordsource <leer> d.h. nicht gesetzt ist.
Also mit meiner Access-Version (A03 SP2 ;-) geht das nicht, auch nicht,
wenn sie leer ist. Nicht mal dann, wenn der UR weder Recordsource noch
gebundene Steuerelemente enthaelt.
Peter Doering wrote:
>
> Klaus Oberdalhoff wrote:
>>
>>> Du kannst zur Laufzeit die RecordSource-Eigenschaft eines
>>> Unterberichts *nicht* aendern.
>>
>> Du kannst sie beim Öffnen ändern - ABER NUR EINMALIG - und nur dann,
>> wenn der die Recordsource <leer> d.h. nicht gesetzt ist.
>
> Also mit meiner Access-Version (A03 SP2 ;-) geht das nicht, auch
> nicht, wenn sie leer ist. Nicht mal dann, wenn der UR weder
> Recordsource noch gebundene Steuerelemente enthaelt.
Vom Hauptbericht aus wird das IMO auch nix.
Das einzige, was in der Hinsicht geht, ist das Ändern der Recordsource
im Öffnen-Ereignis des Unterberichtes unter zwei Voraussetzungen:
1. Seine Eigenschaft Recordsource ist leer.
2. Der Unterbericht darf nicht mit dem Hauptbericht verknüpft sein.
Da v.a. letzteres in der Praxis eher selten vorkommt, empfehle
ich in bei solchem Begehe meistens, den Unterbericht auf einer
gespeicherten (evtl. Dummy-) Abfrage basieren zu lassen.
Deren SQL-Eigenschaft kann man im Öffnen-Ereignis des
Hauptberichtes noch problemlos und mit sofortiger Wirkung
umschreiben.
--
cu
Karl
********* Ich beantworte keine Access-Fragen per Email. *********
Access-FAQ: http://www.donkarl.com + Info zur
Access-Entwickler-Konferenz (AEK10) im Oktober in Nürnberg
Karl Donaubauer wrote:
> Peter Doering wrote:
>> Klaus Oberdalhoff wrote:
>>>
>>>> Du kannst zur Laufzeit die RecordSource-Eigenschaft eines
>>>> Unterberichts *nicht* aendern.
>>>
>>> Du kannst sie beim Öffnen ändern - ABER NUR EINMALIG - und nur dann,
>>> wenn der die Recordsource <leer> d.h. nicht gesetzt ist.
>>
>> Also mit meiner Access-Version (A03 SP2 ;-) geht das nicht, auch
>> nicht, wenn sie leer ist. Nicht mal dann, wenn der UR weder
>> Recordsource noch gebundene Steuerelemente enthaelt.
>
> Vom Hauptbericht aus wird das IMO auch nix.
> Das einzige, was in der Hinsicht geht, ist das Ändern der Recordsource
> im Öffnen-Ereignis des Unterberichtes unter zwei Voraussetzungen:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Ein nicht zu unterschaetzendes Detail ;-)
> 1. Seine Eigenschaft Recordsource ist leer.
> 2. Der Unterbericht darf nicht mit dem Hauptbericht verknüpft sein.
>
> Da v.a. letzteres in der Praxis eher selten vorkommt, empfehle
> ich in bei solchem Begehe meistens, den Unterbericht auf einer
> gespeicherten (evtl. Dummy-) Abfrage basieren zu lassen.
> Deren SQL-Eigenschaft kann man im Öffnen-Ereignis des
> Hauptberichtes noch problemlos und mit sofortiger Wirkung
> umschreiben.
Genau, so aehnlich hatte ich das weiter oben auch empfohlen.