Español
Foro

Hecho: Firebird Embedded

 

Dietmar
Horn
¡Hola zusammen,

con mi XProfan-Firebird-SQL-Projekt klappt lo soweit bastante bien.

Nun hay aber una Problema, welches Yo möglichst a vorgestern con XProfan lösen müßte, si el con XProfan aktuell überhaupt posible es.

In el ersten offiziellen Beta para ausgesuchte Tester se el Programa nun necesariamente como Embedded-Variante laufen, y no como No-Embedded.

Mit No-Embedded encima ODBC-Schnittstelle mittels el normalen FB-SQL-Befehle klappt bisher alles weitestgehend tadellos.

Doch como kann Yo el Embedded-Variante inicializar, en danach con denselben SQL-Routinen en el Programa como gewohnt weiterarbeiten a puede? Später se el Anwender entonces zwischen beiden Varianten selber el Auswahl treffen.

Für el SQL-Experten bajo euch Yo ya veces alles en una ZIP-Archiv gepackt - also Firbird embedded (no Installation erforderlich) y algunos zusätzliche Hilfedateien (außer el, welche en el Unterordner doc sowieso ya disponible son). El beigelegte Patienten.fdb podría para Testen dienen.

Selber Yo el pocos laut Hilfedatei(en) benötigten Archivos en el Projektverzeichnis kopiert y el fbembed.dll en fbclient.dll umbenannt. Laut Hilfedatei(en) debería el ausreichen. Como Yo el a ahora verstehe, braucht uno doch el Rest de el Firebird-Ordner de el ZIP doch nada necesariamente, oder?

Doch con
KompilierenMarcaSeparación
bekomme Yo simplemente no Verbindung hin!

Wenn Yo el en el nächsten Tagen (notfalls eben sólo veces por Workarount) no irgendwie con XProfan hinbekomme, entonces kann Yo el Arbeit de más Monaten en el Principio en el Tonne kloppen ...

Roland, hast Usted tal vez como Datenbank-Profi una solución a dieses Problema, oder wer de los otro DB-Profis sabe se todavía así de?

Saludo y Gracias en el voraus!

Dietmar

7.490 kB
Kurzbeschreibung: Firebird embedded
Hochgeladen:17.04.2009
Ladeanzahl76
Descargar
 
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.

...El Datenbankdatei muss se en Benutzung des embedded Server neben diesem ebenfalls
en el Applikationsverzeichnis befinden. ...


Ist me beim lesen el Anleitung siempre otra vez aufgefallen. Meist mentira el DB sí en un otro Directorio...

[offtopic]...sólo así como Gedanke... [/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
Nein, Mario,

el pocos DLL puede en el selben Directorio mentira, como DB, anderenfalls voluntad ellos de el (umbenannten) fbclient.dll en el Windows-, Windows-Sistema- oder Windows-Sistema32-Directorio gesucht. Das haben wir alles stundenlang vergeblich durchprobiert (ähnlich como damals el Sache con el BLOBs). Mit ImportDLL(fbclient.dll,*) puede ser se genau ansehen, wo el fbclient.dll el otro pocos DLL con el restlichen Características sucht. Notfalls puede ser sí con ChDir en el Ordner wechseln, en el se esta pocos Archivos tummeln.

Und laut el vielen FB-Hilfedateien stellt en el Embedded-Versión el fbclient.dll para el DBMS el real Server dar, el todos FB-Funktionalitäten lokal disponible stellt - aber en el Gegensatz a Nichtembedded-Versión muß el Anwender como no sólo cada todavía así pequeño DB-Programa en el Systemsteuerung el ODBC-Treiber konfigurieren.

Meiner Meinung después de fehlt como (o. me) a ahora sólo todavía el allererste Baustein, en esta Server (Así que el Embedded-FBClient.dll) a inicializar.

Yo vermute o. befürchte bald, daß el a ahora con XProfans SQLInit no así sin weiteres posible ser se. Yo schätze veces, hier se wahrscheinlich sólo Roland selber zeitnah weiterhelfen puede - ähnlich como en BLOB-Geschichte - oder uno de los otro API-Spezialisten, que ahora ya genauer con el FB-APIs auskennen, sin se selber sólo mühsam herantasten tener ... Notfalls eben una neue, todavía con C++ oder Delphi a erstellende FB-Embedded-DLL para XProfan. Mi nächste Befürchtung va dahin, daß SQL-Exec ebenfalls el installierten ODBC-Treiber voraussetzt y al todo SQL-Zeugs con SQLExec entonces ebenfalls api-mäßig selber nachbasteln müßte. Hoffentlich Yo con media Berfürchtungen no bastante, porque entonces wäre sin Rolands rasche Ayuda mein aktuelles ya bastante weit fortgeschrittenes Projekt sólo de esta Gründen para Scheitern verurteilt y monatelange Programmierarbeit para el Katz gewesen.

Yo sería mich sin embargo riesig darüber freuen, si yo en esta Punkten Denkfehler begehe y yo veces otra vez sólo el Wald antes lauter Bäumen no sehe. Doch como en el Ausgangsposting ya dijo: El Tiempo hängt me wegen dieser Geschichte inzwischen bastante schön en el Nacken.

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




RGH
¡Hola,

auch si yo heute no Tiempo habe, una erster Referencia: Ohne ODBC-Treiber se lo natürlich no ir: Ohne ODBC-Treiber kann el ODBC-Schnittstelle de XProfan natürlich no trabajo. Gibt lo una ODBC-Treiber para Firebird-Emedded? Oder lässt se el bisherige Treiber para Embedded konfigurieren?

Direkter Aufruf en API el DLL podría natürlich ir. Ist esta irgendwo dokumentiert? Vermutlich hay como una Documentación para Delphi oder C++ ... o schlimmsten Fall sólo fertige Komponenten sin Quellcode, el encima ihre Zugriffe nichts preis geben.
(Aunque wären el reciente Überlegungen entonces tatsächlich bastante wertlos, como lo entonces sí en algo bastante Anderes va. Das hätte uno de Anfang a erwähnen necesario. Ok, el Oberfläche kann natürlich bleiben ...)

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
19.04.2009  
 



Tal vez veces el Florian Heuberger fragen si él con Visual-Zeugs en algo como Zugriff ha.
 
19.04.2009  
 




Dietmar
Horn
¡Hola,

nein, el es sí el Sinn de FB-Embedded, daß uno como no ODBC-Treiber benötigt. Mehreren otro Programmen de dieser Branche hacer el genauso. Der Anwender kann optional umschalten, welchen Modus él nutzen möchte: Embedded (local, sin gleichzeitigen Mehrfachzugriff), oder No-Embedded (Mehrfachzugriff en DB encima Netzwerk posible).

An Dokumentationen Yo el, qué en FB sowieso esta es, el Yo con en el obige ZIP gepackt habe y todavía una API-Guide para Interbase (IB y FB debería wohl kompatibel ser) - siehe Anhang. Für mich una Buch con sieben Siegeln!


Aunque wären el reciente Überlegungen entonces tatsächlich bastante wertlos, como lo entonces sí en algo bastante Anderes va.


Wertlos no, porque Yo necesidad zwingend beide Modi. Nur dumm, daß el Projektleiter el Beta-Versión ausgewählten Testern nun vorerst como Embedded geben möchte (porque esta a 99% no en el Lage son, el ODBC-Geschichte selber einzurichten).

Den normalen Modus Yo fertig, como funktioniert dbzgl. con XProfan a ahora alles bestens.

Saludo
Dietmar

1.736 kB
Hochgeladen:19.04.2009
Ladeanzahl63
Descargar
 
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
¡Hola,

como dijo, para el en XProfan integrierten ODBC-Características es una ODBC-Treiber zwingende Vorraussetzung.
Dieses Umschalten en Embedded sin ODBC funktioniert also sólo para Anwendungen, el generisch, also direkt por Firebird- o. Interbase-API, con el Datenbank kommunizieren. Für Delphi oder C++ voluntad vermutlich entsprechende Komponenten mitgeliefert. En esta Anwendungen se also de vornherein no Umweg encima ODBC gegangen. Der Zugriff en el Datenbank es Así que una bastante otro y como son el reciente Überlegungen para Guardar y Lesen de BLOBs encima ODBC tatsächlich kaum verwendbar.

Möglicherweise braucht uno pero no extra a schreibende DLL, pero kann el API direkt uso.

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
19.04.2009  
 




RGH
¡Hola,
Yo veces a la kurzen Blick en el API-Guide geworfen. Como scheint sí alles drin a posición, qué braucht:
isc_attach_database() para Öffnen el Datenbank, isc_dsql_exec_immediate() para Ausführen uno SQL-Statements, etc.
El API erinnert una wenig a el ODBC-API. Yo schaue veces, dass Yo el nächsten Tage Tiempo finde, así una wenig a experimentieren. (Aber lo Yo hindere auch niemanden, lo incluso a probieren. El Beschreibungen scheinen me bastante ausführlich a 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
19.04.2009  
 




Dietmar
Horn
Hola Roland,

danke en el voraus para Su Mühe!

Wenn dieser Embedded-Modus irgendwie klappt, entonces bin Yo fix y fertig y voluntad determinado reif para el Klappse ser! Das wäre entonces tal vez aber auch no schlecht, porque hay hätte Yo vermutlich genügend Tiempo, mein XProfan-Lehrbuch en zwei weitere größere Kapitel a ergänzen:

XProfan y el relationalen Datenbanksysteme Firebird y Interbase

1. Mi armen Nerven y Firebird
2. Einführung en Firebird con XProfan

Weil Firebird sí libre a haben es, wäre el entonces una clevere No-ODBC-Alternative a el z.T. doch bastante eingeschränkten y el Jahre gekommenen dBase.

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




RGH
¡Hola,

hier una erster Teil a Verwendung de direktem Zugriff en Firebird mittels XProfan. Das Ejemplo debería sowohl para el Client-Versión (como heißt el DLL allerdings anders: fbclient.dll, en Interbase natürlich auch) como auch como hier para el Embedded-Versión trabajo.

ACHTUNG: Das Ejemplo funktioniert! Wenn uno con Sí antwortet se el Datenbank tatsächlich gelöscht y beim Intento, el no mehr vorhandene Datenbank a schließen, hay el entsprechene Firebird-Fehlermeldung. ALso vorher Por favor, una Sicherheitskopie el Datenbankdatei (en el Ejemplo Patienten.fdb) redactar.

Was geschieht en el Programa?
- Mit ImportDLL voluntad el API-Características el DLL imortiert
- Mit isc_expand_dpb() se el Verbindungsstring producido. In unserem Fall brauchen wir sólo Username y Paßwort. El entsprechenden Konstanten kommen de el ibase.h
- Mit isc_attach_database() se el Verbindung a Datenbank producido. Wenn el erste Eintrag des Status-Arrays una 1 es, es el zweite Eintrag en el Falle ungleich 0 el Interbase-Fehlernummer. In diesem Fall es con isc_interprete() el texto el entsprechenden Fehlermeldung ermittelt.
- con isc_drop_database() puede wir nun el Datenbank löschen. Das klappt natürlich sólo korrektem Usernamen y Paßwort. Ansonsten hay una Fehlermeldung. (Das Löschen el Datenbank Yo como praktischen Test para el erfolgreiche Verbindung gewählt, porque una SELECT una wenig komplexer wäre ... ;) ) Mit algo Fleiß y Erfahrung puede ser natürlich con el übrigen API-Características auch SQL-Statements absetzen, BLOBs escribir y lesen, etc. El API erinnert una wenig a el ODBC-API ... desafortunadamente sólo una wenig.
- Mit isc_detach_database() se el Verbindung a Datenbank final ... vorrausgesetzt ellos wurde en el vorigen Schritt no gelöscht.

Das Ejemplo beweist, qué aber eh klar war: Wenn con otro Programmiersprachen el direkte Zugriff en Firebird va, es auch con XProfan:
KompilierenMarcaSeparación
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

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
20.04.2009  
 




Dietmar
Horn
Gracias!

Das SQLInit y SQLDone hätten wir entonces sí ya veces.

Wenn Yo entonces irgendwie el Äquivalent a SQLExec por API con el bastante normalen SQL-Übergabestrings (SELECT, INTO, UPDATE, etc.) hätte, entonces wäre el Kuh sí sólo veces fast vom Eis.

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




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

Das SQLInit y SQLDone hätten wir entonces sí ya veces.

Wenn Yo entonces irgendwie el Äquivalent a SQLExec por API con el bastante normalen SQL-Übergabestrings (SELECT, INTO, UPDATE, etc.) hätte, entonces wäre el Kuh sí sólo veces fast vom Eis.

Saludo
Dietmar


Nun porque! Das meiste va ya. Aus Gründen, el me todavía no bekannt son, läßt se kein Feld con NUMERIC(10,2) definieren. NUMERIC(8,2) hingegen funktioniert. Und Felder, el con NUMERIC(10,2) definiert son, como z.B. SALARY en EMPLOYEES erzeugen beim Zugriff lediglich una Fehlermeldung. Und BLOBs hay auch todavía no, dürften aber kein großes Problema ser.
KompilierenMarcaSeparación
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  
 




Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

7.100 Views

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

Themeninformationen



Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie