Foro | | | | - Página 1 - |
|  Dietmar Horn | ¡Hola zusammen,
heute wende Yo mich veces con un SQL-Problema zwecks Bitte en Hilfestellung a el SQL-Experten bajo euch.
Yo arbeite z.Z. con XProfan 11 a una komplexeren Projekt. Es ya bastante weit gediehen. Der bisher einzigste, aber entscheidende Problempunkt es para mich el An- o. Einbindung des RDBS Firebird (Freeware o. Open-Source) o. Interbase (el kostenpflichtige Gegenstück de Borland a Firebird - ähnlich como el Verhältnis zwischen MS Office y Open-Office).
Bisher mußte Yo mich todavía nie groß con SQL beschäftigen, außer Yo me siempre veces el XProfan-Ayuda para SQL-Thema reingezogen y el alles como bastante logisch empfunden hatte. Doch como des öfteren, liegt el Hund determinado sólo en un winzigen Detalle begraben, Yo no saber, oder en un Fehler, el Yo gemacht oder übersehen habe.
Firebird y Interbase kannte Yo a antes 4 Wochen todavía no veces vom Namen her, porque Yo algo como todavía nie benötigt hatte - aber nun es soweit.
ODBC-Treiber y Firebird son installiert.
Zunächst es por lo tanto, una Verbindung herzustellen. Bajo Windows 2000 (en unserem Vereins-Kabinett) klappt el Initialisierung con SQLInit inzwischen.
El Initialisierung liefert bajo W 2000 como gewünscht el Handle zurück:
Bajo Windows XP ergibt el sin embargo a ahora siempre 0 (also gescheitert), y en el Gegensatz a W 2000 erscheint como vorher todavía no veces el Diálogo para Eingeben de Username, PWD, usw.
Antes dieses Problema con el Herstellen el Verbindung no gelöst es, brauche Yo nada groß weitermachen.
Literatur encima Firebird Yo inzwischen tonnenweise, doch bevor Yo no schaffe, en allen Windows-Systemen de 2000 aufwärts una zuverlässige Verbindung herzustellen, nützt me alles por desgracia, no allzu viel.
Kann me tal vez alguien weiterhelfen, el se ya veces algo näher así beschäftigt ha?
El nächsten Schritte, also el Neuanlegen uno Datenbank, oder el Editar / Auslesen uno vorhandenen DB y el Weiterverarbeiten el Daten en el real Programa dürfte entonces lediglich todavía uno reine Fleiß- y Logik-Arbeit ser.
Das Ausweichen z.B. en dBase es no posible, porque dBase dbzgl. no en para dieses Projekt erforderlichen Feautures verfügt.
Wer kann evtl. weiterhelfen?
Yo vermute veces, si el Programa irgendwann con Firebird se ejecuta, entonces müßte el Programa auch con Interbase trabajo - oder?
Saludo y Gracias en el voraus Dietmar |
 | | | Multimedia für Jugendliche und junge Erwachsene - MMJ Hoyerswerda e.V. [...]  Windows 95 bis Windows 7 Profan² 6.6 bis XProfan X2 mit XPSE Das große XProfan-Lehrbuch: [...]  | 11.01.2009 ▲ |
| |
| | | | | - Página 6 - |
|  RGH | Dietmar Horn
Dietmar HornUnd el BLOBs voluntad sí por el 64KB-Grenze des Treibers versaut Das kann así no stimmen, porque otro Konkurrenzprodukte a mi o. unserem aktuellen Projekt trabajo con echten Blobs en Interbase y Firebird (sin embargo en C y Delphi programmiert). Nur con XProfan scheint el a ahora desafortunadamente eben todavía no a klappen.
Diese otro Programas kommunizieren bajo Umständen (con ziemlicher Sicherheit) no por ODBC con Firebird/Interbase, pero direkt. Como son natürlich bastante otro Sachen posible. XProfan kommuniziert sólo encima ODBC con allen Datenbanken, el una solche Schnittstelle bieten. Und auch hier bietet XProfan (zumindest no sin API) no todos Möglichkeiten, pero sólo el Kommunikation encima SQL por SQLExec (el el ODBC-API SQLExelDirect entspricht). Und para SQL-Statementsgibt lo en Firebird/Interbase eben el Begrenzung en 64 kB. Pascal ha sí ya gezeigt, cómo el ODBC-API nutzen kann y yo hatte más oben sí aich ya el APIs erwähnt, con denen lo vermutlich posible es, BLOBs bajo Umgehung el 64k-Grenze a befüllen. Wenn Yo Tiempo finde, voluntad Yo el veces anschauen.
Saludo Roland |
| | | Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 01.03.2009 ▲ |
| |
| |  RGH | Uwe Pascal Niemeier
Hi Personas!  Mutmaßung: Entweder Es el db-Unterstützungvon Delphi völlig anders gestrickt como el de Profano
Korekt! Delphi kann encima cierto Komponenten direkt con Interbase kommunizieren y va esta no encima ODBC.
Saludo Roland |
| | | Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 01.03.2009 ▲ |
| |
| |  Uwe ''Pascal'' Niemeier | Hi Dietmar!
Das kann así no stimmen, porque otro Konkurrenzprodukte a mi o. unserem aktuellen Projekt trabajo con echten Blobs en Interbase y Firebird (sin embargo en C y Delphi programmiert). Nur con XProfan scheint el a ahora desafortunadamente eben todavía no a klappen.
Yo erinnere otra vez a el vorgeschlagenen Workaround, en el el Daten en varios Häppchen en dasselbe Datenfeld geschrieben voluntad. Das Ergebnis es definitiv una echter BLOB!
Mit irgendeiner 32- oder 64-KB-Grenze irgendeines ODBC-Treibers dürfte el nichts a tun haben,...
Roland erwähnte sí, el dies incluso en irgendeiner Doku erwähnt se. Das el Personas de FireBird ihre Treiber como Stiefkinder ansehen es no Profans Schuld 
Auch el EMS-SQL-Manager kann echte Blob-Felder invertir
Como podría uno sí veces schauen, como el macht... Aber como Roland sí sowieso ya así zugange es, lohnt lo wohl no, porque el Ergebnis ya con el nächsten Profano-Versión obsolete wäre.
SeeYou Pascal |
| | | | |
| |  RGH | Und lo va doch: Echte Binäre BLOBs con XProfan
Antes de que yo mein obiges Beispielprogramm en echte BLOBs umschreibe, hierzunächst el Solución por ODBC-API: KompilierenMarcaSeparaciónwindow 50,50-500,500
DEF &SQL_PARAM_INPUT 1
DEF &SQL_SUCCESS 0
DEF &SQL_HANDLE_STMT 3
DEF &SQL_C_DEFAULT 99
DEF &SQL_CHAR 1
DEF &SQL_NUMERIC 2
DEF &SQL_DECIMAL 3
DEF &SQL_INTEGER 4
DEF &SQL_SMALLINT 5
DEF &SQL_FLOAT 6
DEF &SQL_REAL 7
DEF &SQL_DOUBLE 8
DEF &SQL_VARCHAR 12
DEF &SQL_DATE 9
DEF &SQL_TIME 10
DEF &SQL_TIMESTAMP 11
DEF &SQL_LONGVARCHAR -1
DEF &SQL_BINARY -2
DEF &SQL_VARBINARY -3
DEF &SQL_LONGVARBINARY -4
DEF &SQL_BIGINT -5
DEF &SQL_TINYINT -6
DEF &SQL_BIT -7
def SQLAllocHandle(3) !odbc32,SQLAllocHandle
def SQLFreeHandle(2) !odbc32,SQLFreeHandle
def SQLPrepare(3) !odbc32,SQLPrepare
def SQLBindParameter(10) !odbc32,SQLBindParameter
def SQLExecute(1) !odbc32,SQLExecute
proc SQLPutBlob
parameters Exec$, DATA#
declare stmt&, size&, ret%, error$
SQLAllocHandle(&SQL_HANDLE_STMT, &SQLDBC, addr(stmt&))
size& = SizeOf(Data#)
Ret% = SQLBindParameter(stmt&, 1, &SQL_PARAM_INPUT, &SQL_BINARY, &SQL_LONGVARBINARY,
SizeOf(Data#), 0, Data#, 0, Addr(size&))
If LoWord(Ret%) = &SQL_SUCCESS
Ret% = SQLPrepare(stmt&,addr(Exec$),len(Exec$))
If LoWord(Ret%) = &SQL_SUCCESS
Ret% = SQLExecute(stmt&)
Case LoWord(Ret%) <> &SQL_SUCCESS : Error$ = SQLExecute
Else
error$ = SQLPrepare
EndIf
Else
error$ = SQLBindParameter
EndIf
Case Len(error$) : MessageBox(error$ + fehlgeschlagen!, ODBC-Fehler, 16)
SQLFreeHandle(&SQL_HANDLE_STMT, stmt&)
endproc
Declare Bild#
CLS
Var datei$ = HELLOWEEN.JPG
Dim Bild#, FileSize(datei$)
BlockRead(datei$, Bild#, 0, FileSize(datei$))
var db& = sqlinit(DSN=KursDB;UID=SYSDBA;PWD=masterkey;DBNAME=D:\Dokumente\FireBird\KURSDB.GDB)
SQLPutBlob(INSERT INTO TCS (Feld1) VALUES (?), Bild#)
SQLDone
Print Blob geschrieben!
waitin >
end
Das Ergebnis puede ser con el SQL-Manager begutachten y z.B. el geschriebenen BLOB como Expediente speichern y esta entonces con un Bildbearbeitungsprogramm betrachten. BTW: Helloween.jpg es ca. 1,5 MB groß.
Saludo Roland |
| | | Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 02.03.2009 ▲ |
| |
| | | | - Página 7 - |
| |  RGH | Lesen y Carta binärere BLOB-Felder con XProfan
Und hier el komplette Ejemplo con binären BLOB-Feldern. (Für Blobfelder con langen Texten müßte hay algo umgeschrieben voluntad.) Im Ejemplo se una Bild-Expediente como BLOB gespeichert, otra vez ausgelesen y en el Festplatte zurückgeschrieben. (Natürlich puede hier beliebige Dateitypen verwandt voluntad.) KompilierenMarcaSeparación
{ ========================================
KONSTANTEN UND API FUNKTIONEN DEFINIEREN
========================================
DEF &SQL_PARAM_INPUT 1
DEF &SQL_SUCCESS 0
DEF &SQL_HANDLE_STMT 3
DEF &SQL_C_DEFAULT 99
DEF &SQL_CHAR 1
DEF &SQL_NUMERIC 2
DEF &SQL_DECIMAL 3
DEF &SQL_INTEGER 4
DEF &SQL_SMALLINT 5
DEF &SQL_FLOAT 6
DEF &SQL_REAL 7
DEF &SQL_DOUBLE 8
DEF &SQL_VARCHAR 12
DEF &SQL_DATE 9
DEF &SQL_TIME 10
DEF &SQL_TIMESTAMP 11
DEF &SQL_LONGVARCHAR -1
DEF &SQL_BINARY -2
DEF &SQL_VARBINARY -3
DEF &SQL_LONGVARBINARY -4
DEF &SQL_BIGINT -5
DEF &SQL_TINYINT -6
DEF &SQL_BIT -7
def SQLAllocHandle(3) !odbc32,SQLAllocHandle
def SQLFreeHandle(2) !odbc32,SQLFreeHandle
def SQLPrepare(3) !odbc32,SQLPrepare
def SQLBindParameter(10) !odbc32,SQLBindParameter
def SQLExecute(1) !odbc32,SQLExecute
def SQLExecDirect(3) !odbc32,SQLExecDirect
def SQLGetData(6) !odbc32,SQLGetData
def SQLFetch(1) !odbc32,SQLFetch
}
================
BLOB-Funktionen:
================
proc SQLPutBlob
parameters Exec$, DATA#
declare stmt&, size&, ret%, error$
SQLAllocHandle(&SQL_HANDLE_STMT, &SQLDBC, addr(stmt&))
size& = SizeOf(Data#)
Ret% = SQLBindParameter(stmt&, 1, &SQL_PARAM_INPUT, &SQL_BINARY, &SQL_LONGVARBINARY,
SizeOf(Data#), 0, Data#, 0, Addr(size&))
If LoWord(Ret%) = &SQL_SUCCESS
Ret% = SQLPrepare(stmt&,addr(Exec$),len(Exec$))
If LoWord(Ret%) = &SQL_SUCCESS
Ret% = SQLExecute(stmt&)
Case LoWord(Ret%) <> &SQL_SUCCESS : Error$ = SQLExecute
Else
error$ = SQLPrepare
EndIf
Else
error$ = SQLBindParameter
EndIf
Case Len(error$) : MessageBox(error$ + fehlgeschlagen!, ODBC-Fehler, 16)
SQLFreeHandle(&SQL_HANDLE_STMT, stmt&)
endproc
proc SQLGetBlob
parameters Exec$
declare Data#, size&, stmt&, ret%, error$
SQLAllocHandle(&SQL_HANDLE_STMT, &SQLDBC, addr(stmt&))
SQLExecDirect(stmt&, addr(Exec$), len(Exec$))
dim Data#, 1 Dummy-DIM zur Größenermittlung
Ret% = SQLFetch(stmt&)
If LoWord(Ret%) = &SQL_SUCCESS
Ret% = SQLGetData(stmt&, 1, &SQL_BINARY, Data#, 0, addr(size&))
if Size& > 0
dim Data#, size&
SQLGetData(stmt&, 1, &SQL_BINARY, Data#, SizeOf(Data#), addr(size&))
endif
Else
error$ = SQLFetch
endif
SQLFreeHandle(&SQL_HANDLE_STMT, stmt&)
Case Len(error$) : MessageBox(error$ + fehlgeschlagen!, ODBC-Fehler, 16)
Return Data#
endproc
=============================
Das eigentliche Testprogramm:
=============================
declare db&, sql$, bild#, sbild$, datei$, startpos&, teil$, teilnr%, ergebnis$, bildnr%
cls
db& = sqlinit(DSN=KursDB;UID=SYSDBA;PWD=masterkey;DBNAME=D:\Dokumente\FireBird\KURSDB.GDB)
If db& > 0
=================
TABELLEN ERZEUGEN
=================
Tabellen löschen, wenn schon vorhanden
Set(Errorlevel,0)
SQLExec DROP TABLE bilderliste,0
SQLExec DROP TABLE bild,0
Set(Errorlevel,1)
Tabelle für die Bilder neu erzeugen
SQLExec CREATE TABLE bilderliste (name CHAR(40), fotograf CHAR(40), bildnr INTEGER, bild BLOB),1
=========================
BILD IN TABELLE SPEICHERN
=========================
Da für eine Bild zwei Schreibvorgänge nötig sind, werden wir diese in eine Transaktion
zusammmenfassen.
Zunächst also die automatische Bestätigung einzelner SQL-Befehle ausschalten. Die folgenden
SQL-Befehle werden also erst mal zwischengespeichert ohne wirklich in die Datenbank zu gehen
sqlexec #AUTOCOMMIT_OFF, 0
Tabelle Bilderliste füllen: Bild 1 hinzufügen, das Bild selbst noch weg lassen
sql$ = INSERT INTO bilderliste VALUES (Helloween Muffins,Jasmin Hülsmann,1,)
sqlexec sql$,0
Nun das Bild in Bild# einlesen
datei$ = HELLOWEEN.JPG
Dim Bild#, FileSize(datei$)
BlockRead(datei$, Bild#, 0, FileSize(datei$))
Und das Bild in die Tabelle einfügen
ACHTUNG: Das SQL-Statement darf nur ein Feld enthalten und zwar das BLOB-Feld (nur INSERT oder UPDATE)
SQLPutBlob(UPDATE bilderliste SET bild = ? WHERE bildnr = 1, Bild#)
Wenn bis hierher alles glatt gegangen ist, konnte alle Felder in den Satz geschrieben
werden. Es erfolgt also die Bestätigung, dass es nun wirklich in die Datenbank kann:
sqlexec #COMMIT, 0
Für die folgenden Befehle benötigen wir die Transaktionskontrolle nicht mehr, so dass
jede SQL-Anweisung automatisch bestätigt werden soll:
sqlexec #AUTOCOMMIT_ON, 0
=========================
BILD AUS TABELLE AUSLESEN
=========================
Ein Bild aus der Tabelle Bilderliste auswählen, dabei das BLOB-Feld bild nicht anzeigen
sql$ = SELECT name, fotograf, bildnr FROM bilderliste
clearlist
sqlexec sql$,1
Überschrift und Trennzeile entfernen
DeleteString(0,0)
DeleteString(0,0)
ergebnis$ = listbox$(Bild auswählen und mit OK bestätigen:,2)
if ergebnis$ >
Die Nummer des gewählten Bildes steht im dritten Feld
bildnr% = Int(Val(SubStr$(ergebnis$,3,|)))
Jetzt das Bild laden
Wir benötigen jetzt nur das BLOB-Feld bild
ACHTUNG: Das SQL-Statement darf nur ein Feld enthalten und zwar das BLOB-Feld (nur SELECT)
sql$ =SELECT bild FROM bilderliste WHERE bildnr = + Str$(bildnr%)
Clear Bild#
Bild# = SQLGetBlob(sql$)
Bild auf Festplatte speichern
blockwrite GelesenesBild.jpg, Bild#, 0, SizeOf(Bild#)
Bild zur Kontrolle anzeigen
DrawSizedPic GelesenesBild.jpg, 0, 0 - 400, 300, 0
EndIf
SQLDone
Else
Print Datenbank konnte nicht geöffnet werden!
Endif
waitinput
end
Ein technischer Referencia todavía: Auch después de el oben erwähnten Corrección en XProfan se el Lesen binärer Blobs con SQLExec no direkt posible ser. Dort ging lo en largo Texto-Blobs. |
| | | Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 02.03.2009 ▲ |
| |
| |  RGH | ¡Hola Dietmar,
reicht Usted el con el BLOBs soweit oder fehlt todavía qué?
Yo denke Yo voluntad el BLOB-Bearbeitung con en el nächste Versión el Ayuda aufnehmen y una sqlblobs.ph mitliefern, el el obigen Definition de Konstanten y externo Características enthält. Yo hoffe, dass nun deutlich geworden es, como con algo ODBC-API incluso große binäre BLOBs con XProfan relativ problemlos posible son.
Saludo Roland |
| | | Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 05.03.2009 ▲ |
| |
| |  Dietmar Horn | Hola Roland,
Gracias sólo veces para Su Mühe!
Weil Yo seit Ende letzter Semana gesundheitlich no bastante tan bueno en él war, bin Yo desafortunadamente todavía no groß para Testen gekommen. Yo hoffe, daß lo spätestens al Wochenende así klappen se, después de que otra vez en el aufsteigenden Ast bin.
Nach el ersten Überfliegen sería me evtl. todavía el Löschen y el Updaten el Inhalte el BLOB-Felder fehlen. Aber como dijo, Yo bin dbzgl. a ahora todavía no groß para Experimentieren gekommen ...
Saludo Dietmar |
| | | Multimedia für Jugendliche und junge Erwachsene - MMJ Hoyerswerda e.V. [...]  Windows 95 bis Windows 7 Profan² 6.6 bis XProfan X2 mit XPSE Das große XProfan-Lehrbuch: [...]  | 05.03.2009 ▲ |
| |
| |  Dietmar Horn | ¡Hola zusammen,
sabe alguien tal vez una Möglichkeit, cómo uno el Anwender el Einbinden el ganzen SQL-Treibergeschichten y el Registro el *.fdb- o. *.gdb-DB ersparen kann - also entweder por separatem Setup-Programa, oder mejor todavía, igual vom eigenen Programa de ...
Langsam finde Yo echt Gefallen a el ganzen SQL-Zeugs! Noch a antes una Vierteljahr hätte Yo no veces su a träumen gewagt, daß el auch aún en media alten Knusperkopp reinpassen podría.
Vor allem Thomas Z. ha se una dickes, fettes Lob y Dankeschön para seine Ausdauer con me verdient - dafür, daß él me el SQL-Grundlagen así verständlich eingeprügelt ha! Yo finde lo jedenfalls prima así, como es: Erst Lernen el Schüler jahrelang de ihrem Lehrer - y später funktioniert el andersrum ebenfalls Bestens!
Vor allem el BLOBs son una geniale Erfindung (auch si yo el vorerst encima VARCHAR-Felder y obigen Solución de Roland mittels Encode64-String-Verschlüsselung realisiere)! Doch irgendwann voluntad Yo garantiert veces otra vez intensiver blobben y mich stärker con el BLOBs versuchen anzufreunden.
Wenn I, con mi aktuellen Projekt algo más bin, Voy a en algunos ruhigeren Stunden mi pequeño XProfan-Lehrbuch determinado todavía una Teil para Thema Datenbanken (Einführung en dBase y SQL con Firebird) spendieren.
Yo saber inzwischen incluso una renommierte Software-Schmiede para el medizinischen Zona, el ihre Programas aktuell vom kostenpflichtigen Interbase (de Borland) el libre erhältliche Firebird ajustar, porque lo con Interbase en ihren Kunden con deren Software ständig Problemas con el gemeinsamen Datenbankzugriff en el Netzwerk son, si más que 5 Clients angeschlossen son.
Diese Firma erspart el Anwender jedenfalls el Herumklickern en el Systemsteuerung wegen des Anmeldens el SQL-Geschichte ya con el Setup para ihre Programas. Aber así dicke bin I, con denen desafortunadamente auch todavía no befreundet, daß ellos me esta Vorgehensweise verraten würden.
Irgendwie muß el also ir - doch como?
Saludo Dietmar |
| | | Multimedia für Jugendliche und junge Erwachsene - MMJ Hoyerswerda e.V. [...]  Windows 95 bis Windows 7 Profan² 6.6 bis XProfan X2 mit XPSE Das große XProfan-Lehrbuch: [...]  | 19.03.2009 ▲ |
| |
| |  | El Verbindung simplemente incluso herstellen, Winsock-Zeugs si así willst. Usted könntest Usted una Incluir escribir welche Su Statements por TCP/IP a IP/PORT absendet en el Formato, como el jeweilige Datenbankserver/Dienst esperado. Im Grunde nichts más como si z.B. una FTP-Verbindung incluso aufbaust.
Man podría incluso beim SQL-Server una FTP-Server zurechtfummeln como lokalen Wrapper para SQL. (unl.Mgl...) |
| | | | |
| |  Dietmar Horn | *nurbahnhofversteh*  Und como va el? |
| | | Multimedia für Jugendliche und junge Erwachsene - MMJ Hoyerswerda e.V. [...]  Windows 95 bis Windows 7 Profan² 6.6 bis XProfan X2 mit XPSE Das große XProfan-Lehrbuch: [...]  | 19.03.2009 ▲ |
| |
| |  | Na el es el [...] hier - tener Yo auch antes (erstmalig) en un Spiel (XNoid) para una Online-Multiplayer anzutesten.
Yo denke aber, wegen el sicher no unerheblichen Aufwand en Su Fall para DB-Zeugs, solltest Usted Usted para el Schaffung dieser Unabhängigkeit später Tiempo nehmen - es sí auch una Thema para se.
Usted wolltest sólo wissen doch como?!  |
| | | | |
| |  Uwe ''Pascal'' Niemeier | Hi Dietmar!
Bin No sicher, si Yo dich correcto verstanden habe; el Installieren el jeweiligen Treiber läßt se probablemente no vermeiden, denke Yo. Das Einrichten uno Datenquelle en el Systemsteuerung kannst du dir allerdings en el Tat schenken; el Treiber dejar se auch direkt ansprechen. Wirf otra vez nen Blick en mi Demos: Como mache Yo genauso. Weitere Infos a Verbindungen a diversen Datenbanken findest du bajo [...] 
HTH Pascal |
| | | | |
|
RespuestaTema opciones | 19.189 Views |
ThemeninformationenDieses Thema ha 9 subscriber: |