| |
|
|
- page 1 - |
|
Dietmar Horn | allô zusammen,
aujourd'hui wende je mich la fois avec einem SQL-Problem zwecks s'il te plaît um Hilfestellung à qui SQL-Experten sous euch.
je travaille z.Z. avec XProfan 11 à einem komplexeren projet. c'est déjà droite large gediehen. qui bisher einzigste, mais entscheidende Problempunkt ist pour mich qui à- bzw. Einbindung des RDBS Firebird (Freeware bzw. Open-Source) bzw. Interbase (cela kostenpflichtige Gegenstück de Borland trop Firebird - ähnlich comment cela Relations entre MS Office et Open-Office).
Bisher mußte je mich encore nie grand avec SQL beschäftigen, sauf qui je mir toujours fois le XProfan-Aider zum SQL-Thema reingezogen et cela alles comme droite logisch empfunden hatte. Doch comment des öfteren, liegt qui le chien bestimmt seulement dans einem winzigen Detail begraben, quoi je pas kenne, ou bien dans einem faute, den je gemacht ou bien übersehen habe.
Firebird et Interbase kannte je jusqu'à avant 4 Wochen encore pas la fois vom Namen her, weil je quelque chose comme encore nie nécessaire hatte - mais eh bien ist es soweit.
ODBC-Treiber et Firebird sommes installiert.
Zunächst ca va tout autor, une liaison herzustellen. sous Windows 2000 (dans unserem Vereins-cabinet) klappt qui initialisation avec SQLInit inzwischen.
qui initialisation liefert sous W 2000 comment gewünscht cela Handle zurück:
sous Windows XP ergibt cela cependant jusqu'à maintenant toujours 0 (alors gescheitert), et im opposition trop W 2000 erscheint là auparavant encore pas la fois qui Dialog zum Eingeben de Username, PWD, usw.
Bevor cet Problem avec dem Herstellen qui liaison pas gelöst ist, brauche je gar pas grand weitermachen.
Literatur sur Firebird habe je inzwischen tonnenweise, doch bevor je es pas schaffe, sur allen Windows-Systemen ab 2000 aufwärts une zuverlässige liaison herzustellen, nützt mir cela alles malheureusement pas allzu viel.
peux mir peut-être quelqu'un weiterhelfen, qui sich déjà la fois quelque chose näher avec cela beschäftigt hat?
qui prochain Schritte, alors cela Neuanlegen einer banque de données, ou bien cela Travailler / Lecture einer vorhandenen DB et cela Weiterverarbeiten qui données im réel Programme pourrait ensuite lediglich encore einer reine Fleiß- et Logik-travail son.
cela Ausweichen z.B. sur dBase ist pas possible, weil dBase dbzgl. pas sur qui pour cet projet erforderlichen Feautures verfügt.
qui peux peut-être. weiterhelfen?
je vermute la fois, si cela Programme irgendwann avec Firebird fonctionne, ensuite devrait cela Programme aussi avec Interbase marcher - ou bien?
Salut et merci d'avance 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 ▲ |
|
|
|
| |
|
- page 5 - |
|
|
Uwe ''Pascal'' Niemeier | Hi gens!
qui interne Struktur qui db peux euch doch égal sein; pour gibt es oui den Treiber
alors nochmal: wohin oui c'est ca liegt cela Problem, quand et sous welchen Umständen tritt es sur? Solche Aussagen comment cela klappt pas ou bien là venez seulement Müll raus sommes pas très aussagekräftig et pour Ferndiagnosen définitif ungeeignet
Vorschlag: Poste doch la fois einer une Kurzanleitung, quoi on wohin runterladen & comment installer doit, um eure Versuche nachzuvollziehen.
SeeYou Pascal |
|
|
| |
|
|
|
RGH | allô Pascal,
je denke, cela Problem besteht simple y, dass es offensichtlich aucun Possibilité (ou bien Documentation derselben) gibt, comment je avec SQL-Befehlen (SQLExec) sur ODBC sur qui BLOBs de Interbase/Firebird-Datenbanken zugreifen peux.
comment es simple possible ist, sur une kleinen le détour grand Fichiers dans Interbase/Firebird trop écrivons et trop lesen, habe je im Beispiel dessus demonstriert. (cela serait sogar léger abgewandelt avec dBase et anderen marcher.) Dietmar hat mais wohl de seinem Auftraggeber qui Anforderung, réellement BLOBs trop lesen et trop écrivons.
Firebird et qui ODBC-Treiber findest Du ici [...] im Downloadbereich. une Beispieldatenbank findest Du dans diesem Fil plus dessus.
Salut 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*
alors... cela Problem liegt anscheinend y, qui qui Kommandostring pas länger comme 64KB son darf. Wird cet frontière überschritten, venez es trop Fehlermeldungen, wobei qui Meldungen selbst de qui Überlänge dépendre. Sieht pour einem Buffer-Überlauf aus; möglicherweise un Bug im Treiber, den encore aucun bemerkt hat, weil qui meisten Programmierer avec den jeweiligen Komponenten pour ses Programmiersprache travailler (Weicheier ).
un Workaround wäre, überlange données pas sur einmal dans qui db trop écrivons, mais stückweise. Allerdings pas comment dans Rolands Beispiel sur plusieurs Datensätze verteilt mais toujours ins gleiche champ des gleichen Satzes, wobei qui neuen données à qui bereits vorhandenen angehängt volonté. Zur liaison de Cordes wird dabei chez FB un doppeltes Pipe-marque verwendet.
chez diesem Beispiel volonté dans mehreren Schritten 128 KB geschrieben: KompilierenMarqueSéparationwindow 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
si on eh bien den Blob avec Standart-Funktionen auslesen veux, kriegt on seulement qui interne Blob-ID zurück. Anders avec qui SQL-API-variante: KompilierenMarqueSéparationwindow 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
parameters de$
declare Error$
SQLError(&SQLEnv,&SQLDBC,stmt&,0,0,Error#,512,0)
Error$=string$(Error#,0)
cas len(Error$):addstring de$+ : +Error$
endproc-------------------------------------------------------------
proc SQLGetDataEx---------------------------------------SQLGetDataEx
parameters Exec$
declare 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 serait trop kleinen Puffer annoncer (Dummy-Aufruf WG. Size&)
si 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
dispose Data#,Error#
cas %getcount>-1:listbox$(faute,2)
return Data$
endproc-------------------------------------------------------------
var GDB$=C:2TestKURSDB.GDB--------------Pfad anpassen!!
var Init$=Driver=Firebird/InterBase(r) driver;Uid=SYSDBA;Pwd=masterkey;DbName=+GDB$+;
SQLInit(Init$)
var Exec$=SELECT champ1 FROM TCS
var Text$=SQLGetDataEx(Exec$)
imprimer Gelesene KB:,len(Text$)/1024
imprimer Erste 20 :,left$(Text$,20)
imprimer dernier 20 :,right$(Text$,20)
SQLDone
waitkey
Wies avec binären données aussieht sais je encore pas, mais je vermute, qui on ums Kodieren pas herumkommt, weil oui zumindest cela Hochkomma dans chaque le cas vom Treiber faux verstanden volonté serait.
HTH Pascal |
|
|
| |
|
|
|
RGH | allô Pascal et Dietmar,
j'ai gestern soir quelque chose Zeit gehabt et la fois quelque chose plus zum Thema geforscht:
Zum écrivons de BLOBs: ici liegt qui frontière réellement chez qui SQL-Implementierung de Firebird/Interbase: dans qui Doku wird réellement erwähnt, dass qui maximale Longueur eines SQL-Statements 64 kB pas überschreiben darf. Pour Text-BLOBs ist alors Pasacals Lösungsweg durchaus gangbar. j'ai jusqu'alors allerdings aucun SQL-Syntax pour Firebird/Interbase trouvé, um größere données ou bien gar binäre données direct per SQL dans qui Tabelle einzufügen. autre Datenbanken bieten là z.B. une Possibilité komplette Fichiers einzufügen: KompilierenMarqueSéparation Es wäre hilfreich, si es dergleichen aussi pour Firebird/Interbase gäbe. je werde aujourd'hui soir plus forschen ...
Zum Lecture de BLOBs: Pascal, comme je Deinen Code sah dachte je comme Erstes: mais oui c'est ca so fais je es doch aussi dans XProfan. Beim näheren Studium meiner Quellcodes fiel mir ensuite sur, dass une de mir genutzte Definitionsdatei zur ODBC32.DLL (je benutze qui ODBC.DLL Interface Unit, translated for Delphi Yasser Asmi) une winzigen faute contient. Es fehlt à einer Stelle un Minuszeichen et zwar wird qui Konstante SQL_LONGVARBINARY avec 4, statt avec -4 défini. qui 4 steht mais pour SQL_INTEGER. Dummerweise hat unser BLOB oui c'est ca den Datentyp SQL_LONGVARBINARY, so dass alors aufgrund des Fehlers qui Longueur qui données avec 11 (reicht pour höchste Integerzahl) naturellement trop gering étions, et cet aussi faux übertragen wurden, nämlich comme SQL_C_CHAR anstelle de SQL_C_DEFAULT. Kurz: es wurde pas, comment vermutet, un Key le tatsächlichen données zurückgeliefert, mais qui ersten Bytes dans Hex-représentation, aus allô wurde so alors 48616C6C6F. cela Problem peux je naturellement beheben et wird dans qui prochain XProfan-Version ensuite aussi behoben son.
Salut 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: es wurde pas, comment vermutet, un Key le tatsächlichen données zurückgeliefert, mais qui ersten Bytes dans Hex-représentation, aus allô wurde so alors 48616C6C6F....
Na ensuite weiss je maintenant oui wenigstens, wieso je beim Lecture toujours qui (ersten) Hex-Werte aus dem Blob zurück bekommen habe (mon poste vom 15.02. plus 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 ▲ |
|
|
|
|
| Pour Java et binäre Interbase-BLOBS gäbe es ici Beispielcodes: [...] alors wenns dans Java allez, sollte es dans Profan prinzipiell doch aussi marcher... là wir ici ne...aucune Java-Forum sommes, Poste Je l' Code ici nicht; il zeigt mais doch chaque Schritte droite oui c'est ca. peut-être ersieht on daraus une Solution pour XProfan. Salut Specht
P.S.: JDBC peux sur un simple Brückenprogramm sur ODBC-ansprechbare Datenbanken zugreifen, behauptet [...] Schlimmstenfalls pourrait Profan oui un kleines Java-Programme fernsteuern, qui cela Zeug comment beschrieben ordnungsgemäß rausholt. Zugegeben, reichlich unelegant... |
|
|
| |
|
|
|
RGH | Peter Specht
Pour Java et binäre Interbase-BLOBS gäbe es ici Beispielcodes: [...] alors wenns dans Java allez, sollte es dans Profan prinzipiell doch aussi marcher... là wir ici ne...aucune Java-Forum sommes, Poste Je l' Code ici nicht; il zeigt mais doch chaque Schritte droite oui c'est ca. peut-être ersieht on daraus une Solution pour XProfan. Salut Specht
Salut, cela habe je aussi déjà trouvé, zeigt mais aucun (derzeit) dans XProfan mögliche Solution sur, hilft Dietmar alors malheureusement pas plus. ici wird zunächst un SQL-Aufruf vorbereitet, anschließend volonté einzelne Felder avec données pleine et seulement im dritten Schritt wird cela SQL-Statement fonctionnement. Selbst si qui ODBC-Treiber cet technologie soutien serait, so peux es XProfan derzeit pas. SQLExec führt cela Statement juste aus (peut-être vorberhaltlich eines COMMIT-Befehles - siehe Transaktionen).
Salut 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 gens!
si je cela richtig vois, fehlt une Syntax pour den Treiber (bzw. ist aucun bekannt), um une Dossier direct dans den BLOB trop écrivons?
en supplément deux Fragen:
1. Hat quelqu'un une (theoretische) Possibilité trouvé, per ODBC/SQL Streams trop nutzen (en était irgendwo im WWW un paire fois le discours, glaube je)?
2. Gibt es irgendein Programme, cela définitif sous Nutzung qui ODBC-Treiber Fichiers dans BLOBs écrivons peux? Könnte trop Testzwecken sinnvoll son...
SeeYou Pascal |
|
|
| |
|
|
|
RGH | Salut,
j'ai la fois dans qui ODBC-API (j'ai ici quelques hundert ausgedruckte Seiten des msn) et den dessus genannten Quellen gestöbert. Es pourrait dans qui acte per ODBC-Treiber aller, mais probablement pas chez allen Datenbanken per einfachem direct avec SQLExecDirect ausgeführtem SQL-Statement. (dans XProfan vais Je l' Weg sur SQLExecDirect.) chez FireBird ist plan qui Longueur cet Statements sur 64 kB begrenzt.
Folgender Weg anstelle des SQLExecDirect devrait marcher: - un SQL-Befehl avec SQLPrepareStatement et ? pour qui données vorbeiten, etwa avec dem Statement INSERT INTO MeineTabelle (MeinBlob) VALUES (?). qui Rückgabewert est un Handle cet vorbereiteten Statements. - qui données per aiguille/Longueur avec SQLPutData nachschieben - cela Statement avec SQLExecute effectuer. Diesen Weg peux on naturellement pour alle Datentypen aller et il va aussi pour UPDATE. cela sollte per API-Aufrufe naturellement aussi dans XProfan possible son. (là je ici dans qui Firma naturellement ne...aucune FireBird sur meinem calculateur installer darf et peux, hoffe je peut-être dimanche soir zeit pour trouver, es auszuprobieren.*)
Salut Roland
(demain Mittag ca va seulement la fois pour deux Übernachtungen pour Köln. je verbinde qui Nutzung des dans qui Weihnachtsfeierverlosung gewonnenen Hotelgutscheines pour deux Nächte et Personen avec dem Besuch eines Auswärtsspieles qui Mannheimer Adler vers qui Kölner Haie. Bien sûr espérer wir am dimanche à temps zum Heimspiel vers qui Hamburg Freezers wieder zurück trop son.) |
|
|
| 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 | Salut,
ici habe je Beispiele zum écrivons et Lesen de Firebird-Blobs trouvé - malheureusement seulement dans Delphi.
comment pourrait on cela dans XProfan 11 umsetzen?
Salut 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,
im obigen Posting J'ai eu den Link zum Delphi-Source pour qui Blobs oublier qc:
[...]
sais quelqu'un, comment on cela avec XProfan 11 umsetzen pourrait?
Salut 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 gens!
Mutmaßung: Entweder ist qui db-Unterstützungvon Delphi völlig anders gestrickt comme qui de Profan ou bien es venons spezielle Komponenten zum Einsatz.
mir
Gibt es irgendein Programme, cela définitif sous Nutzung qui ODBC-Treiber Fichiers dans BLOBs écrivons peux?
qui idée derrière elle était, sur qui Windows-interne Ablaufverfolgung (sous ODBC einstellbar) qui communication entre Programme et Treiber trop protokollieren. Dabei volonté sowohl Kommandos comme aussi API-Aufrufe aufgezeichnet. cela sollte une reproduction qui Fonctionnalité erleichern.
Allerdings ist fraglich, si cet Possibilité effektiver ist comme cela bereits vorgeschlagene stückweise Aneinanderhängen de données. Pour Rolands Aussage ist oui aussi cela Lecture großer Datenmengen bientôt sans API possible, si on komplett sur externe Funktionen verzichten pourrait. (Selbst je verwende APIs seulement là, wohin es nötig ist bzw. sichtbare Vorteile bringt )
@ Roland: quand wird es une entsprechenden Patch donner? Es hat sich oui doch einiges angesammelt, quoi korrigiert volonté devrait...
SeeYou Pascal |
|
|
| |
|
|