PDA

Vollständige Version anzeigen : Anlagenfeld


rr20051112
27.04.2011, 20:07
Hallo,


wie übertrage ich ein Anlagenfeld in ein anderes per VBA?


Danke im voraus.

Lanz Rudolf
27.04.2011, 20:32
Hallo
was Verstehst Du unter einem "Anlagenfeld" ? ein Kombifeld ?

rr20051112
28.04.2011, 07:15
ein Anlagenfeld ist in Access2007 eine Datentyp, in dem man Dokumente , Bilder anhängen kann. Das ist kein Kombifeld.

http://www.mausketiere.at/blog/post/2008/04/Anlagenfelder-f%C3%BCr-Dateien.aspx

Atrus2711
28.04.2011, 09:06
Hi,

der Value des Anlagenfelds enthält ein Recordset, das 6 Felder enthält. Die müsstest du übertragen. So etwa:

Sub CopyAttachment()
Dim rstSource As DAO.Recordset2
Dim rstTarget As DAO.Recordset2
Dim rstAttachmentSource As DAO.Recordset2
Dim rstAttachmentTarget As DAO.Recordset2
Dim i As Long

Set rstSource = CurrentDb.OpenRecordset("SELECT TOP 1 * FROM Artikel")
Set rstTarget = CurrentDb.OpenRecordset("Kopie von Artikel")


rstTarget.AddNew
rstTarget!Artikelname = rstSource!Artikelname
Set rstAttachmentSource = rstSource!Fotos.Value
Set rstAttachmentTarget = rstTarget!Fotos.Value
If Not rstAttachmentSource.BOF Then
rstAttachmentSource.MoveFirst
End If
On Error Resume Next
Do While Not rstAttachmentSource.EOF
rstAttachmentTarget.AddNew
rstAttachmentTarget.Fields(0).Value = rstAttachmentSource.Fields(0)
rstAttachmentTarget.Fields(1).Value = rstAttachmentSource.Fields(1)
rstAttachmentTarget.Fields(2).Value = rstAttachmentSource.Fields(2)
rstAttachmentTarget.Fields(3).Value = rstAttachmentSource.Fields(3)
rstAttachmentTarget.Fields(4).Value = rstAttachmentSource.Fields(4)
rstAttachmentTarget.Fields(5).Value = rstAttachmentSource.Fields(5)
rstAttachmentTarget.Update
rstAttachmentSource.MoveNext
Loop
On Error GoTo 0
rstTarget.Update
rstSource.Close
rstTarget.Close
Set rstSource = Nothing
Set rstTarget = Nothing
End Sub

rr20051112
28.04.2011, 13:05
Ah, interessant, das werde ich mal ausprobieren. Ich melde mich wieder.

Das geht sicherlich auch so ähnlich,wenn das Zielfeld ein Anlagenfeld einer Maske ist. Also praktisch ausgelesen aus der Tabelle Artikel in ein Feld der Maske des DatenTypes Anlage.


Set rstSource = CurrentDb.OpenRecordset("SELECT TOP 1 * FROM Artikel")


Ok, hier kann ich ja sas Statement so erweitern, das gezielt ein Datensatz gezogen, zB. ....WHERE ATIKEL.ARTNR = NR "
Ok,

Lg Ralf

Atrus2711
28.04.2011, 13:07
Hi,

ein Formular ist nur die Oberfläche; die Daten gucken an den Steuerlementen quasi durch. Die eigentlichen Datenoperationen laufen aber "darunter" auf Tabellenebene.

rr20051112
28.04.2011, 14:05
ja, das ist klar. ich wollte zuerst via Datenlink das Konnektieren , Stücklistetabelle mit der Materialstammdaten Tabelle, in der sich die Bilder befinden 1 Artikel hat 1 Anlage), leider konnte ich danach keine Eingabe mehr in dem Formular für die Stückliste machen, da die Eingabe gesperrt wurde. Das wäre die einfachste Lösung gewesen, geht aber nicht so wie ich mir das vorstellte. Im Formular kann man auch Datentypen einfügen, die zunächst erst mal keine Beziehungen zu einer Tabelle haben.

rr20051112
29.04.2011, 10:42
das Kopieren von Tabelle zu Tabelle funktioniert, kann man dieses Anlagenfeld aus der Quelltabelle auch in ein Anlagenfeld eines Formulars , ohne Tabellenbezug übertragen? ACCESS2007 bietet das Anlagenfeld bei der Gestaltung eines Formulares an.

55650

Atrus2711
29.04.2011, 10:45
Was für einen Sinn hat ein Anlagenfeld in einem Formular ohne Tabellenbezug?

rr20051112
29.04.2011, 10:48
mit Hilfe der Büroklammer , die man in das Formular einfügt.

55651

rr20051112
29.04.2011, 10:50
der Sinn ist zum Beispiel ein Stammdatenfeld aus einer anderen Tabelle anzuzeigen, ohne das dieses in der Stammdaten Tabelle an dieser Stelle ändern zu können. Ich zeige zum Beispiel Daten aus der Bestellpositionstabelle und kann diese ändern an und zeige gleichzeitig den Artikel (Foto, Produktbeschreibung als PDF , Worddatei etc. pp.) den zugehörigen Artikel aus der Stammdatentabelle an.


Wenn ich die beiden Tabellen über ein Feld verbinden würde , sind die Eingaben der Tabellen gesperrt, und ich kann keine Änderungen an der Bestellpositionstabelle mehr durchführen.

Atrus2711
29.04.2011, 11:11
Hi,

Wenn ich die beiden Tabellen über ein Feld verbinden würde , sind die Eingaben der Tabellen gesperrt, und ich kann keine Änderungen an der Bestellpositionstabelle mehr durchführen.In der Absolutheit stimmt das nicht. Eine Abfrage, die zwei Tabellen verbindet, kann sehr wohl änderbar bleiben. Es kommt auf den Aufbau der Abfrage an.

mit Hilfe der Büroklammer , die man in das Formular einfügt.
Die Büroklammer im Formularentwurf erzeugt nur ein Steuerelement. Das kann an eine Quellspalte der Quelltabelle gebunden sein oder auch nicht. Wenn es nicht gebunden ist, muss sich VBA-Code um die Anzeige und ggf. Verarbeitung von Änderungen kümmern.

Ein ungebundenes Anlage-Steuerelement ist also genauso sinnlos oder sinnvoll wie ein ungebundenes Textfeld: für Parameterangaben oder codegesteuerte Anzeige ok, sonst unnütz.

rr20051112
29.04.2011, 11:35
In der Absolutheit stimmt das nicht. Eine Abfrage, die zwei Tabellen verbindet, kann sehr wohl änderbar bleiben. Es kommt auf den Aufbau der Abfrage an.


ja, davon ging ich auch aus

kommt auf den Aufbau der Abfrage an


ich habe die Beziehung definiert, danach war die Eingabe für alle Felder im Formular gesperrt. Das Anlagefeld aus der Tabelle KV wurde angezeigt.

Ich habe keine Möglichkeit gefunden dies für die Tabelle zu ändern und zu entsperren.

55653


Wenn die Tabelle weiterhin nicht gesperrt wäre müsste ich die obige Hilfskonstruktion nicht anwenden.

Atrus2711
29.04.2011, 11:38
wie sieht denn die SQL der Abfrage insgesamt aus?

rr20051112
29.04.2011, 11:40
ich habe keine SQL benutzt sondern diesen " Beziehungsassistenten". Ich habe dazu die dazugehörige SQL nicht gefunden.

Atrus2711
29.04.2011, 11:41
Wenn du eine Abfrage hast, hast du eine SQL. Im Abfrage entwurf das Symbol oben links aufklappen, dann dort SQL auswählen und den Text hier einfügen.

rr20051112
29.04.2011, 11:46
ich habe ein Abfrage erstellt, die SQL sieht so aus:

SELECT online_banking.EMPF, online_banking.ZWECK, KV.Dokumente
FROM online_banking INNER JOIN KV ON online_banking.EMPF=KV.NAME
ORDER BY online_banking.EMPF;


ich gehe von einer Datenliste aus und wähle per Doppelklick daraus einen Datensatz aus und zeige diesen in einen Formular an:


Function SetCurrentRecord(ZID As Long)

Dim f As Form
Dim dyn As Recordset
Dim Kriterium As String
'------------------------------

'Application.Echo False
'On Error GoTo Err_SetCurrentRecord
'On Error Resume Next

If Not isFormLoad("Ueberweisung") Then
DoCmd.OpenForm "Ueberweisung"
End If

Set f = Forms![Ueberweisung]

'DoCmd.Save acForm, F

Set dyn = f.RecordsetClone

'korrespondierenden Datensatz suchen
Kriterium = "[ID] = " & ZID
dyn.FindFirst Kriterium

'korrespondierenden Datensatz im Formular aktivieren

If (Not dyn.NoMatch) And dyn.Bookmarkable Then
f.Bookmark = dyn.Bookmark
End If
'Application.Echo True

Exit_SetCurrentRecord:
Exit Function

Err_SetCurrentRecord:
MsgBox "MdlTab " & Err.Number & " " & Error$
Resume Next

End Function


'******************************************************************************* ***
'Prüft, ob das Formular frm geladen ist
'
'Rückgabe: TRUE, Formular ist geladen
' FALSE, Formular ist nicht geladen
'******************************************************************************* ***
Function isFormLoad(frm As String) As Boolean
isFormLoad = SysCmd(SYSCMD_GETOBJECTSTATE, acForm, frm)
End Function

Atrus2711
29.04.2011, 11:51
Diese Abfrage ist editierbar. Probiers mal in der Abfrage aus.

Wenn das Formular sich sträubt, kann das einige Gründe haben:

Formulareigenschaften Anfügen zulassen oder Bearbeiten zulassen auf Ja
Steuerelemente deaktiviert oder gesperrt
irgendwelcher Code, der dazwischenfunkt
Bindung der Steuerelemente an nicht änderbare Felder (Autowert o.ä.)
...

rr20051112
29.04.2011, 12:03
Danke mal für erste,, ich mach jetzt Wochenende. Ich prüfe das mal später.


Schönes Wochende.


LG Ralf.

rr20051112
30.04.2011, 09:33
ich habe das mal hier zusammengefaßt:


http://www.4shared.com/get/uv34r6WB/TEST.html

da drücken:

Datei jetzt herunterladen

Atrus2711
02.05.2011, 07:41
Hi,

an externe Filehoster komm ich nicht ran (geblockt vom Admin). Bitte lad eine (ggf. aufs Wesetnliche abgespeckte) gezippte Datei hier im Forum hoch.

rr20051112
02.05.2011, 15:29
Kein Wunder, die Datei habe ich gelöscht, das Problem ist gelöst, es lag an der Definition des Primary Key's.

@alle : Danke für die Unterstützung.

Lg Ralf.