Fuente/ Codesnippets | | | | Uwe ''Pascal'' Niemeier | Hi Personas!
Posesiones veces una wenig con el Möglichkeit gespielt, Bilder o.Ä. en Datenbanken abzulegen. Hier el Ergebnisse...
Beim Carta langer Cuerdas hay anscheinend no Maximalgröße; mehrere 100 KB son con Standartfunktionen kein Problema, vorausgesetzt el db unterstützt entsprechende Feldtypen: KompilierenMarcaSeparación****************** Demo: Beliebig lange Strings in DB schreiben
****************** Profan : 11.1 und höher
****************** Windows: XP SP3
****************** kein © (Standartfunktionen)
window 50,50-500,500
declare Exec$
--Access
var mdb$=X:ExperimenteSQL-APIAccessTest1.mdb
var Init$=Driver={Microsoft Access Driver (*.mdb)};Dbq=+mdb$+;Uid=;Pwd=;
--SQL Express
var Init$=Driver={SQL Server};Server=(local)SQLExpress;UID=sa;PWD=sql;
SQLInit(Init$)
Exec$=DROP TABLE TCS
SQLExec Exec$,0---Fehlermeldung, wenn db nicht vorhanden => Egal!
Exec$=CREATE TABLE TCS (Feld1 MEMO)---------Access > FeldTyp MEMO
Exec$=CREATE TABLE TCS (Feld1 VARCHAR(MAX))--SQLExpress > FeldTyp VARCHAR(MAX)
SQLExec Exec$,0--db anlegen
declare Text#
var File$=C:2TestBild2.jpg-----------------------Quellpfad bitte anpassen!
var Size&=filesize(File$)
dim Text#,Size&
assign #1,File$
openrw #1
blockread(#1,Text#,0,Size&)
closerw #1
var Text$=char$(Text#,0,Size&)
dispose Text#
Text$=encode64(Text$)
Exec$=INSERT INTO TCS (Feld1) VALUES (+Text$+)
SQLExec Exec$,0--keine Größenbegrenzung beim Schreiben!
SQLDone
waitkey
Lediglich beim Einlesen el Daten voluntad selbige beschnitten, por lo tanto hier una SQL-API-Möglichkeit a Auswertung: KompilierenMarcaSeparación****************** Demo: Beliebig largo Cuerdas de DB lesen
****************** Profano : 11.1 y höher
****************** Windows: XP SP3
****************** © by TCS (Uwe Pascal Niemeier) 022009
--Listbox-Liste se como Fehler-Log verwendet
--y en el Fehlerfall automáticamente muestra.
--Lo se sólo el 1. Feld des 1. gefundenen Datensatzes ausgewertet!
--Also SQL-Abfrage entsprechend einrichten!
window 50,50-500,500
$H Windows.ph
def SQLAllocHandle(3) !odbc32,SQLAllocHandle
def SQLError(8 ) !odbc32,SQLError
def SQLExecDirect(3) !odbc32,SQLExecDirect
def SQLGetData(6) !odbc32,SQLGetData
def SQLFetch(1) !odbc32,SQLFetch
def SQLFreeHandle(2) !odbc32,SQLFreeHandle
proc SQLErrorLog-----------------------------------------SQLErrorLog
parámetros Von$
declarar Error$
SQLError(&SQLEnv,&SQLDBC,stmt&,0,0,Error#,512,0)
Error$=cadena$(Error#,0)
caso len(Error$):addstring Von$+ : +Error$
ENDPROC-------------------------------------------------------------
proc SQLGetDataEx---------------------------------------SQLGetDataEx
parámetros Exec$
declarar Data#,Data$,Size&,stmt&,Error#
dim Error#,512
clearlist
SQLAllocHandle(3,&SQLDBC,addr(stmt&))--3=SQL_HANDLE_STMT
SQLErrorLog(SQLAllocHandle)
SQLExecDirect(stmt&,addr(Exec$),-3)-- -3=SQL_NTS
SQLErrorLog(SQLExecDirect)
dim Data#,1--Dummy-DIM
SQLFetch(stmt&)
SQLErrorLog(SQLFetch)
SQLGetData(stmt&,1,99,Data#,0,addr(Size&))--99=SQL_C_DEFAULT
--Fehlerabfrage sería a pequeño Puffer informe (Dummy-Aufruf ca. Size&)
if Size&>0
dim Data#,Size&+1
SQLGetData(stmt&,1,99,Data#,Size&+1,addr(Size&))--99=SQL_C_DEFAULT
SQLErrorLog(SQLGetData)
Data$=char$(Data#,0,Size&)
endif
SQLFreeHandle(3,stmt&)--3=SQL_HANDLE_STMT
disponer Data#,Error#
caso %getcount>-1:listbox$(Fehler,2)
volver Data$
ENDPROC-------------------------------------------------------------
---Access
var mdb$=X:ExperimenteSQL-APIAccessTest1.mdb
var Init$=Driver={Microsoft Access Driver (*.mdb)};Dbq=+mdb$+;Uid=;Pwd=;
--SQL Express
var Init$=Driver={SQL Server};Server=(local)SQLExpress;UID=sa;PWD=sql;
SQLInit(Init$)
var Exec$=SELECT TOP 1 Feld1 FROM TCS
var Texto$=SQLGetDataEx(Exec$)
Texto$=decode64(Texto$)
declarar Texto#
dim Texto#,len(Texto$)+1
char Texto#,0=Texto$
assign #1,C:2TestTest.jpg------------------------Zielpfad Por favor, adaptar!
erase #1
openrw #1
blockwrite #1,Texto#,0,len(Texto$)
closerw #1
disponer Texto#
SQLDone
Getestet (cómo sieht) con Access-dbs (*.mdb) (Access muß no verfügbar ser) y MS SQL Express 2005. Ob el Daten con encode64() codiert voluntad necesario, es möglicherweise vom Feldtyp abhängig; en oben genannten dbs ging no sin. Im Zweifelsfall ausprobieren.
Tal vez kanns alguien brauchen
SeeYou Pascal |
| | | | |
| | Thomas Kallenberger | ¡Hola Pascal, el API sieht bien de - Yo debería todos lediglich umgekehrt haben - d.h. Daten de uno Textdatei en un Access-Tabla bringen. Tal vez ha alguien Vorschlag! Línea para Línea einlesen es irgendwie no así prickelnd. Gracias para Eure Mühe! Liebe Grüße Thomas |
| | | | |
| | Michael W. | el Ganze otra vez con Anführungszeichen y Kommentarzeichen. El son irgendwo verschollen... KompilierenMarcaSeparación'****************** Demo: Beliebig lange Strings in DB schreiben
'****************** Profan : 11.1 und höher
'****************** Windows: XP SP3
'****************** kein © (Standartfunktionen)
window 50,50-500,500
declare Exec$
'--Access
var mdb$="X:ExperimenteSQL-APIAccessTest1.mdb"
var Init$="Driver={Microsoft Access Driver (*.mdb)};Dbq=+mdb$+;Uid=;Pwd=;"
'--SQL Express
var Init$="Driver={SQL Server};Server=(local)SQLExpress;UID=sa;PWD=sql;"
SQLInit(Init$)
Exec$="DROP TABLE TCS"
SQLExec Exec$,0'---Fehlermeldung, wenn db nicht vorhanden => Egal!
Exec$="CREATE TABLE TCS (Feld1 MEMO)"'---------Access > FeldTyp MEMO
Exec$="CREATE TABLE TCS (Feld1 VARCHAR(MAX))"'--SQLExpress > FeldTyp VARCHAR(MAX)
SQLExec Exec$,0'--db anlegen
declare Text#
var File$="C:2TestBild2.jpg"'-----------------------Quellpfad bitte anpassen!
var Size&=filesize(File$)
dim Text#,Size&
assign #1,File$
openrw #1
blockread(#1,Text#,0,Size&)
closerw #1
var Text$=char$(Text#,0,Size&)
dispose Text#
Text$=encode64(Text$)
Exec$="INSERT INTO TCS (Feld1) VALUES (" + "Text$" + ")"
SQLExec Exec$,0'--keine Größenbegrenzung beim Schreiben!
SQLDone
waitkey
KompilierenMarcaSeparación'****************** Demo: Beliebig largo Cuerdas de DB lesen
'****************** Profano : 11.1 y höher
'****************** Windows: XP SP3
'****************** © by TCS (Uwe Pascal Niemeier) 022009
'--Listbox-Liste se como Fehler-Log verwendet
'--y en el Fehlerfall automáticamente adecuado.
'--Lo se sólo el 1. Feld des 1. gefundenen Datensatzes ausgewertet!
'--Also SQL-Abfrage entsprechend einrichten!
window 50,50-500,500
$H Windows.ph
def SQLAllocHandle(3) !odbc32,SQLAllocHandle
def SQLError(8 ) !odbc32,SQLError
def SQLExecDirect(3) !odbc32,SQLExecDirect
def SQLGetData(6) !odbc32,SQLGetData
def SQLFetch(1) !odbc32,SQLFetch
def SQLFreeHandle(2) !odbc32,SQLFreeHandle
proc SQLErrorLog'-----------------------------------------SQLErrorLog
parámetros Von$
declarar Error$
SQLError(&SQLEnv,&SQLDBC,stmt&,0,0,Error#,512,0)
Error$=cadena$(Error#,0)
caso len(Error$) : addstring Von$+" : "+Error$
ENDPROC'-------------------------------------------------------------
proc SQLGetDataEx'---------------------------------------SQLGetDataEx
parámetros Exec$
declarar Data#,Data$,Size&,stmt&,Error#
dim Error#,512
clearlist
SQLAllocHandle(3,&SQLDBC,addr(stmt&))'--3=SQL_HANDLE_STMT
SQLErrorLog("SQLAllocHandle")
SQLExecDirect(stmt&,addr(Exec$),-3)'-- -3=SQL_NTS
SQLErrorLog("SQLExecDirect")
dim Data#,1'--Dummy-DIM
SQLFetch(stmt&)
SQLErrorLog("SQLFetch")
SQLGetData(stmt&,1,99,Data#,0,addr(Size&))'--99=SQL_C_DEFAULT
'--Fehlerabfrage sería a pequeño Puffer informe (Dummy-Aufruf ca. Size&)
if Size& > 0
dim Data#,Size&+1
SQLGetData(stmt&,1,99,Data#,Size&+1,addr(Size&))'--99=SQL_C_DEFAULT
SQLErrorLog("SQLGetData")
Data$=char$(Data#,0,Size&)
endif
SQLFreeHandle(3,stmt&)'--3=SQL_HANDLE_STMT
disponer Data#,Error#
caso %getcount > -1 : listbox$(Fehler,2)
volver Data$
ENDPROC'-------------------------------------------------------------
'---Access
var mdb$="X:ExperimenteSQL-APIAccessTest1.mdb"
var Init$="Driver={Microsoft Access Driver (*.mdb)};Dbq=+mdb$+;Uid=;Pwd=;"
'--SQL Express
var Init$="Driver={SQL Server};Server=(local)SQLExpress;UID=sa;PWD=sql;"
SQLInit(Init$)
var Exec$="SELECT TOP 1 Feld1 FROM TCS"
var Texto$=SQLGetDataEx(Exec$)
Text$=decode64(Texto$)
declarar Texto#
dim Texto#,len(Texto$)+1
char Texto#,0 = Texto$
assign #1,"C:2TestTest.jpg"'------------------------Zielpfad Por favor, adaptar!
erase #1
openrw #1
blockwrite #1,Texto#,0,len(Texto$)
closerw #1
disponer Texto#
SQLDone
|
| | | XProfan X3System: Windows 8/10, XProfan X4 Programmieren, das spannendste Detektivspiel der Welt. | 11.08.2015 ▲ |
| |
|
Zum QuelltextThemeninformationenDieses Thema ha 3 subscriber: |