Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Jakmile je známa základní úroveň interoperability, je nutné zvážit databázové funkce používané aplikací. Jaké příkazy SQL například aplikace spustí? Bude aplikace používat posouvání kurzorů? Transakce? Postupy? Dlouhá data? Představu o tom, jaké funkce nemusí všechny dbMS podporovat, najdete v popisu funkcí SQLGetInfo, SQLSetConnectAttr a SQLSetStmtAttr a dodatek C: Gramatika SQL. Funkce vyžadované aplikací můžou odstranit některé sady DBMS ze seznamu cílových dbMS. Můžou také ukázat, že aplikace může snadno cílit na mnoho DBMS.
Pokud jsou například požadované funkce jednoduché, dají se obvykle implementovat s vysokým stupněm interoperability. Aplikace, která provádí jednoduchý příkaz SELECT a načítá výsledky s kurzorem jen vpřed, bude pravděpodobně vysoce interoperabilní na základě své jednoduchosti: Téměř všechny ovladače a dbMS podporují funkce, které potřebuje.
Pokud jsou však požadované funkce složitější, například posunovatelné kurzory, poziční aktualizační a odstraňovací příkazy a postupy, je nutné často provádět kompromisy. Existuje několik možností:
Nižší interoperabilita, více funkcí. Aplikace obsahuje funkce, ale funguje jenom s DBMS, které je podporují.
Vyšší interoperabilita, méně funkcí. Aplikace funkce zahodí, ale funguje s více DBMS.
Vyšší interoperabilita, volitelné funkce. Aplikace obsahuje funkce, ale zpřístupňuje je pouze těm DBMS, které je podporují.
Vyšší interoperabilita, více funkcí. Aplikace používá funkce DBMS, které je podporují, a emuluje je pro ty DBMS, které nikoli.
První dva případy jsou poměrně jednoduché k implementaci, protože funkce se používají buď se všemi podporovanými systémy DBMS, nebo s žádnou. Druhé dva případy jsou na druhé straně složitější. V obou případech je potřeba zkontrolovat, jestli DBMS podporuje funkce, a v posledním případě k napsání potenciálně velkého množství kódu pro emulaci těchto funkcí. Proto tato schémata pravděpodobně vyžadují více času vývoje a mohou být pomalejší v době běhu.
Představte si obecnou dotazovací aplikaci, která se může připojit k jednomu zdroji dat. Aplikace přijme dotaz od uživatele a zobrazí výsledky v okně. Předpokládejme, že tato aplikace má jednu funkci, která uživatelům umožňuje zobrazit výsledky více dotazů současně. To znamená, že mohou spustit dotaz a podívat se na některé z výsledků, provést jiný dotaz a podívat se na některé z jeho výsledků a pak se vrátit k prvnímu dotazu. To představuje problém s interoperabilitou, protože některé ovladače podporují pouze jeden aktivní příkaz.
Aplikace má řadu voleb na základě toho, co ovladač vrací pro SQL_MAX_CONCURRENT_ACTIVITIES možnost v SQLGetInfo:
Vždy podporuje více dotazů. Po připojení k ovladači aplikace zkontroluje počet aktivních příkazů. Pokud ovladač podporuje pouze jeden aktivní příkaz, aplikace připojení zavře a informuje uživatele, že ovladač nepodporuje požadované funkce. Aplikace je snadno implementovaná a má plnou funkčnost, ale má nižší interoperabilitu.
Nikdy nepodporuje více dotazů. Aplikace funkci úplně zahodí. Je snadné implementovat a má vysokou interoperabilitu, ale má méně funkcí.
Podporujte více dotazů pouze, pokud to ovladač umožňuje. Po připojení k ovladači aplikace zkontroluje počet aktivních příkazů. Aplikace umožňuje uživateli spustit nový příkaz, pokud je již aktivní, pouze pokud ovladač podporuje více aktivních příkazů. Aplikace má vyšší funkčnost a interoperabilitu, ale je obtížnější ji implementovat.
Vždy podporuje více dotazů a v případě potřeby je emulujte. Po připojení k ovladači aplikace zkontroluje počet aktivních příkazů. Aplikace vždy umožňuje uživateli spustit nový příkaz, pokud je již aktivní. Pokud ovladač podporuje pouze jeden aktivní příkaz, aplikace otevře další připojení k danému ovladači a spustí v daném připojení nový příkaz. Aplikace má plnou funkčnost a vysokou interoperabilitu, ale je obtížnější ji implementovat.