Français
Forum

Erledigt: Firebird Embedded

 

Dietmar
Horn
allô zusammen,

avec meinem XProfan-Firebird-SQL-projet klappt es soweit pas mal.

eh bien gibt es mais un Problem, welches je possible jusqu'à vorgestern avec XProfan lösen devrait, si cela avec XProfan aktuell überhaupt possible ist.

dans qui ersten offiziellen Beta pour ausgesuchte Tester soll cela Programme eh bien absolument comme Embedded-variante courir, et pas comme pas-Embedded.

avec pas-Embedded sur ODBC-Schnittstelle mittels qui normalen FB-SQL-Befehle klappt bisher alles weitestgehend correcte.

Doch comment peux je qui Embedded-variante initialisieren, um après avec denselben SQL-Routinen im Programme comment gewohnt weiterarbeiten trop peut? Später soll qui Anwender ensuite entre beiden Varianten selber qui sélection rendez-vous.

Pour qui SQL-Experten sous euch habe je déjà la fois alles dans un ZIP-Archiv emballé - alors Firbird embedded (aucun installation erforderlich) et quelques zusätzliche Hilfedateien (sauf qui, quelle im Unterordner doc sowieso déjà vorhanden sommes). qui beigelegte Patienten.fdb pourrait zum Testen dienen.

Selber habe je qui paire le son Hilfedatei(en) nécessaire Fichiers dans cela Projektverzeichnis kopiert et qui fbembed.dll dans fbclient.dll umbenannt. le son Hilfedatei(en) sollte cela ausreichen. comment je cela jusqu'à maintenant verstehe, braucht on doch den reste aus dem Firebird-Dossier aus dem ZIP doch gar pas absolument, ou bien?

Doch avec
KompilierenMarqueSéparation
bekomme je simple aucun liaison hin!

si je cela dans den prochain Tagen (notfalls tantôt la fois per Workarount) pas irgendwie avec XProfan hinbekomme, ensuite peux je qui travail de mehreren Monaten im Prinzip dans qui Tonne kloppen ...

Roland, la hâte Du peut-être comme banque de données-Profi une Solution pour cet Problem, ou bien qui de den anderen DB-Profis kennt sich encore avec cela aus?

Salut et merci d'avance!

Dietmar

7.490 kB
Kurzbeschreibung: Firebird embedded
Hochgeladen:17.04.2009
Downloadcounter76
Download
 
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:  [...] 
17.04.2009  
 




E.T.

...qui Datenbankdatei muss sich chez qui Benutzung des embedded Server près de diesem également
im Applikationsverzeichnis befinden. ...


Ist mir beim lesen qui Anleitung toujours wieder aufgefallen. Meist liegen qui DB oui dans einem anderen Verzeichnis...

[offtopic]...seulement so comme idée... [/offtopic]
 
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...
17.04.2009  
 




Dietmar
Horn
non, Mario,

qui paire DLL peut im selben Verzeichnis liegen, comment qui DB, anderenfalls volonté vous de qui (umbenannten) fbclient.dll im Windows-, Windows-System- ou bien Windows-System32-Verzeichnis gesucht. cela avons wir alles stundenlang vergeblich durchprobiert (ähnlich comment autrefois qui l'affaire avec den BLOBs). avec ImportDLL(fbclient.dll,*) peux on sich oui c'est ca regarder, wohin qui fbclient.dll qui anderen paire DLL avec den restlichen Funktionen cherchez. Notfalls peux on oui avec ChDir dans den Dossier échanger, dans dem sich cet paire Fichiers tummeln.

et le son qui vielen FB-Hilfedateien stellt dans qui Embedded-Version qui fbclient.dll pour cela DBMS den réel Server dar, qui alle FB-Funktionalitäten bistrot zur Disposition stellt - mais im opposition zur Nichtembedded-Version doit qui Anwender là pas seulement chez chaque encore so kleinen DB-Programme dans qui Systemsteuerung den ODBC-Treiber konfigurieren.

Meiner attitude pour fehlt là (bzw. mir) jusqu'à maintenant seulement encore qui allererste Baustein, um cette Server (alors qui Embedded-FBClient.dll) trop initialisieren.

je vermute bzw. befürchte bientôt, qui cela jusqu'à maintenant avec XProfans SQLInit pas so sans weiteres possible son wird. je schätze la fois, ici wird wahrscheinlich seulement Roland selber zeitnah weiterhelfen peut - ähnlich comment chez qui BLOB-Geschichte - ou bien einer de den anderen API-Spezialisten, qui sich maintenant déjà genauer avec den FB-APIs auskennen, sans sich selber seulement mühsam herantasten trop doit ... Notfalls plan sur une neue, encore avec C++ ou bien Delphi trop erstellende FB-Embedded-DLL pour XProfan. mon prochain Befürchtung allez dahin, qui SQL-Exec également den installierten ODBC-Treiber voraussetzt et on cela ganze SQL-Zeugs avec SQLExec ensuite également api-mäßig selber nachbasteln devrait. Hoffentlich habe je avec meinen Berfürchtungen pas droite, car ensuite wäre sans Rolands rasche Aider mon aktuelles déjà droite large fortgeschrittenes projet seulement aus cette Trouvé zum échouer verurteilt et monatelange Programmierarbeit pour qui Katz gewesen.

je serait mich cependant riesig par-dessus freuen, si je dans cette Punkten Denkfehler begehe et je la fois wieder seulement den forêt avant lauter Bäumen pas vois. Doch comment im Ausgangsposting bereits dit: qui Zeit hängt mir à cause de cette Geschichte inzwischen entier joli im gorge.

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:  [...] 
18.04.2009  
 




RGH
Salut,

aussi si je aujourd'hui aucun Zeit habe, un erster Hinweis: sans ODBC-Treiber wird es naturellement pas aller: sans ODBC-Treiber peux qui ODBC-Schnittstelle de XProfan naturellement pas marcher. Gibt es une ODBC-Treiber pour Firebird-Emedded? ou bien peut sich qui bisherige Treiber pour Embedded konfigurieren?

Direkter Aufruf sur qui API qui DLL pourrait naturellement aller. Ist cet irgendwo dokumentiert? Vermutlich gibt es là une Documentation pour Delphi ou bien C++ ... ou bien im schlimmsten le cas seulement fertige Komponenten sans Quellcode, qui sur ses Zugriffe rien preis donner.
(Allerdings wären qui bisherigen Überlegungen ensuite réellement assez wertlos, là es ensuite oui um quelque chose entier Anderes allez. cela hätte on de Anfang à erwähnen doit. Ok, qui surface peux naturellement rester ...)

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
19.04.2009  
 



peut-être la fois den Florian Heuberger fragen si il avec Visual-Zeugs sur quelque chose comme Zugriff hat.
 
19.04.2009  
 




Dietmar
Horn
Salut,

non, c'est oui qui Sinn de FB-Embedded, qui on là keinen ODBC-Treiber nécessaire. Mehreren autre Programmen aus cette Branche faire cela genauso. qui Anwender peux optionnel commuter, welchen Modus il nutzen voudrais: Embedded (local, sans gleichzeitigen Mehrfachzugriff), ou bien pas-Embedded (Mehrfachzugriff sur DB sur Netzwerk possible).

à Dokumentationen habe je cela, quoi chez FB sowieso dabei ist, cela quoi je avec dans cela obige ZIP emballé habe et encore un API-Guide pour Interbase (IB et FB devoir wohl kompatibel son) - siehe Anhang. Pour mich un livre avec sept Siegeln!


Allerdings wären qui bisherigen Überlegungen ensuite réellement assez wertlos, là es ensuite oui um quelque chose entier Anderes allez.


Wertlos pas, car je besoin zwingend beide Modi. seulement dumm, qui qui Projektleiter qui Beta-Version ausgewählten Testern eh bien vorerst comme Embedded donner voudrais (weil cet trop 99% pas dans qui situation sommes, sich qui ODBC-Geschichte selber einzurichten).

Den normalen Modus habe je fertig, là funktioniert dbzgl. avec XProfan jusqu'à maintenant alles bestens.

Salut
Dietmar

1.736 kB
Hochgeladen:19.04.2009
Downloadcounter63
Download
 
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.04.2009  
 




RGH
Salut,

comment dit, pour qui dans XProfan integrierten ODBC-Funktionen est un ODBC-Treiber zwingende Vorraussetzung.
cet commuter sur Embedded sans ODBC funktioniert alors seulement pour Anwendungen, qui generisch, alors direct per Firebird- bzw. Interbase-API, avec qui banque de données kommunizieren. Pour Delphi ou bien C++ volonté probablement entsprechende Komponenten mitgeliefert. chez cette Anwendungen wird alors de vornherein pas qui le détour sur ODBC gegangen. qui Zugriff sur qui banque de données ist alors un entier anderer et voilà qui bisherigen Überlegungen zum Sauver et Lesen de BLOBs sur ODBC réellement à peine verwendbar.

Möglicherweise braucht on mais aucun extra trop schreibende DLL, mais peux qui API direct verwenden.

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
19.04.2009  
 




RGH
Salut,
j'ai la fois une kurzen perspective sur den API-Guide geworfen. là scheint oui alles drin trop stehen, quoi on braucht:
isc_attach_database() zum Öffnen qui banque de données, isc_dsql_exec_immediate() zum Effectuer eines SQL-Statements, etc.
qui API erinnert un peu à qui ODBC-API. je schaue la fois, dass je qui prochain Tage Zeit finde, avec cela un peu trop experimentieren. (mais es je hindere aussi niemanden, es selbst trop essayer. qui Beschreibungen sembler mir droite en détails trop 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
19.04.2009  
 




Dietmar
Horn
allô Roland,

merci d'avance pour Votre Mühe!

si cette Embedded-Modus irgendwie klappt, ensuite suis je fix et fertig et werde bestimmt reif pour qui Klappse son! cela wäre ensuite peut-être mais aussi pas mal, car là hätte je probablement genügend Zeit, mon XProfan-Lehrbuch um deux weitere größere le chapitre trop ergänzen:

XProfan et qui relationalen Datenbanksysteme Firebird et Interbase

1. mon armen Nerven et Firebird
2. introduction dans Firebird avec XProfan

Weil Firebird oui kostenlos trop avons ist, wäre cela ensuite une clevere pas-ODBC-Alternative trop dem z.T. doch droite eingeschränkten et dans qui Jahre gekommenen dBase.

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:  [...] 
20.04.2009  
 




RGH
Salut,

ici un erster partie zur Verwendung de direktem Zugriff sur Firebird mittels XProfan. cela Beispiel sollte sowohl pour qui Client-Version (là est qui DLL allerdings anders: fbclient.dll, chez Interbase naturellement aussi) comme aussi comment ici pour qui Embedded-Version marcher.

ACHTUNG: cela Beispiel funktioniert! si on avec oui antwortet wird qui banque de données réellement gelöscht et beim Versuch, qui pas plus vorhandene banque de données trop schließen, gibt es qui entsprechene Firebird-Fehlermeldung. ALso auparavant s'il te plaît une Sicherheitskopie qui Datenbankdatei (im Beispiel Patienten.fdb) erstellen.

quoi geschieht im Programme?
- avec ImportDLL volonté qui API-Funktionen qui DLL imortiert
- avec isc_expand_dpb() wird qui Verbindungsstring erzeugt. dans unserem le cas brauchen wir seulement Username et Paßwort. qui entsprechenden Konstanten venons aus qui ibase.h
- avec isc_attach_database() wird qui liaison zur banque de données hergestellt. si qui erste Eintrag des Status-Arrays une 1 ist, ist qui zweite Eintrag im piège ungleich 0 qui Interbase-Fehlernummer. dans diesem le cas wird avec isc_interprete() qui text qui entsprechenden Fehlermeldung ermittelt.
- avec isc_drop_database() peut wir eh bien qui banque de données effacer. cela klappt naturellement seulement avec korrektem Usernamen et Paßwort. Ansonsten gibt es une Fehlermeldung. (cela Effacer qui banque de données habe je comme praktischen Test pour qui erfolgreiche liaison gewählt, weil un SELECT un peu komplexer wäre ... ;) ) avec quelque chose Fleiß et Erfahrung peux on naturellement avec den übrigen API-Funktionen aussi SQL-Statements absetzen, BLOBs écrivons et lesen, etc. qui API erinnert un peu à qui ODBC-API ... malheureusement seulement un peu.
- avec isc_detach_database() wird qui liaison zur banque de données finissez ... vorrausgesetzt vous wurde im vorigen Schritt pas gelöscht.

cela Beispiel beweist, quoi mais eh bien sûr était: si avec anderen Programmiersprachen qui directe Zugriff sur Firebird allez, ca va aussi avec XProfan:
KompilierenMarqueSéparation
FireBird Embedded Demo
----------------------
©2009 Roland G. Hülsmann
Definitionen aus ibase.h
def &isc_dpb_user_name 28
def &isc_dpb_password 29
declare msg#
declare status_vector&[20]
declare pdpb&, pstatus&
var hdll& = ImportDLL(fbembed.dll, fb_)
dim msg#, 512
var dpb_length& = 0   Länge des Verbindungsstrings
var db1& = 0          Databasehandle
var user$ = SYSDBA
var pass$ = masterkey
var name$ = Patienten.fdb
cls
Verbindungsstring erstellen
fb_isc_expand_dpb(addr(pdpb&), addr(dpb_length&),
&isc_dpb_user_name, addr(user$),
&isc_dpb_password, addr(pass$),
0)

whileloop 0, dpb_length& - 1

    print hex$(byte(pdpb&,&loop));,;

endwhile

Verbindung zur Datenbank herstellen und auf Fehler prüfen
fb_isc_attach_database(addr(status_vector&[0]), len(name$), addr(name$), addr(db1&), dpb_length&, pdpb&)

if ((status_vector&[0] = 1) and status_vector&[1])

    pstatus& = addr(status_vector&[0])
    fb_isc_interprete(msg#, addr(pstatus&))
    messagebox(string$(msg#, 0), Firebird-Fehler, 16)
    end 1

endif

Hier könnte nun der Zugriff auf die Datenbank stattfinden ...
Im Beispiel wird die Datenbank gelöscht! (Vor dem Ausprobieren bitte Sicherheitskopie anlegen!)

if messageBox(Wollen Sie die Datenbank wirklich löschen?, Frage:, 36) = 6

    fb_isc_drop_database(addr(status_vector&[0]), addr(db1&))

    if ((status_vector&[0] = 1) and status_vector&[1])

        pstatus& = addr(status_vector&[0])
        fb_isc_interprete(msg#, addr(pstatus&))
        messagebox(string$(msg#, 0), Firebird-Fehler, 16)
        end 2

    endif

endif

Verbindung mit der Datenbank lösen und auf Fehler prüfen
fb_isc_detach_database(addr(status_vector&[0]), addr(db1&))

if ((status_vector&[0] = 1) and status_vector&[1])

    pstatus& = addr(status_vector&[0])
    fb_isc_interprete(msg#, addr(pstatus&))
    messagebox(string$(msg#, 0), Firebird-Fehler, 16)
    end 3

endif class=s4 href='./../../funktionsreferenzen/XProfan/end/'>end

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
20.04.2009  
 




Dietmar
Horn
merci!

cela SQLInit et SQLDone hätten wir ensuite oui déjà la fois.

si je ensuite encore irgendwie cela Äquivalent trop SQLExec per API avec den entier normalen SQL-Übergabestrings (SELECT, INTO, UPDATE, etc.) hätte, ensuite wäre qui Kuh oui seulement la fois presque vom glace.

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:  [...] 
20.04.2009  
 




RGH
Dietmar Horn, Beitrag=51895, Zeitpunkt=20.04.2009
merci!

cela SQLInit et SQLDone hätten wir ensuite oui déjà la fois.

si je ensuite encore irgendwie cela Äquivalent trop SQLExec per API avec den entier normalen SQL-Übergabestrings (SELECT, INTO, UPDATE, etc.) hätte, ensuite wäre qui Kuh oui seulement la fois presque vom glace.

Salut
Dietmar


eh bien car! cela meiste allez déjà. Aus Trouvé, qui mir encore pas bekannt sommes, läßt sich ne...aucune champ avec NUMERIC(10,2) définir. NUMERIC(8,2) hingegen funktioniert. et Felder, qui avec NUMERIC(10,2) défini sommes, comment z.B. SALARY dans EMPLOYEES erzeugen beim Zugriff lediglich une Fehlermeldung. et BLOBs gibt es aussi encore pas, dürften mais ne...aucune großes Problem son.
KompilierenMarqueSéparation
FireBird Embedded Demo
----------------------
©2009 Roland G. Hülsmann
Definitionen aus ibase.h
def &isc_dpb_user_name 28
def &isc_dpb_password  29
def &SQLDA_VERSION1     1
def &DSQL_close         1
def &DSQL_drop          2
def &SQL_TEXT         452
def &SQL_VARYING      448
def &SQL_SHORT        500
def &SQL_LONG         496
def &SQL_FLOAT        482
def &SQL_DOUBLE       480
def &SQL_D_FLOAT      530
def &SQL_TIMESTAMP    510
def &SQL_BLOB         520
def &SQL_ARRAY        540
def &SQL_QUAD         550
def &SQL_TYPE_TIME		560
def &SQL_TYPE_DATE    570
def &SQL_INT64			  580
Weitere Definitionen
def &varchar  $1C0  448 SQL_VARYING NOT NULL
def &varchar2 $1C1  449             NULL ALLOWED
def &char     $1C4  452 SQL_TEXT    NOT NULL
def &char2    $1C5  453             NULL ALLOWED
def &float    $1E2  482 SQL_FLOAT   NOT NULL
def &float2   $1E3                  NULL ALLOWED
def &long     $1F0  496 SQL_LONG    NOT NULL
def &long2    $1F1  497             NULL ALLOWED
def &short    $1F4  500 SQL_SHORT   NOT NULL
def &short2   $1F5  501             NULL ALLOWED
def &date     $1FE  510 SQL_TIMESTAMP N NULL
def &date2    $1FF  511             NULL ALLOWED
def &blob     $208  520 SQL_BLOB    NOT NULL
def &blob2    $209  521             NULL ALLOWED
Strukturen aus ibase.h
struct XSQLVAR =
sqltype%,             00:datatype of field
sqlscale%,            02:scale factor
sqlsubtype%,	        04:datatype subtype - BLOBs & Text types only
sqllen%,			        06:length of data area
sqldata&,             08:address of data
sqlind&,              12:address of indicator variable (short)
sqlname_length%,      16:length of sqlname field
sqlname$(31),         18:name of field, name length + space for NULL
relname_length%,      50:length of relation name
relname$(31),	        52:fields relation name + space for NULL
ownname_length%,      84:length of owner name
ownname$(31),         86:relations owner name + space for  NULL
aliasname_length%,   118:length of alias name
aliasname$(31)        120:relations alias name + space for NULL -> 151 = 152 Bytes
struct XSQLDA =
version%,             00:version of this XSQLDA
sqldaid#(14),         02:for future use
sqln%,                16:number of fields allocated
sqld%                 18:actual number of fields
Weitere Strukturen
struct TIMEDATE =
sek&,                0 .. 59
min&,                0 .. 59
std&,                0 .. 23
tag&,                1 .. 31
mon&,                0 .. 11 !
jahr&,               Jahr - 1900 (109 = 2009)
wtag&,               Wochentag 0 .. 6, 0 = Sonntag
jtag&,               Tag im Jahr 0 .. 365
isdst&                Ungleich null bei US-Sommerzeitkonvertierung
Funktionen aus DLL importieren
var hdll& = ImportDLL(fbembed.dll, fb_)

proc fbError

    parameters sv&[]
    declare msg#
    dim msg#, 512
    var pstatus& = addr(sv&[0])
    var sqlcode& = fb_isc_sqlcode(addr(sv&[0]))

    if sqlcode& < 0  SQL-Fehlergefunden

        fb_isc_sql_interprete(sqlcode&, msg#, 512)

    else

        fb_isc_interprete(msg#, addr(pstatus&))

    endif

    if get(errorlevel) > 0

        messagebox(string$(msg#, 0), Firebird Fehler:, 16)
        end 1

    elseif get(errorlevel) = 0

        messagebox(string$(msg#, 0), Firebird Warnung:, 16)

    endif

endproc

proc fbInit

    parameters user$, pass$, name$
    declare status_vector&[20]
    var dpb_length& = 0   Länge des Verbindungsstrings
    var db1& = 0          Databasehandle
    var pdpb& = 0         Zeiger auf Verbindungsstring
    Verbindungsstring erstellen
    fb_isc_expand_dpb(addr(pdpb&), addr(dpb_length&),
    &isc_dpb_user_name, addr(user$),
    &isc_dpb_password, addr(pass$),
    0)
    Verbindung zur Datenbank herstellen und auf Fehler prüfen
    fb_isc_attach_database(addr(status_vector&[0]), len(name$), addr(name$), addr(db1&), dpb_length&, pdpb&)

    if ((status_vector&[0] = 1) and status_vector&[1])

        fbError(status_vector&[])

    endif

    return db1&

endproc

proc fbDone

    parameters db1&
    declare status_vector&[20]
    Verbindung mit der Datenbank lösen und auf Fehler prüfen
    fb_isc_detach_database(addr(status_vector&[0]), addr(db1&))

    if ((status_vector&[0] = 1) and status_vector&[1])

        fbError(status_vector&[])

    endif

endproc

proc fbDrop

    parameters db1&
    declare status_vector&[20]
    fb_isc_drop_database(addr(status_vector&[0]), addr(db1&))

    if ((status_vector&[0] = 1) and status_vector&[1])

        fbError(status_vector&[])

    endif

endproc

proc pad

    parameters s$, l&
    return left$(s$ + space$(l&), l&)

endproc

proc fbSQLExec

    parameters db1&, sql$, mode%
    declare status_vector&[20], trans&, stmt&
    declare osqlda#, osqlvar#, osql#, tm_date#
    var sqlcount& = 0
    dim osqlda#, XSQLDA
    dim osqlvar#, XSQLVAR
    dim tm_date#, TIMEDATE
    Transaktion starten
    fb_isc_start_transaction(addr(status_vector&[0]), addr(trans&), 1, addr(db1&), 0, 0)

    if trans& > 0

        Statementhandle holen

        if left$(upper$(trim$(sql$)),7) <> SELECT

            fb_isc_dsql_execute_immediate(addr(status_vector&[0]), addr(db1&), addr(trans&), len(sql$), addr(sql$), 1, 0)

            if ((status_vector&[0] = 1) and status_vector&[1])

                fbError(status_vector&[])

            endif

        else

            fb_isc_dsql_allocate_statement(addr(status_vector&[0]), addr(db1&), addr(stmt&))

            if stmt& > 0

                Datenbereich zunächst für das Lesen der ersten 2 Felder vorbereiten
                dim osql#, sizeof(osqlda#) + 2 * sizeof(osqlvar#)
                clear osql#
                osqlda# = addr(osql#)
                osqlda#.version% = &SQLDA_VERSION1
                osqlda#.sqln% = 2
                Informationen über erste 2 Felder holen (Datentyp, Länge, etc.)
                fb_isc_dsql_prepare(addr(status_vector&[0]), addr(trans&), addr(stmt&), len(sql$), addr(sql$), 1, osql#)

                if ((status_vector&[0] = 1) and status_vector&[1])

                    fbError(status_vector&[])

                endif

                var d% = osqlda#.sqld%

                if d% > 2

                    Wenn mehr als zwei Felder, dann Datenbereich für erittelte Feldanzahl neu dimensionieren
                    clear osql#
                    dim osql#, sizeof(osqlda#) + d% * sizeof(osqlvar#)
                    osqlda# = addr(osql#)
                    osqlda#.version% = &SQLDA_VERSION1
                    osqlda#.sqln% = d%
                    Informationen über alle Felder holen (Datentyp, Länge, etc.)
                    fb_isc_dsql_prepare(addr(status_vector&[0]), addr(trans&), addr(stmt&), len(sql$), addr(sql$), 1, osql#)

                    if ((status_vector&[0] = 1) and status_vector&[1])

                        fbError(status_vector&[])

                    endif

                endif

                Feldbeschreibungen füllen und Titelzeile erzteugen
                declare fname$[d%-1], ftyp%[d%-1], fstyp%[d%-1], flen%[d%-1], fscale%[d%-1], fdata$[d%-1]
                var zeile$ =
                var maxlen& = 0

                whileloop 0, d%-1

                    osqlvar# = addr(osql#) + sizeof(osqlda#) + &loop * sizeof(osqlvar#)
                    fname$[&loop]  = osqlvar#.sqlname$
                    flen%[&loop]   = osqlvar#.sqllen%
                    case len(fname$[&loop]) > flen%[&loop] : flen%[&loop] = len(fname$[&loop])
                    ftyp%[&loop]   = osqlvar#.sqltype%
                    fstyp%[&loop]  = osqlvar#.sqlsubtype%
                    case ftyp%[&loop] = &date  : flen%[&loop] = 10
                    case ftyp%[&loop] = &date2 : flen%[&loop] = 10
                    fscale%[&loop] = osqlvar#.sqlscale%
                    print osqlvar#.sqltype%, hex$(ftyp%[&loop]),fstyp%[&loop],fname$[&loop],flen%[&loop]
                    zeile$ = zeile$ + pad(fname$[&loop],flen%[&loop]) + |
                    case flen%[&loop] > maxlen& : maxlen& = flen%[&loop]

                endwhile

                Titelzeile ausgeben

                select mode%

                    caseof 0 : print zeile$

                    caseof 1 : addstring zeile$

                endselect

                Trennlinie erzeugen und ausgeben
                zeile$ =

                whileloop 0, d%-1

                    zeile$ = zeile$ + mkstr$(-,flen%[&loop]) + |

                endwhile

                select mode%

                    caseof 0 : print zeile$

                    caseof 1 : addstring zeile$

                endselect

                Statement ausführen
                fb_isc_dsql_execute(addr(status_vector&[0]), addr(trans&), addr(stmt&), 1, 0)

                if ((status_vector&[0] = 1) and status_vector&[1])

                    fbError(status_vector&[])

                endif

                Datenbereich für Empfang eines Satzes vorbereiten
                osqlda#.sqln% = d% * 256
                declare data#[d%-1]
                declare ind&[d%-1]
                dim data#[], maxlen& + 1

                whileloop 0, d% - 1

                    long osql#, sizeof(osqlda#) + &loop * sizeof(osqlvar#) + 8 = addr(data#[&loop])
                    long osql#, sizeof(osqlda#) + &loop * sizeof(osqlvar#) + 12 = addr(ind&[&loop])

                endwhile

                Daten satzweise holen und auswerten
                var retcode& = 0
                retcode& = fb_isc_dsql_fetch(addr(status_vector&[0]), addr(stmt&), 1, osql#)

                while retcode& <> 100   100: keine weiteren Sätze

                    if ((status_vector&[0] = 1) and status_vector&[1])

                        fbError(status_vector&[])

                    endif

                    zeile$ =

                    whileloop 0, d%-1

                        select ftyp%[&loop]

                            caseof &varchar, &varchar2

                            fdata$[&loop] = string$(data#[&loop],2)

                            caseof &date, &date2

                            fb_isc_decode_sql_date(data#[&loop],tm_date#)
                            fdata$[&loop] = dtoc$(format$(%.4d, tm_date#.jahr& + 1900)
                            + format$(%.2u, tm_date#.mon& + 1)
                            + format$(%.2u, tm_date#.tag&))

                            caseof &char, &char2

                            fdata$[&loop] = string$(data#[&loop],0)

                            caseof &long, &long2, &short, &short2

                            fdata$[&loop] = str$(long(data#[&loop],0))

                            caseof &float, &float2

                            fdata$[&loop] = str$(double(long(data#[&loop],0)))

                            caseof &blob, &blob2

                            fdata$[&loop] = BLOB- + str$(fstyp%[&loop])

                        endselect

                        zeile$ = zeile$ + pad(fdata$[&loop],flen%[&loop]) + |

                    endwhile

                    inc sqlcount&
                    Datenzeile ausgeben

                    select mode%

                        caseof 0 : print zeile$

                        caseof 1 : addstring zeile$

                    endselect

                    retcode& = fb_isc_dsql_fetch(addr(status_vector&[0]), addr(stmt&), 1, osql#)

                endwhile

            endif

            Statementhandle freigeben
            fb_isc_dsql_free_statement(addr(status_vector&[0]), addr(stmt&), &DSQL_drop)
            endif  SELECT-Ende
            Transaktion abschließen
            fb_isc_commit_transaction(addr(status_vector&[0]), addr(trans&))

        endif

        if ((status_vector&[0] = 1) and status_vector&[1])

            fbError(status_vector&[])

        endif

        return sqlcount&

    endproc

    =============
    HAUPTPROGRAMM
    =============
    window 1000, 800
    cls
    var db1& = fbInit(SYSDBA, masterkey, Employee.fdb)
    set(errorlevel, -1)
    fbSQLExec(db1&, drop table BUECHER, 1)
    set(errorlevel, 1)
    fbSQLExec(db1&, create table BUECHER (titel CHAR(40), autor CHAR(40), preis NUMERIC(8,2), datum TIMESTAMP), 1)
    fbSQLExec(db1&, INSERT INTO buecher (titel,autor,preis) VALUES (XProfan für Dummies,RGH-Soft,19.94), 1)
    clearlist
    fbSQLExec(db1&, select * from BUECHER, 1)
    listbox$(BUECHER:,2)
    clearlist
    print fbSQLExec(db1&, select EMP_NO, FIRST_NAME, LAST_NAME, JOB_CODE, JOB_GRADE, JOB_COUNTRY, FULL_NAME, PHONE_EXT, HIRE_DATE from EMPLOYEE, 1)
    listbox$(EMPLOYEE:,2)
    clearlist
    print fbSQLExec(db1&, select * from PROJECT, 1)
    listbox$(PROJECT:,2)
    clearlist
    print fbSQLExec(db1&, select * from CUSTOMER, 1)
    listbox$2>(CUSTOMER:,2)
    waitinput
    fbDone(db1&)
    end
 
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
22.04.2009  
 




répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

7.172 Views

Untitledvor 0 min.
Peter Max Müller04.02.2019
H.Brill09.02.2017
Michael Klumb29.03.2016
rquindt01.03.2016
plus...

Themeninformationen



Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie