Announcement

Collapse
No announcement yet.

Frage zu Blob

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Frage zu Blob

    Hallo Zusammen,

    ich habe da mal eine Frage.
    Ich habe in einem Import ein Stringfeld was ca. 1500 Zeichen enthalten kann, je nach Datensatz.<p>
    Dieses Feld möchte ich in ein Feld vom Typ Blob einfügen.
    Das Feld ist vom Typ Blob Sub_Type 1 Segment Size 2048.<p>
    Das gelingt mir aber leider nicht. Momentan gehe ich über den Umweg, dass ich mir mit der Funktion F_STRBLOB helfe. Leider kann ich hier aber nur max. 254 Zeichen erschlagen.<p>
    Gibt es eine andere Funktion, mit der ich meine ca. 1500 Zeichen in dieses Feld bekomme?<p>
    EIn direkter Insert will nicht gelingen. In der Datenbank habe ich auch sog. Blobfilter gesehen, leider kann ich damit nichts anfangen.
    Vielleicht weiß ja jemand Bescheid.<p>
    Vielen Dank im voraus

  • #2
    Hallo,
    <br><br>
    mit InterBase kann man über SQL eine Zeichenkette nicht direkt in einen BLOB schreiben, sondern man muss hier entweder über eine parametrisierte Abfrage in der Client-Anwendung oder über eine UDF gehen. Zum UDF-Weg hätte ich nun eine Frage, nämlich wie sieht das DECLARE Statement der UDF aus?
    <br><br>
    BLOB-Filter vergiß am schnellsten wieder, weil diese nur über die API oder Embedded SQL zugreifbar sind.
    <br><br>
    Thoma
    Thomas Steinmaurer

    Firebird Foundation Committee Member
    Upscene Productions - Database Tools for Developers
    Mein Blog

    Comment


    • #3
      Hallo Thomas,

      vielen Dank für deine schnelle Reaktion.
      das Declare der Funktion sieht folgendermaßen aus:

      <PRE>
      DECLARE EXTERNAL FUNCTION F_STRBLOB
      CSTRING(254),
      BLOB
      RETURNS PARAMETER 2
      ENTRY_POINT 'StrBlob' MODULE_NAME 'FreeUDFLib.dll'
      </PRE&gt

      Comment


      • #4
        Hallo,
        <br><br>
        versuch einfach mal bei der Deklaration der UDF einen CSTRING von 1500 (oder die max. VARCHAR Länge, die Du verarbeiten möchtest) zu verwenden.
        Dazu musst Du die UDF droppen und neu deklarieren.
        <br><br>
        Thoma
        Thomas Steinmaurer

        Firebird Foundation Committee Member
        Upscene Productions - Database Tools for Developers
        Mein Blog

        Comment


        • #5
          Hallo,

          vielen Dank für den Tipp, ich werde es gleich mal testen.
          Dank

          Comment


          • #6
            Hallo Thomas,

            vielen Dank, ich werde es ausprobieren.

            Gruß

            Hendri

            Comment


            • #7
              Hallo Thomas,

              das neu Deklarieren der Funktion hat wunderbar funktioniert. Ich dachte eigentlich, dass jetzt alles glatt geht. Ich habe jetzt aber noch ein Problem dazu bekommen. Folgendes:<br>
              Um das betreffende Feld bei uns in der Datenbank zu vergrößern, habe ich zunächst versucht das Feld zu droppen und neu anzulegen. Leider wurde das Feld noch in einem View benutzt. ALso habe ich zunächst den View aus der Datenbank gelöscht. Habe gedacht, dass ich den View hinterher ohne Probleme wieder einfügen kann. Leider weit gefehlt. Nachdem ich das Create des Views wieder in die Datenbank schieben wollte, habe ich folgende Fehlermeldung bekommen:
              <pre>
              Ungültige Änderung unsuccessful metadata update STORE RDB$RELATIONS_FIELDS failed attempt to store duplicate value (visible to active transactions in unique index "RDB$INDEX_15")
              </pre>

              Ich bekomme diesen View nicht mehr in die Datenbank.
              Vielleicht hat ja jemand eine Idee. Vielen Dank im voraus.

              Gruß

              Hendri

              Comment


              • #8
                Hallo Hendrik,
                <br><br>
                RDB$INDEX_15 wird dazu verwendet, um die Eindeutigkeit von Feldern in einer Tabelle/View sicherzustellen. Im Klartext bedeutet das, dass in der View gleichbenannte Felder sind. Wie sieht die View aus? Besteht sie aus mehreren Tabellen? Poste einfach mal das DDL-Statement der View?
                <br><br>
                Thoma
                Thomas Steinmaurer

                Firebird Foundation Committee Member
                Upscene Productions - Database Tools for Developers
                Mein Blog

                Comment


                • #9
                  Hallo Thomas,

                  die View wird nur über eine Tabelle erstellt.
                  Was meinst du mit DDL? Den Create Befehl?
                  Danke im voraus

                  Hendri

                  Comment


                  • #10
                    Ja, genau, die CREATE Anweisung. DDL (= Data Definition Language).
                    <br><br>
                    Thoma
                    Thomas Steinmaurer

                    Firebird Foundation Committee Member
                    Upscene Productions - Database Tools for Developers
                    Mein Blog

                    Comment


                    • #11
                      Hallo Thomas,

                      folgendermaßen sieht die DDL aus.

                      <pre>

                      CREATE VIEW KUNDE_OHNE_GEOCODE (
                      KUNDEID,
                      NAME2,
                      PLZ,
                      USER_EDIT,
                      DATUM_NEU,
                      USER_NEU,
                      DATUM_EDIT,
                      X,
                      LKZ,
                      Y,
                      VORNAME2,
                      FAMSTAND,
                      VKL,
                      VKB,
                      VORNAME1,
                      LOESCHGRUND,
                      STATUS,
                      ORT,
                      CHIFFRE,
                      TITEL1,
                      TITEL2,
                      HANDY1,
                      HANDY2,
                      GEBDATUM1,
                      GEBDATUM2,
                      WETTBEWERBER,
                      QUALIFIZIERUNG,
                      ANREDE1,
                      BRIEFANREDE1,
                      BRIEFANREDE2,
                      QUELLE,
                      NAME1,
                      ORTSTEIL,
                      ERFASSUNG,
                      KREIS,
                      EMAIL2,
                      INTERNET,
                      BERUF1,
                      BERUF2,
                      EMAIL1,
                      LOESCHVKB,
                      DATUMINTKUN,
                      LOESCH_INFO,
                      DUBLETTENGRUND,
                      SOUNDEX,
                      KUNDETEMPID,
                      QUELLEART,
                      SUBKREIS,
                      STRASSE2,
                      PLZ2,
                      ORT2,
                      VERMITTLERNAME,
                      MANDANT_ID,
                      STRASSE,
                      VERTRIEBSSTELLE,
                      LKZ2,
                      PKNR,
                      VW_TELEFAX,
                      TELEFAX,
                      VW_TELEFON1,
                      TELEFON1,
                      TELEFON2,
                      VW_TELPRIV,
                      TELPRIV,
                      VW_TELEFON2,
                      NEU,
                      K_INFO,
                      ADRESSZEILE1_FRIDA,
                      ADRESSZEILE2_FRIDA,
                      K_INFO_TEXT,
                      VERKAUFSGEBIET_NR,
                      REFERENZKUNDE,
                      BEREINIGT,
                      ERSTINFO_VERSENDEN
                      ) AS SELECT * FROM KUNDE WHERE X IS NULL
                      </pre>

                      Hmm, heute nacht ist ein Backup/Restore gelaufen. Haute morgen habe ich über den SQL Explorer nochmals versucht, die View wieder einzubauen, leider ohne Erfolg.

                      Danke & Gruß

                      Hendri

                      Comment


                      • #12
                        Hallo Hendrik,
                        <br><br>
                        wenn Du die VIEW-Felder explizit angibst, dann solltest Du dies auch im SELECT tun, damit man später keine böse Überraschung erlebt, weil dann das Feldmapping nicht mehr passt.
                        <br><br>
                        Also nicht SELECT * FROM KUNDE ... sondern SELECT FELD1, FELD2, ... FROM KUNDE.
                        <br><br>
                        Ein weiterer Grund könnte sein, dass Du ein VIEW-Feld doppelt vergeben hast, d.h. dass der Feldname zweimal in der Feldliste auftaucht. Da es bei Dir sehr viele Felder sind, werde ich diese nicht durchgehen, sondern lass das Dir über. ;-)
                        <br><br>
                        Vielleicht hilft das ja.
                        <br><br>
                        Thoma
                        Thomas Steinmaurer

                        Firebird Foundation Committee Member
                        Upscene Productions - Database Tools for Developers
                        Mein Blog

                        Comment


                        • #13
                          Hallo Thomas,

                          genau da war mein Problem, das Feldmapping passte nicht.
                          Die View ist jetzt wieder da, wo sie hingehört.
                          Super vielen Dank für deine Hilfe. Bestens, jetzt kann ich ja beruhigt ins Wochenende gehen.

                          Viele Grüße

                          Hendrik Neuman

                          Comment

                          Working...
                          X