🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Grafik aus Base lesen und in form stellen? [Gelöst]

Alles zur Programmierung im LibreOffice.
Decurtins
Beiträge: 20
Registriert: So 20. Mai 2012, 16:55

Grafik aus Base lesen und in form stellen? [Gelöst]

Beitrag von Decurtins » So 20. Mai 2012, 16:59

Hello everybody

I'm extremely new to macro programming and don't have any programming background what so ever. Still I'm trying.

Perhaps somebody can give me hint for this problem:

I have a table in a base database. In this table there's a column with Image data (so the images are stored within the database, if I understand this correctly).

Now I want to retrieve this image (mostly CD-covers) with a macro and put it in a Formfield. The idea is, that the user selects an entry from a Combo Box field and the macro fils in the rest of the form. With text-data I got this working, but I can't figure out how to do this with images.

Thanx for your time and help! (the "Product_Report" is a form and not a report, just to avoid confusion ;) )

Code: Alles auswählen

Sub EmplenirOraFormProduct_Report
  dim document   as object
  dim dispatcher as object
  DIM oDoc as object
  document   = ThisComponent.CurrentController.Frame
  oDoc = ThisComponent
  dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    
   Dim oForm as object
   oForm = oDoc.drawpage.forms.getByName("Product_Report")

   Dim Product as object
   Product = oForm.GetByName("Combo Box Product")
   DIM sProduct as String
   sProduct = Product.text
      
   'DIM ID
   'ID = oForm.GetByName("fmtID")
   'DIM iID as Integer
   'iID = ID.text
   
Dim DatabaseContext As Object
Dim DataSource As Object
Dim Connection As Object
Dim InteractionHandler as Object
Dim Statement As Object
Dim ResultSet As Object

DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource = DatabaseContext.getByName("R-tunes-clients")

If Not DataSource.IsPasswordRequired Then
  Connection = DataSource.GetConnection("","")
Else
  InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
  Connection = DataSource.ConnectWithCompletion(InteractionHandler)
End If

Statement = Connection.createStatement()


'''''''  DA CHEU NAVEN Interpret

ResultSetInterpret = Statement.executeQuery("SELECT DISTINCT ""Interpret"" FROM ""Products_R-tunes"" WHERE ""Product"" = '" + sProduct + "'")

If Not IsNull(ResultSetInterpret) Then
  While ResultSetInterpret.next
    sResultSetInterpret = ResultSetInterpret.getString(1)
  Wend
End If
   
'Formularfeld "txtInterpret" mit neuer sResultSetInterpret füllen
      oForm.getByName("txtInterpret").text = sResultSetInterpret


'''''''  DA CHEU NAVEN Product image

DIM oResultSetProductImage as Object
oResultSetProductImage = Statement.executeQuery("SELECT DISTINCT ""Product image"" FROM ""Products_R-tunes"" WHERE ""Product"" = '" + sProduct + "'")

If Not IsNull(oResultSetProductImage) Then
  While oResultSetProductImage.next
    oStreamResultSetProductImage = oResultSetProductImage.getBinaryStream(1)
  Wend
End If

If oResultSetProductImage.wasNull() Then
Print "The image was NULL"

End If

'Formularfeld "imgProduct image" mit neuer oStreamResultSetProductImage füllen

      oForm.getByName("imgProduct image").addPropertyValues = oStreamResultSetProductImage

'sTgeiSei = oForm.getByName("imgProduct image").dbg_properties
'sTgeiSei = oForm.getByName("imgProduct image").dbg_methods
'print sTgeiSei
'sTgeiSei2 = oResultSetProductImage.dbg_methods
'print sTgeiSei2

'Globalscope.BasicLibraries.LoadLibrary("MRILib")
  'oMRI = CreateUnoService("mytools.Mri")
  'oMRI.inspect( oStreamResultSetProductImage )

 
END SUB   
Zuletzt geändert von Decurtins am Do 7. Jun 2012, 14:15, insgesamt 3-mal geändert.

swolf
* LO-Experte *
Beiträge: 1143
Registriert: Di 14. Feb 2012, 16:56

Re: EIngebettete Grafik aus Base auslesen und in form stelle

Beitrag von swolf » So 20. Mai 2012, 17:14

hello,

there is an english forum for LibreOffice and OpenOffice
http://user.services.openoffice.org/en/ ... 01a065cd30

Decurtins
Beiträge: 20
Registriert: So 20. Mai 2012, 16:55

Re: EIngebettete Grafik aus Base auslesen und in form stelle

Beitrag von Decurtins » So 20. Mai 2012, 19:57

Ich verstehe auch Deutsch. Entschuldigt bitte die Sprache und herzlichen Dank für alle Antworten.

swolf
* LO-Experte *
Beiträge: 1143
Registriert: Di 14. Feb 2012, 16:56

Re: EIngebettete Grafik aus Base auslesen und in form stelle

Beitrag von swolf » So 20. Mai 2012, 20:25

übersetzte deine Frage ins Deutsche, es wird dir sicher jemand antworten.

Ich habe dich ins englische Forum geschickt, weil ich dachte, dass du kein Deutsch sprichst.

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: EIngebettete Grafik aus Base auslesen und in form stelle

Beitrag von F3K Total » So 20. Mai 2012, 22:53

