| |
|
|
- 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 5 - |
|
|
 Uwe ''Pascal'' Niemeier | Hi Personas!
El interne Struktur el db kann euch doch egal sein; dafür hay sí el Treiber 
Also otra vez: Wo genau liegt el problema, wann y bajo welchen Umständen tritt lo en? Solche Aussagen como Das klappt no oder Como kommt sólo Müll fuera son no muy aussagekräftig y para Ferndiagnosen definitiv ungeeignet 
Vorschlag: Poste doch veces uno una Kurzanleitung, qué wo runterladen & como installieren muß, en eure Versuche nachzuvollziehen.
SeeYou Pascal |
|
|
| |
|
|
|
 RGH | ¡Hola Pascal,
Yo denke, el problema besteht simplemente en él, dass lo offensichtlich no Möglichkeit (oder Documentación derselben) son, Yo con SQL-Befehlen (SQLExec) encima ODBC en el BLOBs de Interbase/Firebird-Datenbanken zugreifen kann.
Como lo simplemente posible es, encima una pequeña Umweg große Archivos en Interbase/Firebird a escribir y a lesen, Yo en el Ejemplo oben demonstriert. (Das sería incluso ligeramente abgewandelt con dBase y otro trabajo.) Dietmar ha pero probablemente de seinem Auftraggeber el Anforderung, tatsächlich BLOBs a lesen y a escribir.
Firebird y el ODBC-Treiber findest Usted hier [...] en el Downloadbereich. Un Beispieldatenbank findest Usted en diesem Hilo más oben.
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 | 24.02.2009 ▲ |
|
|
|
|
 Uwe ''Pascal'' Niemeier | *räusper*
Also... Das Problema liegt anscheinend en él, daß el Kommandostring no länger como 64KB ser darf. Wird esta Grenze überschritten, kommt lo a Fehlermeldungen, wobei el Meldungen incluso de el Überlänge abhängen. Sieht una Buffer-Überlauf aus; möglicherweise una Bug en el Treiber, el todavía keiner bemerkt ha, porque el meisten Programmierer con el jeweiligen Komponenten para ihre Lenguaje de programación trabajo (Weicheier ).
Ein Workaround wäre, überlange Daten no en una vez en el db a escribir, pero stückweise. Aunque no como en Rolands Ejemplo en mehrere Datensätze verteilt pero siempre en el gleiche Feld des gleichen Satzes, wobei el neuen Daten a el ya vorhandenen angehängt voluntad. A Verbindung de Cuerdas se esta en FB una doppeltes Pipe-Signo verwendet.
En diesem Ejemplo voluntad en varios Schritten 128 KB geschrieben: KompilierenMarcaSeparaciónwindow 50,50-500,500
declare Exec$
var GDB$=C:2TestKURSDB.GDB------------Pfad anpassen!!
var Init$=Driver=Firebird/InterBase(r) driver;Uid=SYSDBA;Pwd=masterkey;DbName=+GDB$+;
SQLInit(Init$)
Set(Errorlevel,0)
Exec$=DROP TABLE TCS
SQLExec Exec$,0
Set(Errorlevel,1)
Exec$=CREATE TABLE TCS (Feld1 BLOB)
SQLExec Exec$,0
var Text$=mkstr$(X,1024*32)--Teststring 32KB
Exec$=INSERT INTO TCS (Feld1) VALUES (+Text$+)-------------------32K
SQLExec Exec$,0
Exec$=UPDATE TCS SET Feld1 = (SELECT Feld1 FROM TCS) || +Text$+--32KB + 32KB
SQLExec Exec$,0
Exec$=UPDATE TCS SET Feld1 = (SELECT Feld1 FROM TCS) || +Text$+--64KB + 32KB
SQLExec Exec$,0
Exec$=UPDATE TCS SET Feld1 = (SELECT Feld1 FROM TCS) || +Text$+--96KB + 32KB
SQLExec Exec$,0
Exec$=UPDATE TCS SET Feld1 = Hallo Leute! || (SELECT Feld1 FROM TCS) || Wie siehts aus?
SQLExec Exec$,0
SQLDone
waitkey
Wenn uno nun el Blob con Standart-Características auslesen voluntad, kriegt uno sólo el interne Blob-ID zurück. Anders con el SQL-API-Variante: KompilierenMarcaSeparaciónwindow 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-------------------------------------------------------------
var GDB$=C:2TestKURSDB.GDB--------------Pfad adaptar!!
var Init$=Driver=Firebird/InterBase(r) driver;Uid=SYSDBA;Pwd=masterkey;DbName=+GDB$+;
SQLInit(Init$)
var Exec$=SELECT Feld1 FROM TCS
var Texto$=SQLGetDataEx(Exec$)
imprimir Gelesene KB:,len(Texto$)/1024
imprimir Erste 20 :,left$(Texto$,20)
imprimir Letzte 20 :,right$(Texto$,20)
SQLDone
waitkey
Wies con binären Daten aussieht weiß Todavía no, pero yo vermute, daß uno ums Kodieren no herumkommt, porque sí zumindest el Hochkomma en cada Fall vom Treiber falso verstanden voluntad sería.
HTH Pascal |
|
|
| |
|
|
|
 RGH | ¡Hola Pascal y Dietmar,
Yo gestern Abend algo Tiempo gehabt y veces algo más para Thema geforscht:
Zum Carta de BLOBs: Hier liegt el Grenze tatsächlich en SQL-Implementierung de Firebird/Interbase: In el Doku se tatsächlich erwähnt, dass el maximale Longitud uno SQL-Statements 64 kB no überschreiben darf. Für Texto-BLOBs es also Pasacals Lösungsweg durchaus gangbar. Yo habe bislang allerdings no SQL-Syntax para Firebird/Interbase gefunden, en größere Daten oder gar binäre Daten direkt por SQL en el Tabla einzufügen. Andere Datenbanken bieten como z.B. una Möglichkeit komplette Archivos einzufügen: KompilierenMarcaSeparación Lo wäre hilfreich, si dergleichen auch para Firebird/Interbase gäbe. Yo voluntad heute Abend más forschen ...
Zum Auslesen de BLOBs: Pascal, como Yo Su código sah pensamiento Yo como Erstes: Aber genau así mache Yo doch auch en XProfan. Beim näheren Studium meiner Quellcodes fiel me entonces en, dass una de me genutzte Definitionsdatei a ODBC32.DLL (Yo benutze el ODBC.DLL Interface Unit, translated for Delphi Yasser Asmi) una winzigen Fehler enthält. Lo fehlt a uno Punto una Minuszeichen y zwar se el Konstante SQL_LONGVARBINARY con 4, en lugar de con -4 definiert. El 4 es aber para SQL_INTEGER. Dummerweise ha unser BLOB genau el Datentyp SQL_LONGVARBINARY, así dass also aufgrund des Fehlers el Longitud el Daten con 11 (reicht para höchste Integerzahl) natürlich a gering waren, y esta ausserdem falso übertragen fueron, nämlich como SQL_C_CHAR anstelle de SQL_C_DEFAULT. Kurz: lo wurde no, como vermutet, una Key a tatsächlichen Daten zurückgeliefert, pero el ersten Bytes en Hex-Darstellung, de ¡Hola wurde así also 48616C6C6F. Das Problema kann Yo natürlich beheben y se en el nächsten XProfan-Versión entonces auch Fijo ser.
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 | 25.02.2009 ▲ |
|
|
|
|
 E.T. | RGH
....Kurz: lo wurde no, como vermutet, una Key a tatsächlichen Daten zurückgeliefert, pero el ersten Bytes en Hex-Darstellung, de ¡Hola wurde así also 48616C6C6F....
Na entonces blanco Yo ahora sí wenigstens, wieso Yo beim Auslesen siempre el (ersten) Hex-Werte de el Blob zurück bekommen habe (mein Post vom 15.02. más vorn) . |
|
|
| Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 25.02.2009 ▲ |
|
|
|
|
 | Für Java y binäre Interbase-BLOBS gäbe lo hier Beispielcodes: [...]  Also wenns en Java va, debería lo en Profano prinzipiell doch auch klappen... Como wir hier kein Java-Foro son, poste Yo, el Code hier nicht; él zeigt aber doch cada Schritte bastante genau. Tal vez ersieht uno lo una solución a XProfan. Saludo Pájaro carpintero
P.S.: JDBC kann encima una einfaches Brückenprogramm en ODBC-ansprechbare Datenbanken zugreifen, behauptet [...] Schlimmstenfalls podría Sí lo profano; una kleines Java-Programa fernsteuern, daß el Zeug como beschrieben ordnungsgemäß rausholt. Zugegeben, reichlich unelegant... |
|
|
| |
|
|
|
 RGH | Peter Pájaro carpintero
Für Java y binäre Interbase-BLOBS gäbe lo hier Beispielcodes: [...]  Also wenns en Java va, debería lo en Profano prinzipiell doch auch klappen... Como wir hier kein Java-Foro son, poste Yo, el Code hier nicht; él zeigt aber doch cada Schritte bastante genau. Tal vez ersieht uno lo una solución a XProfan. Saludo Pájaro carpintero
¡Hola, el Yo auch ya gefunden, zeigt pero no (actualmente) en XProfan mögliche Solución en, hilft Dietmar also por desgracia, no más. Hier se primero una SQL-Aufruf vorbereitet, anschließend voluntad einzelne Felder con Daten gefüllt y sólo en el dritten Schritt se el SQL-Statement ausgeführt. Selbst si la ODBC-Treiber esta Technik unterstützen sería, así kann lo XProfan actualmente no. SQLExec führt el Statement igual de (quizás vorberhaltlich uno COMMIT-Befehles - siehe Transaktionen).
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 | 25.02.2009 ▲ |
|
|
|
|
 Uwe ''Pascal'' Niemeier | Hi Personas!
Wenn Yo el correcto sehe, fehlt una Syntax para el Treiber (o. es no bekannt), una Expediente direkt en el BLOB a escribir?
Dazu zwei Fragen:
1. Sombrero alguien una (theoretische) Möglichkeit gefunden, por ODBC/SQL Streams a nutzen (su war irgendwo en el WWW unos pocos veces el Rede, glaube Yo)?
2. Gibt lo irgendein Programa, el definitiv bajo Nutzung el ODBC-Treiber Archivos en BLOBs escribir kann? Könnte a Testzwecken sinnvoll ser...
SeeYou Pascal |
|
|
| |
|
|
|
 RGH | ¡Hola,
Yo veces en el ODBC-API (Yo hier algunos hundert ausgedruckte Páginas des msn) y el oben genannten Quellen gestöbert. Lo dürfte en el Tat por ODBC-Treiber ir, aber vermutlich no en allen Datenbanken por einfachem direkt con SQLExecDirect ausgeführtem SQL-Statement. (In XProfan gehe Yo, el Weg encima SQLExecDirect.) En FireBird es eben el Longitud dieses Statements en 64 kB begrenzt.
Folgender Weg anstelle des SQLExecDirect müßte klappen: - Ein SQL-Befehl con SQLPrepareStatement y ? para el Daten vorbeiten, etwa con el Statement INSERT INTO MeineTabelle (MeinBlob) VALUES (?). Der Rückgabewert es una Handle dieses vorbereiteten Statements. - El Daten por Zeiger/Longitud con SQLPutData nachschieben - Das Statement con SQLExecute ausführen. Diesen Weg puede ser natürlich para todos Datentypen ir y él va auch para UPDATE. Das debería por API-Aufrufe natürlich auch en XProfan posible ser. (Desde que aquí en el Firma natürlich kein FireBird en mi Rechner installieren darf y kann, hoffe Yo tal vez Sonntag Abend zeit para encontrar, lo auszuprobieren.*)
Saludo Roland
(Morgen Mittag es sólo veces para zwei Übernachtungen después de Köln. Yo verbinde el Nutzung des en el Weihnachtsfeierverlosung gewonnenen Hotelgutscheines para zwei Nächte y Personen con el Besuch uno Auswärtsspieles el Mannheimer Adler gegen el Kölner Haie. Natürlich hoffen wir al Sonntag rechtzeitig para Heimspiel gegen el Hamburg Freezers otra vez zurück a ser.) |
|
|
| 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 | 26.02.2009 ▲ |
|
|
|
|
 Dietmar Horn | ¡Hola,
hier Yo Beispiele para Carta y Lesen de Firebird-Blobs gefunden - desafortunadamente sólo en Delphi.
Como podría al en XProfan 11 umsetzen?
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: [...]  | 28.02.2009 ▲ |
|
|
|
|
 Dietmar Horn | Sorry,
en el obigen Posting Tuve el Link para Delphi-Source para el Blobs vergessen:
[...] 
Weiß alguien, cómo hacerlo con XProfan 11 umsetzen podría?
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: [...]  | 01.03.2009 ▲ |
|
|
|
|
 Uwe ''Pascal'' Niemeier | Hi Personas!
 Mutmaßung: Entweder Es el db-Unterstützungvon Delphi völlig anders gestrickt como el de Profano oder lo kommen spezielle Komponenten para Einsatz.
me
Gibt lo irgendein Programa, el definitiv bajo Nutzung el ODBC-Treiber Archivos en BLOBs escribir kann?
Der Gedanke detrás de él war, en Windows-interne Ablaufverfolgung (bajo ODBC ajustable) el Kommunikation zwischen Programa y Treiber a protokollieren. Dabei voluntad sowohl Kommandos como auch API-Aufrufe aufgezeichnet. Das debería una Nachbildung el Funktionalität erleichern.
Sin embargo, fraglich, si esta Möglichkeit effektiver es como el ya vorgeschlagene stückweise Aneinanderhängen de Daten. Nach Rolands Aussage es sí auch el Auslesen großer Datenmengen demnächst sin API posible, sodaß uno komplett en externe Características verzichten podría. (Selbst Yo verwende APIs sólo como, wo lo nötig es o. sichtbare Vorteile bringt )
@ Roland: Wann se lo una entsprechenden Parche geben? Lo ha se sí doch einiges angesammelt, qué korrigiert voluntad müßte...
SeeYou Pascal |
|
|
| |
|
|