Pohledy a SPT. Co s tím ?
2a) Obecný popis:
Definice pohledů mezi visuálním návrhem a SPT se opět nijak výrazně neliší. Rozdíl je pouze v tom, že pohled definovaný v DBC konteineru (a otevíraný pomocí příkazu USE) si automaticky otevírá spojení na vzdálená data. Kdežto pro pohled (SQL příkaz) SPT se musí spojení nejdříve otevřít.
Název | Deaultní hodnota | Popis | Nutné nastavit na 0. pohled |
Nastavení za běhu |
Poznámka |
FetchSize | 100 | Velikost stahovaného balíku dat ve větách. | Ano | Ano | |
FetchMemo | .F. | Příznak, zda se mají také stahovat MEMO/OLE položky. | Ano | Ano | Pokud je nastaveno .F. a taková položka je v SELECTu (MEMO/OLE), pak VFP pro tyto položky data nestáhne. Při vytvoření kopie věty pomocí SCATTER ... je nutno definovat seznam položek pomocí klauzule FIELDS a vyjmout z něj všechna MEMO pole, pokud to není aktualizační pohled (OLE pole vždy ignorují). |
CompareMemo | .F. | Příznak, zda se mají porovnávat položky typu MEMO/OLE při opravě věty s hodnotami na datové straně. | Ano | Ano | Je vhodné ponechat defaultní nastavení, neboť při opravě věty (zde navíc záleží na nastavení vlastnosti WhereType) VFP generuje SQL příkaz pro otestování zda nedošlo ke změně hodnot a takto výsledný SQL příkaz by mohl být delší než 65 KB (MS SQL, ORACLE) nebo 8KB (ACCESS,VFP). |
MaxRecords | -1 | Počet vět, které VFP natáhne. | Ano | Ano | Pokud je -1, pak VFP natáhne všechny věty odpovídající klauzuli WHERE. Pokud je zadáno číslo > -1, pak VFP natáhne uvedený počet. Toto omezení se však aplikuje až ve VFP, nikoliv na datové straně !! |
UseMemoSize | 255 | Velikost v bytes , kdy VFP z textové/binární položky udělá MEMO/OLE. | Ano | Ne | |
FetchAsNeeded | .F. | Příznak , zda se mají věty natahovat postupně na pozadí (.F.), či na požádání (.T.). | Ano | Ano | Nastavení .T. se používá pro postupné zobrazení vět uživateli (tahá se balík dat, jehož velikost je určen vlastností FetchSize). |
Prepared | .F. | Příznak, zda se má SQL pohled "předpřipravit" (.T.) či nikoliv (.F.) . | Ano | Ne | Pokud se bude daný pohled/SQL příkaz spouštět vícekrát, je hodné nastavit .T. . Databázový server si pak daný pohled/SQL příkaz předkompiluje a jeho další spuštění je vždy rychlejší (neprovádí se kompilace). Je to vhodné nastavit, pokud je pohled/SQL příkaz parametrizován. |
Buffering | 3 | Typ bufferování tabulky. | Ne | Ano | Zde jsou pouze povoleny hodnoty 3 - optimistické bufferování jedné věty a 5 - optimistické bufferování celeé tabulky . |
UpdateNameList | Seznam položek ve VFP kurzoru a jejich odpovídající kód na datové straně. | Ne | Ano | Nutné pro updateovací pohledy. | |
UpdatableFieldList | Seznam položek VFP kurzoru, které se budou ukládat na datovou stranu. | Ne | Ano | Nutné pro updateovací pohledy. | |
KeyFieldList | Seznam položek VFP kurzoru tvořící primární klíč. | Ne | Ano | Nutné pro updateovací pohledy. To proto, aby se dala jednoznačně určit věta pro opravu a smazání. |
|
Tables | Seznam tabulek na datové straně, kterých se týkají změny v datech. | Ne | Ano | Nutné pro updateovací pohledy. | |
WhereType | 3 | Typ kontroly rozdílů v datech mezi VFP kurzorem a tabulkou na datové straně. | Ne | Ano | Nutné pro updateovací pohledy. |
BatchUpdateCount | 1 | Počet vět, které se budou aktualizovat najednou. | Ne | Ano | Nutné pro updateovací pohledy. Hodnota větší jak 1 pouze pro buferování celé tabulky. Na konferenci již proběhly zmínky, že to nefunguje korektně. |
SendUpdates | .F. | Příznak, zda se mají posílat změny z VFP kurzoru na datovou stranu. | Ne | Ano | Nutné pro updateovací pohledy. |
UpdateType | 1 | Způsob opravy věty na datové straně. | Ne | Ano | Nutné pro updateovací pohledy. V dokumentaci VFP (nebo to bylo v tom speciálním reportu ?) je napsano, že je stjně jedno co se sem nastaví, neboť DB server si stejně udělá co chce. |
2c) Updateovací pohledy:
Updateovací pohledy jsou výhodné, neboť dělají spoustu věcí za programátora.
Název | Hodnota vlastnosti | Vysvětlení |
UpdateNameList | XX000 XXT000.XX000, XX001 XXT000.XX001, XX002 XXT000.XX002, XX00X XXT000.XX003 | Informace o položce je tvořena dvěma části. Nejdříve je uveden název položky ve VFP kurzoru a potom , odděleno mezerou, název tabulky a položky na datové straně. |
UpdatableFieldList | XX000,XX001,XX002,XX00X | Jde o seznam položek z VFP kurzoru, jejichž hodnota se bude promítat na datový server. |
KeyFieldList | XX000 | Jde o seznam tvořící primární nebo kandidátní klíč pro. |
Tables | XXT000 | Seznam tabulek, do nichž se mají promítnout změny. V případ dvou tabulek by to vypadalo takto: XXT000,XXT001. |
SendUpdates | .T. | K tomu již není co dodat. |
LOCAL lihdbc,lcAlias lcAlias=SYS(2015) lihdbc=SQLSTRINGCONNECT("DSN=MOJE_DSN;uid=Uziv1;pwd=Heslo1;") =SQLEXEC(lihdbc,"SELECT XX000,XX001,XX002,XX003 AS XX00X FROM XXT000",lcAlias) =CURSORSETPROP("KeyFieldList","XX000",lcAlias) =CURSORSETPROP("Tables","XXT000",lcAlias) =CURSORSETPROP("UpdatableFieldList","XX000,XX001,XX002,XX00X",lcAlias) =CURSORSETPROP("UpdateNameList","XX000 XXT000.XX000, XX001 XXT000.XX001, XX002 XXT000.XX002, XX00X XXT000.XX003",lcAlias) =CURSORSETPROP("SendUpdates",.T.,lcAlias) * Nyní se můžou provádět změny v datech VFP kurzoru, které budou automaticky/ručně promítnuty na datový server.
2d) Parametrizované pohledy a SQL příkazy:
VFP přímo podporuje parametrizované pohledy/SQL příkazy. Používá se pro to konvence: Položka=?pPoložka kde "pPoložka" je proměnná ve které je požadovaná hodnota. Znak "?" slouží pro určení, že se jedná o parametr.
Stačí nastavit novou hodnotu dané proměnné a provést znovu načtení dat. Pohledy v DBC konteineru se znovunačtou pomocí funkce REQUERY(), SQL příkazy se musejí znovu spustit.
Pokud "hrozí", že daný pohled/SQL příkaz bude spouštěn vícekrát během krátké doby pak u pohledu je vhodné nastavit vlastnost Prepared, SQL příkaz lze přepřipravit nastavením vlastnosti Prepared na nultém spojení, či použitím funkce SQLPrepare().
Výsledný kód by tedy vypadal takto:
LOCAL lihdbc,lcAlias,lcXX001 lcAlias=SYS(2015) lihdbc=SQLSTRINGCONNECT("DSN=MOJE_DSN;uid=Uziv1;pwd=Heslo1;") =SQLPREPARE(lihdbc,"SELECT XX000,XX001,XX002,XX003 AS XX00X FROM XXT000 WHERE XX001 LIKE ?lcXX001",lcAlias) lcXX001="%TEST%" * Pak už jen stačí =SQLEXEC(lihdbc,"SELECT XX000,XX001,XX002,XX003 AS XX00X FROM XXT000 WHERE XX001 LIKE ?lcXX001",lcAlias) * Nebo =SQLEXEC(lihdbc) * Nyní se může změnit hodnota vstupního parametru a znova zavolat lcXX001="%ABC%" =SQLEXEC(lihdbc,"SELECT XX000,XX001,XX002,XX003 AS XX00X FROM XXT000 WHERE XX001 LIKE ?lcXX001",lcAlias)
2e) Volání uložených procedur:
Slovníček pojmů a zkratek:
ConnectString - - Spojovací řetězec , jehož některé elementy můžou být specifické pro určitý ODBC driver, ale většina odpovídá standardu ODBC
ODBC driver - - Specifický driver pro konkrétní datový zdroj
DSN - Data Source Name - Název datového zdroje definovaného v ODBC manažeru
DAO - Data Access Object - Objektové rozhraní pro přístup k RD
SPT - -viz SQL Pass Through
SQL Pass Through - - Technologie pro vykonaní nativních příkazů pro datový server
ODBC - Open database connectivity - Univerzální rozhraní pro přístup k různým datovým zdrojům
RD - - Vzdálená data
DE - Developmen Environment - Vývojové prostředí
Runtime - -
OLE-DB - -
ADO - -