gibt es eine elegante Methode, wie man in eine verknüpfte Tabelle (in
einem Backend) per VBA vom Frontend Felder hinzufügen, Indizes,
Beziehungen definieren etc. kann ?
Meine jetzige Idee wäre, die Tabelle zunächst mit TransferDatabase zu
importieren, sie 'vor Ort' zu ergänzen und dann wieder zu exportieren.
Ist aber ein wenig zu umständlich.
Wenn mir jemand eine bessere Lösung bieten könnte, würde ich mich
sehr freuen.
Ciao
Karl-Alfred Römer
Öffne doch die Backend - Datenbank im Frontend mit
set dbBackend = opendatabase("Backend.mdb")
dann kannst du ganz normal auf die Objekt - Hierarchie zugreifen.
Problematisch könnten die Zugriffsrechte werden, wenn die entsprechende
Tabelle von diesem oder anderen Frontends geöffnet ist.
Norbert
Sub NeuesFeld()
Dim dbBackend As Database, tdf As TableDef, fld As Field
Set dbBackend = dbEngine(0)(0).opendatabase("Backend.mdb")
Set tdf = dbBackend.TableDefs("WasWeisIch")
Set fld = tdf.CreateField("NeuesFeld", dbText, 20)
tdf.Fields.Append fld
tdf.Fields.Refresh
Set dbs = Nothing
End Sub
Solltest Du zur Laufzeit nicht wissen, wo das Backend ist, so ist das kein
Problem!
So ganz nebenbei kennt Dein Frontend den Zugriffspfad zur Tabelle im
Backend.
Schau mal in die Tabelle MSysObjects rein, da steht Deine Tabelle drin und
wie auf die Tabelle zugegriffen werden kann (ich liebe die MSysObjects ;).
Die Systemobjekte kannst Du bei den Optionen, Ansicht zuschalten.
Es stellt sich natürlich die Frage, warum Du Felder nachprogrammieren mußt.
Hilft es Dir vielleicht schon, die ggf. temporäre Änderung in einer weiteren
DB
vorzunehmen?
Gruß
Stefan
>Es stellt sich natürlich die Frage, warum Du Felder nachprogrammieren mußt.
>Hilft es Dir vielleicht schon, die ggf. temporäre Änderung in einer weiteren
>DB vorzunehmen?
Nein, im Moment ist ja noch alles in Ordnung, aber es wird sich mit
Sicherheit ergeben, daß beim einen oder anderen Update Felder im
Backend hinzugefügt oder geändert werden müssen.
Wie meinst du das eigentlich mit temporären Änderungen in einer
weiteren DB ? Eine weitere DB öffnen, die tabellen mit den fehlnenden
Feldern enthält, wobei diese Tabellen dann über 1:1 Beziehungen
verknüpft werden ?
Danke für deine Hilfe
Karl-Alfred Römer
wie es aussieht ist deine Methode noch die unkomplizierteste.
Muß ich nur noch Sicherstellen, daß in dem Moment, indem ich das
Backend modifizeren will, das Frontend vom Backend getrennt ist, und
daß niemand anderes das Backend geöffnet hat.
Danke für deinen Tip
Karl-Alfred Römer
>> gibt es eine elegante Methode, wie man in eine verknüpfte Tabelle (in
>> einem Backend) per VBA vom Frontend Felder hinzufügen, Indizes,
>> Beziehungen definieren etc. kann ?
>>
>> Meine jetzige Idee wäre, die Tabelle zunächst mit TransferDatabase zu
>> importieren, sie 'vor Ort' zu ergänzen und dann wieder zu exportieren.
>> Ist aber ein wenig zu umständlich.
>> Wenn mir jemand eine bessere Lösung bieten könnte, würde ich mich
>> sehr freuen.
>>
>> Ciao
>> Karl-Alfred Römer
>
>Öffne doch die Backend - Datenbank im Frontend mit
> set dbBackend = opendatabase("Backend.mdb")
>dann kannst du ganz normal auf die Objekt - Hierarchie zugreifen.
>
Nicht ganz, aber vielleicht auch ein netter Denkansatz...
Ich habe des häufigeren mal Probleme gehabt, wenn ich große Datenmengen
für mehrere Auswertungen zusammenfassen mußte, da gab es ab und zu mal
Laufzeitprobleme.
Einmal sollten die Daten auf zwei verschiedene Arten aufbereitet werden.
War ganz einfach: zwei Berichte mit Abfragen. Dann nur noch die Daten
sammeln und ausgeben.
Ups, da sind ja 10000 Datensätze im Backend... kein Problem, stell ´ne
Tischtennisplatte oder Kaffeemaschine daneben ;)
Das Ganze habe ich dann etwa so gelöst:
beim Öffnen der Berichte habe ich nachgeschaut, ob schon ein Bericht offen
ist. Wenn nicht, dann habe ich die Daten in temporäre Tabellen gelegt.
Alle Berichte haben die tmp-Tabellen genutzt. Beim Schließen der Berichte
habe ich geprüft, ob gerade der letzte Bericht geschlossen wird. Dann habe
ich
die Tabelle geleert.
Die temporären Tabellen habe ich in eine neue Datenbank gelegt
(createdatabase)
und dann eingebunden. Somit brauchte die DB nicht regelmäßig komprimiert
werden.
Natürlich wurde dann nicht die Tabelle geleert, sonder die Datei gelöscht.
Gruß
Stefan