PDA

Vollständige Version anzeigen : Binär abgespeichertes Bild einem Formularfeld zuweisen


Packo
24.03.2004, 12:42
Hallo,

ich weiß das dieses Thema schon oft angesprochen wurde, allerdings habe ich mit den hier genannten Beispielen nie eine Lösung gefunden die ich ganz einfach in mein Formular einfügen konnte.
Liegt wahrscheinlich auch daran das ich von VBA nicht soviel Ahnung habe :confused:

Habe folgendes Problem:

Hab ein Formular das über eingabe einer beliebigen Nummer auf ein bestimmtes Produkt zugreift. Dabei ist es bei der Eingabe egal wie lang diese Nummer ist. Im Formular wird dann diese Nummer auf 18 Stellen gebracht. Mit Hilfe dieser Nummer werden dann Daten aus verschiedenen Tabellen als Variablen abgefragt die dan verschiedenen Feldern in diesem Formular zugeordnet werden.
Wie kann ich nun ein binär abgespeichertes Bild (JPG) einem Feld in dem Formular zuweisen?

Die Tabelle mit den Bildern heißt "Bilder"
Diese enthält 3 Spalten:

BildName: 18 stellige Nummer
Bild: binäres Bild
DateiErweiterung: JPG

KHS
24.03.2004, 13:53
Kennst du Saschas <b><a href="http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=109932" target="_blank">Beispiel</a></b>?

Packo
24.03.2004, 14:18
Original geschrieben von KHS
Kennst du Saschas <b><a href="http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=109932" target="_blank">Beispiel</a></b>?

ja, damit hab ich ja schon die Tabelle Bilder erstellt.

Nur wie sage ich meinem Formular welches Bild es anzeigen soll?
In dieser Datenbank konnte ich nicht sagen:

"gehe zu Datensatz 12 und zeige mir dieses Bild"

Anbei mal der Code meines Formulares:
------------------------------------------------------------------------------------

Option Compare Database
Private Sub Befehl9_Click()
On Error GoTo Err_Befehl9_Click

Screen.PreviousControl.SetFocus
DoCmd.DoMenuItem acFormBar, acEditMenu, 10, , acMenuVer70

Exit_Befehl9_Click:
Exit Sub

Err_Befehl9_Click:
MsgBox Err.Description
Resume Exit_Befehl9_Click

End Sub
Private Sub Berechnung_Click()

Dim DB As Database
Dim rs As Recordset
Dim MATNR As String, Menge As Double
Dim varVTEXT_ZEILE_D As String, varVTEXT_ZEILE_E As String, varVTEXT_ZEILE_F As String
Dim varVTEXT_ZEILE_I As String, varVTEXT_ZEILE_P As String, varVTEXT_ZEILE_S As String
Dim varMARA_BRGEW As Double, varMARA_NTGEW As Double, varMARA_VOLUM As Double, varMARA_GEWEI As String
Dim varMARA_VOLEH As String, varMARA_MAGRV As String
Dim varZPMPACK_NENNVOL As Double, varZPMPACK_RECHVOL As Double, varZPMPACK_EFFVOL As Double
Dim varZPMPACK_TARAGEWICHT As Double, varZPMPACK_NENNVOLEINH As String, varZPMPACK_PMTEXTABK As String
Dim varZPMPACK_RECHVOLEINH As String, varZPMPACK_EFFVOLEINH As String, varZPMPACK_TARAGEWEINH As String
Dim varBruttogewicht As Double, varVolumen As Double
Dim varABKZ_ABKEN As String, varABKZ_ABKDE As String
Dim TEST As Double


On Error GoTo Eingabe

MATNR = Packmittel
Menge = Fuellmenge

'Bei fehlender Eingabe von Packmittel-Nr. bzw. Füllmengen-Angabe
Eingabe:
If MATNR = "" Then
MsgBox ("Packmittel-Angabe fehlt!" & Chr(13) & _
" " & Chr(13) & _
"Bitte erst die Packmittel-Nr. und dann das Füllgewicht eintragen." & Chr(13) & _
" " & Chr(13) & _
" Danke!")

Exit Sub
ElseIf Menge = 0 Then
MsgBox ("Füllmengen-Angabe fehlt!" & Chr(13) & _
" " & Chr(13) & _
"Bitte das Füllgewicht eintragen." & Chr(13) & _
" " & Chr(13) & _
" Danke!")
Exit Sub
End If

'Ermitlung der Packmittel-Nr.-Länge und Auffüllung auf 18 Stellen
If Len(MATNR) = 3 Then
MATNR = "000000000000000" & MATNR
ElseIf Len(MATNR) = 4 Then
MATNR = "00000000000000" & MATNR
ElseIf Len(MATNR) = 5 Then
MATNR = "0000000000000" & MATNR
ElseIf Len(MATNR) = 6 Then
MATNR = "000000000000" & MATNR
ElseIf Len(MATNR) = 7 Then
MATNR = "00000000000" & MATNR
ElseIf Len(MATNR) = 8 Then
MATNR = "0000000000" & MATNR
End If

Set DB = CurrentDb
On Error Resume Next

'Auslesen der Daten aus der Tabelle "VTEXT"
Set rs = DB.OpenRecordset("SELECT * FROM DYIS_VTEXT WHERE [MATNR] ='" & MATNR & "'")
rs.MoveFirst
Do Until rs.EOF = True
If rs![MATNR] = MATNR And rs![SPRAS] = "D" Then
varVTEXT_ZEILE_D = rs![Zeile1]
ElseIf rs![MATNR] = MATNR And rs![SPRAS] = "E" Then
varVTEXT_ZEILE_E = rs![Zeile1]
ElseIf rs![MATNR] = MATNR And rs![SPRAS] = "F" Then
varVTEXT_ZEILE_F = rs![Zeile1]
ElseIf rs![MATNR] = MATNR And rs![SPRAS] = "I" Then
varVTEXT_ZEILE_I = rs![Zeile1]
ElseIf rs![MATNR] = MATNR And rs![SPRAS] = "P" Then
varVTEXT_ZEILE_P = rs![Zeile1]
ElseIf rs![MATNR] = MATNR And rs![SPRAS] = "S" Then
varVTEXT_ZEILE_S = rs![Zeile1]
End If
rs.MoveNext
Loop

VTEXT_ZEILE_D = varVTEXT_ZEILE_D
VTEXT_ZEILE_E = varVTEXT_ZEILE_E
VTEXT_ZEILE_F = varVTEXT_ZEILE_F
VTEXT_ZEILE_I = varVTEXT_ZEILE_I
VTEXT_ZEILE_P = varVTEXT_ZEILE_P
VTEXT_ZEILE_S = varVTEXT_ZEILE_S

'Auslesen der Daten aus der Tabelle "MARA"
Set rs = DB.OpenRecordset("SELECT * FROM DYIS_MARA WHERE [MATNR] ='" & MATNR & "'")
rs.MoveFirst
Do Until rs.EOF = True
If rs![MATNR] = MATNR Then
varMARA_BRGEW = rs![BRGEW]
varMARA_NTGEW = rs![NTGEW]
varMARA_VOLUM = rs![VOLUM]
varMARA_GEWEI = rs![GEWEI]
varMARA_VOLEH = rs![VOLEH]
varMARA_MAGRV = rs![MAGRV]
End If
rs.MoveNext
Loop

MARA_BRGEW = varMARA_BRGEW
MARA_NTGEW = varMARA_NTGEW
MARA_VOLUM = varMARA_VOLUM
MARA_GEWEI = varMARA_GEWEI
MARA_VOLEH = varMARA_VOLEH
MARA_MAGRV = varMARA_MAGRV

------------------------------------------------------------------------------------
es geht noch weiter, allerdings werden nur noch weitere Tabellen abgefragt und einige Werte werden berechnet.

Mit folgenden Befehl habe ich es schon probiert:
------------------------------------------------------------------------------------

'Auslesen der Daten aus der Tabelle "Bilder"
Set rs = DB.OpenRecordset("SELECT * FROM Bilder WHERE [BildName] ='" & MATNR & "'")
rs.MoveFirst
Do Until rs.EOF = True
If rs![BildName] = MATNR Then
varBilder_Bild = rs![Bild]
End If
rs.MoveNext
Loop

Bilder_Bild = varBilder_Bild
------------------------------------------------------------------------------------
wobei im Formular das Objektfeld den Namen Bilder_Bild hat.
Hoffe das es jetzt besser erklärt ist.

Sascha Trowitzsch
24.03.2004, 17:50
varBilder_Bild = rs![Bild]
Bilder_Bild = VarBilder_Bild
...wobei im Formular das Objektfeld den Namen Bilder_Bild hat.

Und von welchem Steuerelementtyp ist dein Feld Bilder_Bild ??
Davon hängt es ab, wie du ihm die Binärdaten übergibst.
Einfach Bilder_Bild = rs![Bild] geht nicht; das ist etwas zu einfach ;)

In meiner Demo gibt es ja 4 (oder 5?) verschiedene Möglichkeiten, ein Bild anzuzeigen, je nach Steuerelementtyp.
Svhau mal in die Formulare der Demo in die Ereignisse OnCurrent. (Beim Anzeigen). Hier wird das Bild zugewiesen. Bei einigen wird dazu die Hilfesfunktion CreatePix benötigt, die ihrerseits wiederum möglicherweise Funktionen in den Modulen der Demo aufruft.
So ganz einfach ist es also nicht.

Ciao, Sascha

Packo
25.03.2004, 08:50
Original geschrieben von Sascha Trowitzsch
Und von welchem Steuerelementtyp ist dein Feld Bilder_Bild ??
Davon hängt es ab, wie du ihm die Binärdaten übergibst.
Einfach Bilder_Bild = rs![Bild] geht nicht; das ist etwas zu einfach ;)

In meiner Demo gibt es ja 4 (oder 5?) verschiedene Möglichkeiten, ein Bild anzuzeigen, je nach Steuerelementtyp.
Svhau mal in die Formulare der Demo in die Ereignisse OnCurrent. (Beim Anzeigen). Hier wird das Bild zugewiesen. Bei einigen wird dazu die Hilfesfunktion CreatePix benötigt, die ihrerseits wiederum möglicherweise Funktionen in den Modulen der Demo aufruft.
So ganz einfach ist es also nicht.

Ciao, Sascha


Hallo Sascha,

vielen Dank für Deine Antwort.
Also ich habe es mit den Pix, Pix2 und Pix3 aus Deiner Demo probiert.
Habe jeweils das Feld direkt aus diesen Formularen kopiert und den nötigen CODE natürlich auch (auch die Module).
Nur konnte ich Ihm dan nicht sagen welches Bild er darstellen soll.
Ich glaub das liegt an den Modulen ?

Ciao Maik