Firebird & API volanie

Michal Kubecek mike na mk-sys.cz
Neděle Říjen 17 23:02:02 CEST 2004


On Sun, Oct 17, 2004 at 04:27:36PM +0200, Marek Grac wrote:
> hladal som rozumny popis API pre firebird a nasiel som jedine ApiGuide
> k Interbase 6. Z neho som, co to pochopil, dokazem spravit SELECT a
> ziskat z neho vysledky :) problem je ked sa snazim o SELECT s
> parametrom (isc_dsql_execute2). Skoncim az pri isc_dsql_fetch(), ktory
> zahlasi -504 Unknown cursor. Pritom vsetky predchadzaju volania
> skoncili bez problemov. 

Je to už nějaký čas, co jsem to API studoval a dospěl k závěru, že API
InterBase nevzniklo s cílem, aby ho někdo používal :-) (tedy aspoň ne
přímo). Od té doby používám pár tříd, které vznikly jako výsledek toho
studia, takže si nepamatuji vše úplně přesně, ale snad nebudu mluvit
úplně z cesty.

Funkce isc_dsql_execute2() je pouze pro situace, kdy potřebujete provést
nějaký non-select statement, který ale vrací hodnoty. Typicky se používá
ke spouštění non-select procedur s návratovými hodnotami (nenapadá mne
jiný příklad, kdy by se to hodilo). Klasický postup pro select je

isc_dsql_allocate_statement()
isc_dsql_prepare()
isc_dsql_describe_bind()
isc_dsql_describe()
isc_dsql_execute()
while (isc_dsql_fetch()) ...

Té funkci isc_dsql_fetch() předáte pointer na out_sqlda, který dostanete
použitím isc_dsql_describe().

Inspirací mohou být např. zdrojáky interbase rozšíření PHP, ale raději
pětkové verze. Jsou tam totiž opraveny některé chyby a opravy nebyly
vždy backportovány do čtyřkové řady. Například se jedná o zmíněné
spouštění non-select procedur (těch, které nepoužívají suspend)
s návratovými hodnotami nebo fetch hodnot typu long na 64-bitových
architekturách.

							  Michal Kubeček



Další informace o konferenci Linux