Und was ist jetzt genau das Problem? Wo tritt ein Fehler auf und welche Fehlermeldung erscheint?
Hallo liebe Community,
Ich habe ein kleines Problemchen und versuche es mal so detailiert wie möglich zu schildern und ich hoffe jemand kann mir helfen.
Erstmal einpaar fact´s:
Was tut der Programmteil?
Erstellen von druckbaren Berichten mit Bildinhalt
- Bisher PostgreSQL 8.0 DB + ODBC Treiber 8.0 - KEINE PROBLEME
- PostgreSQL 8.4 DB + ODBC Treiber 8.4 - PROBLEME
- PostgeSQL 8.4 DB + ODBC Treiber 8.0 - KEINE PROBLEME
Kann es sein das sich irgendwie die syntax für large objects geändert hat?
Wie gesagt, unter 8.0 hat alles wunderbar funktioniert, hier ein Codeausschnitt aus dem Visual Basic Projekt.
Vielen Dank schonmal!
Code:Function ADO_Fetch_Picture_FOR_PRINT(Adress_ID As Long, Optional Wund_Nr As Long, Optional LoescheFiles As Boolean) As String On Error GoTo ADO_Fetch_Picture_FOR_PRINT_Error ' Fetch the first record present in MYTABLE with a lo object stored Dim SQL As String Dim rs As New ADODB.Recordset Dim fd As Integer Dim flen As Long Dim chunk() As Byte Dim sngAspectRatio As Single Dim sngWidth As Single Dim sngHeight As Single Dim sngPosX As Single Dim sngPosY As Single Dim stdPic As StdPicture Dim TempPath_DokuCare As String Dim HTML As String ADO_Fetch_Picture_FOR_PRINT = "" TempPath_DokuCare = GetTempDir() 'Temp-Path einlesen If tmpZaehler = 0 Then tmpZaehler = 1 End If If LoescheFiles = True Then Call Loesche_TMP_Files End If If Wund_Nr > 0 Then SQL = "select * from t_grafik where adress_id = " + Trim(Adress_ID) + " and grafikart_id = 2 and wund_nr = " + Trim(Wund_Nr) + " order by wund_nr, lupd " Else SQL = "select * from t_grafik where adress_id = " + Trim(Adress_ID) + " and grafikart_id = 2 order by wund_nr, lupd " End If Call rs.Open(SQL, db, adOpenDynamic, adLockOptimistic) If rs.BOF Then rs.Close Exit Function End If rs.MoveLast rs.MoveFirst Do While Not rs.EOF HTML = HTML + " <table border='0' width='100%' id='BildBewohner' > " ' Get the len of the stored object flen = rs!image.ActualSize ' Initialize the file where to store the blob fd = FreeFile Open TempPath_DokuCare + "\Nr" + Trim(tmpZaehler) + ".tnp" For Binary Access Write As fd ReDim chunk(1 To flen) ' Get it from the database chunk() = rs!image.GetChunk(flen) ' ... and store in the file Put fd, , chunk() HTML = HTML + " <tr>" HTML = HTML + " <td width='70%' valign='top' > " HTML = HTML + "   </td>" HTML = HTML + " </tr>" HTML = HTML + " <tr>" HTML = HTML + " <td width='70%' valign='top' > " HTML = HTML + " Wund-Nr: " + Trim(rs.Fields("wund_nr")) + "; " + " Wunddatum: " + Trim(rs.Fields("wann")) + "; " + " Wundbeschreibung: " + Trim(rs.Fields("grafik_text")) + " </td>" HTML = HTML + " </tr>" HTML = HTML + " <tr>" HTML = HTML + " <td width='70%' valign='top' > " HTML = HTML + " <img border='0' src='" + Trim(TempPath_DokuCare) + "\Nr" + Trim(tmpZaehler) + ".tnp' height='300' align='left'></td> " HTML = HTML + " </tr>" Close #fd HTML = HTML + " </table> " tmpZaehler = tmpZaehler + 1 rs.MoveNext Loop ADO_Fetch_Picture_FOR_PRINT = HTML Exit Function ADO_Fetch_Picture_FOR_PRINT_Error: ADO_Fetch_Picture_FOR_PRINT = "" Call error_handler(Err, "ADO_Fetch_Picture_FOR_PRINT", True) Set stdPic = Nothing Exit Function Resume End Function
Geändert von mrmercury (19.01.2010 um 10:27 Uhr)
Und was ist jetzt genau das Problem? Wo tritt ein Fehler auf und welche Fehlermeldung erscheint?
oh sorry for lauter Fehlerbeschreibung den Fehler vergessen...
also ich bekomm ne Fehlermeldung vom Programm beim generieren des Berichtes.
Beim Debugen hab ich festgestellt das er nach nach
in den Error Handler springtCode:ReDim chunk(1 to flen)... flen is hierbei komischerweise "0"
zuvor wird ja flen bestimmt aus
... evtl is dort der Haase begraben?Code:flen = rs!image.ActualSize
Ich versuche halt herauszufinden was postgresql 8.4 hier anderst macht als 8.0...
Die eigentlich Fehlermeldung lautet "Index außerhalb des gültigen Bereichs in Funktion ADO_FETCH_PICTURE_FOR_PRINT", dann wird der Bericht generiert aber ohne das Bild welches es anzeigen soll...
**UPDATE**
also es liegt definits an demhabe das Programm nochmal laufen lassen mit PostgreSQL 8.0 und alle Werte/Parameter/Variablen sind Identisch zu beiden. Der Unterschied ist das flen unter 8.0 einen richtigen Wert ausgibt und nicht einfach nur "0". Aber wie fixe ich das? Is da die Syntax nun anderst?Code:flen = rs!image.ActualSize
Geändert von mrmercury (19.01.2010 um 12:14 Uhr)
hat niemand eine idee die mich vielleicht weiterbringt ?...
Was gibt es denn konkret aus und was möchtest du erreichen?
Btw, läuft deine PostgreSQL Datenbank unter Windows?
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
ich möchte einfach die alte Funktionalität wie sie mit 8.0 funktioniert hat.
Ein blob (in dem fald eine Grafik) soll angezeigt werden in meinem Bericht.
Mit 8.0 Ging das problemlos aber seit 8.4 kommt die besagte Fehlermeldung.
Ja, der Server läuft unter Windows...
Gut, zuerst einmal: 8.0 unter Windows ist aufgrund diverser kritischer Fehler nicht mehr unterstützt.
Dann: kannst du eingrenzen, bis wohin das gleich funktioniert? Wenn du die Anfragen auf der Konsole eingibst, gibt es das gleiche Ergebnis? Wenn ja, ist entweder im ODBC-Treiber etwas kaputt oder in deiner Anwendung.
Wenn nicht: hast du den Fehler schon gefunden.
Bisher versuchst du, ausgehend von deiner als richtig und funktionierend eingestuften Anwendung (was aber falsch sein kann) von oben über dem Problem zu kreisen. Da drunter gibt es aber diverse Komponenten, die ausgetauscht wurden und die allesamt für den Fehler verantwortlich sein können.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
es funktioniert alles identisch bis auf die stelle wo die "flen" berechnet wird aus "rs!image.GetActualSize".
Dort wird eine 0 für flen zurückgegeben und nicht (wie in 8.0) die richtige grösse des Blobs...
hoffe ich hab deine frage richtig verstanden und das geantwortet was du hören wolltest :P ...
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
nunja, Datenbanktechnisch wird ja das SQL statement abgesetzt wie du aus dem oben codeausschnitt sehen kannst.
Beide SQL Statements sind gültig und im Debug-Direkfenster bekomme ich ein gültiges SQL Statement für 8.0 und 8.4 raus.
Ich sehe auch dass die Datenbankverbindung in beiden Fällen korrekt ist und das die db aufgemacht wird.
Was nun das rs!getActualSize genau macht kann ich dir nicht sagen da es eine vorgefertigte Funktion ist die zum ADO Teil gehört.
Ich finde einfach keinen Hinweis darauf warum er mir keine Feldlänge für mein Blob zurückgibt weil da liegt der haase begraben. Die Fehlermeldung kommt ja nur deswegen weil er mit der "0" als "flen" nichts anfangen kann.
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen