V príklade sa predpokladá existenciu objektov SD.DbStruct, TB.Table. Ďalej musí byť spustený príslušný proces D2000 DBManager a v operačnom systéme je v ODBC korektne konfigurovaná databáza s príslušným DSN menom.
INT _handle ; handle pre prístup k tabuľke
INT _retCode
TEXT _where
RECORD (SD.DbStruct)_dbRow ; pomocné premenné
RECORD (SD.DbStruct) _dbRowSave
; otvorenie tabuľky pre modifikáciu
DB_CONNECT TB.Table, _DB_MODIFY, _handle, _retCode
IF _retCode # _ERR_NO_ERROR THEN ; nepodarilo sa spojiť s tabuľkou
END
ENDIF
; čítanie podľa klúčovej položky
_dbRow[1]^Int := 1
DB_READ _handle, _dbRow[1], _retCode
IF _retCode # _ERR_NO_ERROR THEN ; riadok sa v tabuľke nenachádza
END
ENDIF
; odložím si pôvodný riadok z tabuľky do pomocnej premennej
SET _dbRowSave[1] WITH _dbRow[1] ; zmením text
_dbRow[1]^Text := _dbRow[1]^Text + "zmena"
; zapíšem riadok naspäť do tabuľky podla kľúčovej položky
DB_UPDATE _handle, _dbRow[1], _retCode
IF _retCode # _ERR_NO_ERROR THEN ; nepodaril sa update
END
ENDIF
; znova prečítam riadok, ale cez klauzulu WHERE
_where := "Int="+%IToStr (_dbRowSave[1]^Int)
DB_READ _handle, _dbRow[1], _retCode WHERE _where
IF _retCode # _ERR_NO_ERROR THEN ; musí tam byť
END
ENDIF
; znova prečítam riadok, ale cez klauzulu WHERE s parametrizovanou podmienkou
_where := "Int=#PAR#"
DB_READ _handle, _dbRow[1], _retCode WHERE _where BINDIN _dbRowSave[1]^Int
IF _retCode # _ERR_NO_ERROR THEN ; musí tam byť
END
ENDIF
; zruším ho
DB_DELETE _handle, _dbRow[1], _retCode
IF _retCode # _ERR_NO_ERROR THEN ; musí tam byť
END
ENDIF
; alebo cez klauzulu WHERE
;_where := "Int="+%IToStr(_dbRowSave[1]^Int)
;DB_DELETE _handle, __retCode WHERE _where
;IF _retCode # _ERR_NO_ERROR THEN ; musí tam byt
; END
;ENDIF
; alebo cez klauzulu WHERE a parametrizovanu podmienku
;_where := "Int=#PAR#"
;DB_DELETE _handle, __retCode WHERE _where BINDIN _dbRowSave[1]^Int
;IF _retCode # _ERR_NO_ERROR THEN ; musí tam byt
; END
;ENDIF
; vložím pôvodný obsah
DB_INSERT _handle, _dbRowSave[1], _retCode
IF _retCode # _ERR_NO_ERROR THEN ; malo by sa to podariť
END
ENDIF
; zatvorím tabuľku
DB_DISCONNECT _handle
V nasledujúcom príklade sa predpokladá existencia objektov SD.BlobStruct, TB.BlobTable. Ďalej musí byť spustený príslušný proces D2000 DBManager a v operačnom systéme je v ODBC korektne konfigurovaná databáza s príslušným DSN menom. Tabuľka BlobTable v databáze musí mať okrem stĺpcov ID a Meno (ktoré sú definované v SD.BlobStruct) aj stĺpec MyFile typu BLOB (Binary Large OBject). Databáza Sybase tento typ nazýva LONG BINARY, Oracle pre zmenu BLOB a MS SQL Server zase IMAGE. Kompatibilita je skrátka skvelá vec.
INT _handle ; handle pre prístup k tabuľke
INT _retCode
TEXT _where
RECORD (SD.BlobStruct)_dbRow ; pomocná premenná
; otvorenie tabuľky pre modifikáciu
DB_CONNECT TB.BlobTable, _DB_MODIFY, _handle, _retCode
IF _retCode # _ERR_NO_ERROR THEN; nepodarilo sa spojiť s tabuľkou
END
ENDIF
; vložím do tabuľky riadok
_dbRow^ID := 99
_dbRow^Meno := "My inserted file"
DB_INSERT _handle, _dbRow, _retCode
IF _retCode # _ERR_NO_ERROR THEN ; malo by sa to podariť
END
ENDIF
; vložím do tabuľky súbor ako BLOB objekt
DB_UPDATE_BLOB _handle, "MyFile", "C:\File99.txt", _retCode, 99
IF _retCode # _ERR_NO_ERROR THEN ; malo by sa to podariť
END
ENDIF
; načítam z tabuľky iný súbor (z riadku s ID=11) a uložím ho na disk C:\
DB_READ_BLOB _handle, "MyFile", "C:\File11_new.txt", _retCode, 11
; keby nebol stĺpec ID definície štruktúry SD.BlobStruct definovaný
; ako kľúčový, bolo by treba špecifikovať podmienku WHERE:
DB_READ_BLOB _handle, "MyFile", "C:\File11_new.txt", _retCode WHERE "ID=11"
; zatvorím tabuľku
DB_DISCONNECT _handle
; práca bez otvárania tabuľky (funkcie DBS_ )
; načítam ďalší súbor bez otvárania tabuľky
DBS_READ_BLOB TB.BlobTable, "MyFile", "C:\File22_new.txt", _retCode, 22
; uložím ho do tabuľky
DBS_UPDATE_BLOB TB.BlobTable, "MyFile", "C:\File22_new.txt", _retCode, 33
Súvisiace stránky:
Pridať komentár