Hallo,
du brauchst ein grafisches Kontrollfeld, das kannst Du im Entwurfsmodus zufügen. Wenn Du diesem Kontrollfeld deine Spalte mit Bilddaten zuordnest, hast Du was du möchtest. Allerdings möchte ich Dich vor dieser Methode warnen. Die eingebettete HSQL Datenbank neigt bei größeren Datenmengen zum Absturz.
Es gibt auch eine Methode, die Bilder in einem Ordner zu halten und in der DB nur den Link zu diesem Ordner. Diesen Link dann wieder dem grafischen Kontrollfeld zuordnen, dann wird das entsprechende Bild auch angezeigt.
Siehe z.B. auch hier (in english):
http://user.services.openoffice.org/en/ ... 44#p216040
und da insbesondere die Datei My picture_links.zip von Villeroy.

Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

Decurtins
Beiträge: 20
Registriert: So 20. Mai 2012, 16:55

Re: EIngebettete Grafik aus Base auslesen und in form stelle

Beitrag von Decurtins » So 20. Mai 2012, 23:41

Herzlichen Dank für die Antworten!

hab im englischen forum gerade die Antwort von Villeroy selbst erhalten.


-> allerdings geht es mir wirklich darum, die Bilddaten via SQL befehl aus einer tabelle herauszuholen und sie dann (mittels einer Variablen) in einem form in ein grafisches Kontrollfeld zu setzen, via macro.

Ist das überhaupt möglich?


die Grösse der Datenbank sollte eigentlich kein Problem darstellen, da es sich um sehr kleine images handelt. Ab wann neigt denn Base zusammenzuklappen?


VIelen lieben Dank nochmals, dass Ihr einem Neuling auf die Sprünge helft

Decurtins
Beiträge: 20
Registriert: So 20. Mai 2012, 16:55

Re: EIngebettete Grafik aus Base auslesen und in form stelle

Beitrag von Decurtins » Mo 21. Mai 2012, 00:09

ok.

Ich habe die Datenbankspalte auf VARCHAR umgestellt und befüllt (mit den Bildern im gleichen Verzeichnis wie das odb File).
So weit alles ok.

aber.

Welche Method muss ich anwenden, um den string mit dem Dateinamen, der die SQL-Abfrage zurückgibt, in das Grafische Kontrollfeld zu bekommen?

Code: Alles auswählen

oForm.getByName("imgProduct image").text = sResultSetProductImage
.text funktioniert nicht.

Wo finde ich die methoden? MRI ist für mich ein Buch mit sieben Siegeln…

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: EIngebettete Grafik aus Base auslesen und in form stelle

Beitrag von F3K Total » Mo 21. Mai 2012, 06:55

Moin,
1.) Crossposting ohne Referenz ist unhöflich. Du beschäftigst mehrere Foren mit dem gleichen Thema, ohne dass sie voneinander wissen. Du solltest einen Link zum englischen und allen anderen Foren, die du beschäftigst, jeweils einfügen.
2.) Am besten lädst Du mal ein verfremdetes Beispieldokument hoch.
Und erklärst daran nochmal genau, was du erreichen möchtest, gegebenfalls reicht ein SQL-Befehl unter Extras-SQL ...
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

Decurtins
Beiträge: 20
Registriert: So 20. Mai 2012, 16:55

Re: EIngebettete Grafik aus Base auslesen und in form stelle

Beitrag von Decurtins » Mo 21. Mai 2012, 11:31

Hallo F3K

Sorry wegen den Crosspostings.
hier die links: http://user.services.openoffice.org/en/ ... 78#p235778 und http://en.libreofficeforum.org/node/3263

Hier nochmals das Problem:

ich schicke diesen Befehl an die Datenbank:

Code: Alles auswählen

ResultSetProductImage = Statement.executeQuery("SELECT DISTINCT ""Product image"" FROM ""Products_R-tunes"" WHERE ""Product"" = '" + sProduct + "'")
, erhebe den string:

Code: Alles auswählen

If Not IsNull(ResultSetProductImage) Then
  While ResultSetProductImage.next
    sResultSetProductImage = ResultSetProductImage.getString(1)
  Wend
End If
und möchte diesen String (den Dateinamen der Graphik) in ein Graphik-Kontrollfeld namens "imgProduct image" einfügen.
In Theorie, das heisst, wenn das Graphik Kontrollfeld die method .text kennen würde, ginge das wohl so:

Code: Alles auswählen

oForm.getByName("imgProduct image").text = sResultSetProductImage
Tja. Das problem bleibt: ich weiss nicht welche method anzuwenden ist, um meine String-Variable mit dem Dateinamen in das Graphik-Kontrollfeld zu übergeben.
Ist das überhaupt möglich?

Danke und entschuldigt bitte das Crossposting…

Decurtins
Beiträge: 20
Registriert: So 20. Mai 2012, 16:55

Re: EIngebettete Grafik aus Base auslesen und in form stelle

Beitrag von Decurtins » Mo 21. Mai 2012, 11:51

Hallo zusammen.

Ich denke die property, die ich verwende muss ist

Code: Alles auswählen

.ImageURL
siehe hier: http://api.libreoffice.org/common/ref/c ... Model.html

allerdings passiert nicht das Gewünschte, sondern gar nichts :(
Auch wenn ich den String (z.B. MeinBild.png) in eine URL (file:///MeinBild.png) via

Code: Alles auswählen

sUrlResultSetProductImage = converttourl(sResultSetProductImage)
umwandle und via .ImageURL ins graphische Kontrollfeld hineinsetzen will, passiert nichts.

Ich verzweifle noch!


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten