Binärdaten im SQL-Statement [ERLEDIGT]

Advantage Database Server

Moderator: Moderatoren

Antworten
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Binärdaten im SQL-Statement [ERLEDIGT]

Beitrag von UliTs »

Hallo allerseits,

ich bin gerade darüber gestolpert, dass ich mit einem SQL-Insert-Befehl ein Binärfeld füllen möchte. Im konkreten Fall möchte ich den Inhalt eine PDF-Dokuments speichern.
Eigentlich geht es bei Textfeldern ja einfach:

Code: Alles auswählen

INSERT INTO Dokumente( DokId,DateiInhalt )
VALUES      ( 12345,'Toller Inhalt :-)' );
Aber wie mache ich das bei Werten mit Sonderzeichen, Zeilenumbrüchen, etc.?

Uli
Zuletzt geändert von UliTs am Mi, 25. Sep 2013 13:21, insgesamt 1-mal geändert.
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2825
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 96 Mal
Danksagung erhalten: 13 Mal

Re: Binärdaten im SQL-Statement

Beitrag von georg »

Hallo, Uli -


MySQL (und auch PostgreSQL) kennen eine Funktion, mit der man beliebige Werte in einen SQL-konformen Ausdruck umsetzen kann.

Die entsprechende MySQL C-API Funktion heisst mysql_real_escape_string(). Es sollte (theoretisch) bei ADS etwas vergleichbares geben. "Escape" wäre meine Empfehlung für einen Suchbegriff.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Binärdaten im SQL-Statement

Beitrag von brandelh »

Falls die Datenbank keine BLOB Dateien unterstützt, könnte man die Datei - wie bei eMail - z.B. auf Base64 kodieren ... und als Text speichern
http://de.wikipedia.org/wiki/Base64
Gruß
Hubert
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Binärdaten im SQL-Statement

Beitrag von UliTs »

brandelh hat geschrieben:Falls die Datenbank keine BLOB Dateien unterstützt, könnte man die Datei - wie bei eMail - z.B. auf Base64 kodieren ... und als Text speichern
http://de.wikipedia.org/wiki/Base64
Der ADS unterstützt (natürlich) Binärfelder. Über die ADS-Api kann ich sie auch problemlos lesen und schreiben. Es geht aber darum, wie das auch mit Hilfe eines SQL-Statements machen kann :? .
Georg: so etwas wie "ESCAPE" scheint es beim ADS nicht zu geben. Allerdings gibt es Char2Hex() und damit versuche ich es gerade (bisher erfolglos) hinzubekommen.

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2825
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 96 Mal
Danksagung erhalten: 13 Mal

Re: Binärdaten im SQL-Statement

Beitrag von georg »

Hallo, Uli -


das mysql_real_escape_string() dient dazu, z.B. aus einem "Das ist ein Text mit \ und "." ein "Das ist ein Text mit \\ und \"." zu machen, d.h. es sorgt dafür, dass Sonderzeichen "escaped" werden, damit sie beim Einlesen bzw. Verarbeiten nicht falsch interpretiert werden.

Du solltest herausfinden, welches Zeichen verwendet wird, um die eigentliche Funktion eines Zeichens zu unterdrücken, und dann kannst Du ja versuchen, die entsprechenden Sonderzeichen mit diesem Escape-Zeichen einzuleiten.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9361
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Binärdaten im SQL-Statement

Beitrag von Tom »

xb2.net enthält u.a. Funktionen wie xbBase64Encode.
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Binärdaten im SQL-Statement

Beitrag von brandelh »

UliTs hat geschrieben:
brandelh hat geschrieben:Falls die Datenbank keine BLOB Dateien unterstützt, könnte man die Datei - wie bei eMail - z.B. auf Base64 kodieren ... und als Text speichern
http://de.wikipedia.org/wiki/Base64
Der ADS unterstützt (natürlich) Binärfelder. Über die ADS-Api kann ich sie auch problemlos lesen und schreiben. Es geht aber darum, wie das auch mit Hilfe eines SQL-Statements machen kann :? .
Georg: so etwas wie "ESCAPE" scheint es beim ADS nicht zu geben. Allerdings gibt es Char2Hex() und damit versuche ich es gerade (bisher erfolglos) hinzubekommen.
Uli
ich wollte der ADS nicht zu nahe treten ... ;-)

Wenn die ADS es codiert speichert, sollte man es auch so tun, wenn nicht ...
In Pablos SQLexpress Forum hat jemand geschrieben, dass er SQLValue() nutzt um den richtigen Datentyp zu erzeugen, aber nichts näheres.
In einem anderen Forum habe ich gelesen, dass JAVA das oBlob-Objekt richtig erkennt und übergibt, daraus schließe ich, dass man den INSERT Befehl vom Inhalt trennen muss und dann diesen als Variable übergibt. Etwa so ... tatsächlich gespeichert habe ich aber immer nur die Dateinamen.

Code: Alles auswählen

oStmt:SQLString := 'INSERT INTO MyTable (Field1, Blob2) VALUES (?,?)'
cFile := memoread(cFileName)
oStmt:Execute("Bildname", cFile)
Gruß
Hubert
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Binärdaten im SQL-Statement [ERLEDIGT]

Beitrag von UliTs »

Hallo Tom,

ich vermute, Xb2.net hat nichts direkt mit dem ADS zu tun?

Ich habe es jetzt hinbekommen:

Code: Alles auswählen

INSERT INTO Dokumente( DokId,DateiInhalt )
VALUES      ( 12345,Char2Hex(cPDFHex) );
wobei ich voher das PDF-Dokument in einen HEX-String umwandle, welche cPDFHex ersetzt :-) .

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Binärdaten im SQL-Statement

Beitrag von UliTs »

brandelh hat geschrieben:...Wenn die ADS es codiert speichert, sollte man es auch so tun, wenn nicht ...
Der ADS speichert im Normalfall BINÄRDATEN nicht codiert. Deshalb die Rückumwandlung mit der ADS-Funktion Char2Hex() :-) .

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 651
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: Binärdaten im SQL-Statement

Beitrag von nightcrawler »

Nimm bitte, wie von Brandelh vorgeschlagen, Parameter...damit bist Du immer auf der richtigen Seite und bist gleichzeitig auch nicht verwundbar für SQL Injection.
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Binärdaten im SQL-Statement [ERLEDIGT]

Beitrag von brandelh »

Hi,

wie nightcrawler anmerkt speichert der ADS direkt BINÄR-Daten (oder verstehe ich das falsch), die Syntax kenne ich nicht, aber vermutlich so ähnlich wie bei SQLexpress ...

Code: Alles auswählen

oStmt:SQLString := 'INSERT INTO MyTable (Field1, Blob2) VALUES (?,?)'
cFileBuffer := memoread(cFileName)
oStmt:Execute("Bildname", cFileBuffer )
Die binäre Speicherung ist sparsamste, da 1 Byte = 1 Byte bleibt. Je nach Zielsystem sind da nur 64 KByte erlaubt, oft 2 / 4 GB.

Funktionen wie Char2Hex() etc. braucht man ja nur, wenn das Zielsystem keine "nicht druckbaren Zeichen" erhalten darf (z.B. eMail oder DBFNTX Memofelder) .

Solche Codierungen benötigen aber mehr Speicher, ich habe mal ein Testprogramm erstellt, wobei ich neben HEX (1 Byte in "XX" Darstellung), auch die Asinet Base64 und UUencode verwendet habe:

Code: Alles auswählen

#include "Gra.ch"
#include "Xbp.ch"
#include "Common.ch"

#pragma Library( "AsiUtl10.lib" )

procedure main
   local cBuffer := memoread("beispiel.pdf")
   local nLenOrg := len(cBuffer)
   local cB64, nLenB64, cUU, nLenUU, cHex, nLenHex, x
   cls
   set alternate to Logdatei.txt
   set alternate on
   ? "Berechnen ... "
   cB64    := ToBase64(cBuffer)
   nLenB64 := len(cB64)
   cUU     := UUEncode(cBuffer)
   nLenUU  := len(cUU)
   cHex    := Char2Hex(cBuffer)
   nLenHex := len(cHex)

   if cBuffer == Hex2Char(cHex)
      // OK, die Funktionen stimmen
   else
      ? "Fehler, Char2Hex() und Hex2Char() ergeben nicht den Ursprungsstring:"
      Str2Disk("Beispiel-neu.PDF",Hex2Char(cHex))
      inkey(5)
   endif
   cls
   ? "Programm vergleicht die Dateigrößen beim Encoding mit verschiedenen Methoden."
   ?
   ? "Original:                                              ",transform(nLenOrg,"999,999,999"),"Byte"
   ?
   ? "1. HEX() benötigt 2 Byte HEX-String für jedes Zeichen: ",transform(nLenHex,"999,999,999"),"Byte",str(nLenHex/nLenOrg*100,4)+"%"
   ? "2. Base64   (AsiNet):                                  ",transform(nLenB64,"999,999,999"),"Byte",str(nLenB64/nLenOrg*100,4)+"%"
   ? "3. UUEncode (AsiNet):                                  ",transform(nLenUU ,"999,999,999"),"Byte",str(nLenUU /nLenOrg*100,4)+"%"
   ?
   ? "ENDE, bitte Taste drücken ..."

   set alternate to
   Str2Disk("Logdatei.txt",ConvToAnsiCP(memoread("Logdatei.txt")))

/*
   ? "Test für Byte2Hex() und Hex2Byte()"
   for x := 0 to 255
      cByte := chr(x)
      ? x," = 0x"+Byte2Hex(cByte), "Test: ", cByte = Hex2Byte(Byte2Hex(cByte))
      if ! cByte = Hex2Byte(Byte2Hex(cByte))
         ? "Fehler"
         inkey(5)
      endif
   next
*/

   wait
return

*---------------------------------------------------------------------------------------------
function Char2Hex(cBuffer)
   local x,nAnz, cHex := ""
   if ! empty(cBuffer)
      nAnz := len(cBuffer)
      for x := 1 to nAnz
          cHex += Byte2Hex(cBuffer[x])
      next
   endif
return cHex
*---------------------------------------------------------------------------------------------
function Hex2Char(cHex)
   local x,nAnz, cBuffer := ""
   if ! empty(cHex)
      nAnz := len(cHex)
      for x := 1 to nAnz step 2
          cBuffer += Hex2Byte(substr(cHex,x,2))
      next
   endif
return cBuffer
*---------------------------------------------------------------------------------------------
function Byte2Hex(cByte)
   local nByte,nHigh,nLow,cHex
   nByte := asc(cByte)
   nHigh := int(nByte/16)
   nLow  := nByte % 16
   if nHigh < 10
      cHEX  := chr(nHigh+48)
   else
      cHEX  := chr(nHigh+55)
   endif
   if nLow < 10
      cHEX  += chr(nLow+48)
   else
      cHEX  += chr(nLow+55)
   endif
return cHex
*---------------------------------------------------------------------------------------------
function Hex2Byte(cHex) // maximal 2 Stellen
   local cByte    := "" // falls KEIN String übergeben wurde, geben wir auch einen leeren zurück.
   if ! empty(cHex)
      if len(cHex) > 1
         cHex := left(upper(cHex),2)
      else
         cHex := "0"+upper(cHex)
      endif
      if cHex[1] < "A"
         nByte := val(cHex[1])*16
      else
         nByte := (asc(cHex[1])-55)*16
      endif
      if cHex[2] < "A"
         nByte += val(cHex[2])
      else
         nByte += asc(cHex[2])-55
      endif
      cByte := chr(nByte)
   endif
return cByte
*---------------------------------------------------------------------------------------------
function Str2Disk(cFile,cTxt)             // memowrit() fügt ein chr(26) an die Datei an
   local nResult, nHandle, nByte
   nResult := 0                           // wird schon alles gut gehen ...
   nHandle := FCreate(cFile)
   if nHandle = -1
      nResult := FError()
   else
      nByte := FWrite( nHandle, cTxt )
      if len(cTxt) # nByte
         nResult := FError()
      endif
   endif
   FClose(nHandle)
return nResult
Das Ergebnis zeigt, dass HEX den doppelten Platz benötigt, die anderen etwa 150 %:

Code: Alles auswählen

Berechnen ... 
Programm vergleicht die Dateigrößen beim Encoding mit verschiedenen Methoden.

Original:                                                   131.253 Byte

1. HEX() benötigt 2 Byte HEX-String für jedes Zeichen:      262.506 Byte  200%
2. Base64   (AsiNet):                                       179.864 Byte  137%
3. UUEncode (AsiNet):                                       183.755 Byte  140%

ENDE, bitte Taste drücken ...
Ich denke, dass die Ergebnisse meiner HEX Funktion denen der ADS gleichen, allerdings deutlich langsamer sind.
Dateianhänge
TestEncoding.zip
(8.51 KiB) 251-mal heruntergeladen
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Binärdaten im SQL-Statement [ERLEDIGT]

Beitrag von brandelh »

Hier die Laufzeiten einer 9 MB Datei:

Code: Alles auswählen

Berechnen ... 
Base64:            0,03 Sekunden
UUencode:          0,04 Sekunden
HEX:               5,11 Sekunden
Programm vergleicht die Dateigrößen beim Encoding mit verschiedenen Methoden.

Original:                                                 9.962.425 Byte

1. HEX() benötigt 2 Byte HEX-String für jedes Zeichen:   19.924.850 Byte  200%          5,11 Sekunden (meine Xbase++ Funktionen)
2. Base64   (AsiNet):                                    13.652.214 Byte  137%          0,03 Sekunden
3. UUEncode (AsiNet):                                    13.947.400 Byte  140%          0,04 Sekunden

ENDE, bitte Taste drücken ...
Gruß
Hubert
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Binärdaten im SQL-Statement

Beitrag von UliTs »

nightcrawler hat geschrieben:Nimm bitte, wie von Brandelh vorgeschlagen, Parameter...damit bist Du immer auf der richtigen Seite und bist gleichzeitig auch nicht verwundbar für SQL Injection.
Ja, dass ist sicher noch besser :-) .
Aber was bedeutet "verwundbar für SQL Injection" :?:

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Binärdaten im SQL-Statement [ERLEDIGT]

Beitrag von UliTs »

brandelh hat geschrieben:...Funktionen wie Char2Hex() etc. braucht man ja nur, wenn das Zielsystem keine "nicht druckbaren Zeichen" erhalten darf (z.B. eMail oder DBFNTX Memofelder) ...
Was meinst Du damit?
In meinem Fall brauchte ist das nur, um ein gültiges SQL-Statement (ohne Parameter) zu erzeugen...
Nachteil: Dadurch ist das Statement annähernd doppelt so groß ...
Gespeichert werden ja aber trotzdem nur die Binärdaten.

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Binärdaten im SQL-Statement [ERLEDIGT]

Beitrag von brandelh »

Hallo Ulli,
Ulli hat geschrieben:Aber was bedeutet "verwundbar für SQL Injection" :?:
:arrow: http://de.wikipedia.org/wiki/SQL-Injection

Der Trick ist, eben NICHT die Werte / Variablen direkt im ersten Statement unterzubringen, sondern zunächst den allgemeinen Befehl vorzubereiten (bei SQLexpress geht das über die obige Syntax):

Code: Alles auswählen

INSERT INTO Dokumente( DokId,DateiInhalt ) VALUES ( ? , ? )
das so erzeugte Statement, wird dann (mehrfach) ausgeführt, wobei die Daten dann übergeben werden ... hier die ganze SQLexpress Syntax:

Code: Alles auswählen

oStmt:SQLString := 'INSERT INTO MyTable (Field1, Blob2) VALUES (?,?)'
cFile := memoread(cFileName)
oStmt:Execute("Bildname", cFile)
gibt es nicht sowas wie PREPAIR und EXECUTE ?

Was sind BINÄR Daten ...

cFile := MemoRead("MeinFilm.ISO") // solange der Speicher reicht ...

In cFile sind nun alle möglichen Zeichen enthalten, die in Zeichenfeldern als Umlaute, Steuerzeichen, chr(0)=Ende des String interpretiert werden.
Das ist aber für diese Art der Datei völlig inakzeptabel, da ja gerade nur BINÄRE Werte enthalten sind.

Wenn man nun diese Daten in eine Datei speichern will, gibt es Zeichenfelder: DBFDBE Datentypen C, M etc. ein
replace in ein solches Memofeld würde Konvertierungen auslösen (OEM/ANSI), je nach Einstellung.
Also muss man diese Variable mit dem BINÄR Puffer in eine Form umwandeln, die nur "druckbare Zeichen" enthält, HEX nutzt 00 bis FF für jedes Byte, benötigt also doppelten Speicherplatz, aber das ginge:

Code: Alles auswählen

replace TextMemoFeld with Char2Hex( cByteBuffer ) // cByteBuffer hatte z.B. 200 Zeichen, gespeichert werden 400
cByteBuffer := Hex2Char(TextMemoFeld) // liefert den gleichen Inhalt wie die Ausgangsvariable.
replace TextMemoFeld with cByteBuffer // cByteBuffer hatte z.B. 200 Zeichen, gespeichert werden 200, aber eventuelle Konvertierungen werden durchgeführt.
cByteBuffer := TextMemoFeld // liefert einen konvertierten Inhalt, wobei nicht alle Konvertierungen 1:1 rückgängig gemacht werden können und Steuerzeichen könnten den String verkürzt haben.

Bei einem BINÄREN Memofeld wie es die FOXDBE bietet (Memo (binary) "V") kann man direkt schreiben und lesen:

Code: Alles auswählen

replace BinMemoFeld with cByteBuffer // cByteBuffer hatte z.B. 200 Zeichen, gespeichert werden 200
cByteBuffer := BinMemoFeld) // liefert den gleichen Inhalt wie die Ausgangsvariable.
wenn man also die BytePufferVariable einfach als Parameter angibt (ähnlich wie ein Datumswert oder Numerisch) und die Speicherung funktioniert, dann wird intern BINÄR gespeichert.
Wenn es bei Lesen / Schreiben Fehler gibt, dann muss man mit Base64, UUencode, oder HEX codierten Variablen arbeiten.
Gruß
Hubert
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Binärdaten im SQL-Statement [ERLEDIGT]

Beitrag von UliTs »

brandelh hat geschrieben:...
Ulli hat geschrieben:Aber was bedeutet "verwundbar für SQL Injection" :?:
:arrow: http://de.wikipedia.org/wiki/SQL-Injection
Danke für den Link! Es ist so, wie ich vermutet habe :D . Aber zum Glück so wie ich programmiert habe, bietet es keine Angriffsfläche 8) .
Aber besser ist es schon mit Parametern. Bisher hatte ich nur bei SELECT-Statements mit Parametern gearbeitet. Und da gibt es auch PREPAIR- und EXECUTE-Aufrufe in der ADS-API.

Warum Du BINÄR-Daten erwähnst, verstehe ich nicht. Ich hatte ja schon beschrieben, wie man die Binärdaten auch ohne SQL-Statements mit Parametern beim ADS speichern kann :-)

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Binärdaten im SQL-Statement [ERLEDIGT]

Beitrag von brandelh »

UliTs hat geschrieben: Warum Du BINÄR-Daten erwähnst, verstehe ich nicht. Ich hatte ja schon beschrieben, wie man die Binärdaten auch ohne SQL-Statements mit Parametern beim ADS speichern kann :-)
Uli
vermutlich verstehe ich nicht, was du meinst, spielt aber keine Rolle ;-)
Gruß
Hubert
Antworten