* Program..: DbEditor.prg * Author...: Jeremy Suiter * Date.....: 19/03/2003 * * Last Modification : * 18/04/2003 V2.01 Michael McVicker (MMM comments). * Will now run from any directory. Double clicking of file will open it. * Browse will now update while dragging scroll tab. * 18/04/2003 V2.02 James Loughner. * Added ALT-I to insert record. * 22/04/2003 V2.02 Jeremy Suiter. * Added support for SET CHARSET and SET COLLATION to .ini file instead of default (OEM) and ASCII. * Added ability to stop same file being opened twice. Added date format to .ini file. * Added RUSHMORE, SMARTFILTER and OPTIMIZE settings to .ini file. Added file overwrite checking. * Added correct display of EOF instead of record number 1 for empty table * 22/04/2003 V2.03 James Loughner. * Added support to compile using version prior to 1.82. Added ability to compile so it acts like a * function instead of standalone application . See notes below. * 23/04/2003 V2.04 Jeremy Suiter. * Added maths functions count, sum and average. * 24/04/2003 V2.05 Jeremy Suiter. * Cell edit moves to next field in record on ENTER key being pressed. * Fixed modality problems with some popup windows. * ESC now closes popup windows. * Added menu for hotkey items * Fixed structure mod problems * 24/04/2003 V2.05 John Lau. * Fix problem of bombing out when exiting a browse after editing a memo field. * Fix problem of "APPQUIT" not defined when linking in versions with /dDBEDFUNCTION * 24/04/2003 V2.05 Jim Loughner. * Fix problem of Close push button (APPQUIT) when compiled with /dDBEDFUNCTION in utilities.prg * 30/11/2009 V2.06 Till Warweg * Closing modal dialogs no longer produces flickers. Corrected resize * management under Windows Vista, Windows 7. Misc. changes for * themes support (see $TW marks). * * Notice...: Copyright (c) 2003, Jeremy Suiter, All Rights Reserved * Copyright (c) 1999-2003, Alaska Software, All Rights Reserved (for code taken from ATSAG samples) * * There are some code examples/ideas used that were put on the Oasis or the ASTAG newsgroups. Grateful acknowledgement * goes to those people who posted those code/ideas. * Please feel free to use/modify this program as you would like. * * Notes....: Visual DbEditor main procedures /* * Linking with other apps * Compile all modules with -DDBEDFUNCTION to link with other applications * Call with DBEDITOR(DATAPATH,oOwner,defaultDBE) */ /* * Unremark the following line to compile with versions previous to 1.82. */ #Def MINUS182 #Include "Gra.ch" #Include "Xbp.ch" #Include "Appevent.ch" #Include "DbEditor.ch" #Include "Resources.ch" #Include "Dll.ch" #Include "Font.ch" #Include "Dmlb.ch" #Include "FoxDbe.ch" #Include "CdxDbe.ch" #Include "NtxDbe.ch" #Include "DbfDbe.ch" #Include "SdfDbe.ch" #Include "DelDbe.ch" Static lMenu #IfDef DBEDFUNCTION ************* Proc DbEditor(_cPath,_oOwner,_Dbe) ************* * main procedure modified to act as function JWL Local xFiles, nEvent:=Nil, mp1:=Nil, mp2:=Nil, oXbp:=Nil, oHelp:=Nil, aFiles:={}, oDlg, nSeconds Begin Sequence Public cDBE, cExtension:="DBF", cExtDesc:="DBF Files", cDirectory:=_Cpath, oFocusBrowse:=Nil, cFile:=Nil, cPath:=Nil, lShowDeleted:=.T., lMultiUser:=.T., ; cUpperCase:="CCODE,PCODE", aRelations:={},Ok2loop := .T., lEditable := .t. DBAppSys(_oOwner) #Else ********* Proc Main ********* * main procedure Local nEvent:=Nil, mp1:=Nil, mp2:=Nil, oXbp:=Nil, oHelp:=Nil, aFiles:={}, nSeconds Parameters xFiles Begin Sequence Public cDBE:="", cExtension:="", cExtDesc:="", cDirectory:="", oFocusBrowse:=Nil, cFile:=Nil, cPath:=Nil, lShowDeleted, lMultiUser, ; cUpperCase:="", aRelations:={}, lEditable := .t. #EndIf If !xFiles==Nil aFiles:=ListToArray(xFiles) EndIf SetCancel(.F.) SET EXCLUSIVE OFF SET CENTURY ON SET EPOCH TO 1990 // load ini file settings LoadIniSettings() #IfDef DBEDFUNCTION If _DBE != NIL cDBE := _Dbe // overload the INIT settings EndIf If _Cpath != NIL cDirectory:=_Cpath EndIf SetAppWindow():close:={|mp1,mp2,obj| obj:Destroy(),Ok2Loop := .F. } #Else SetAppWindow():close:={|mp1,mp2,obj| AppQuit() } #EndIf PostAppEvent(xbeP_Resize,,,SetAppWindow()) // start tooltip help system oHelp:=MagicHelp():New() oHelp:start() // default lMenu to .T. so utilities menu is disabled lMenu:=.T. nSeconds:=Seconds() #IfDef DBEDFUNCTION Do While Ok2Loop // new quit exit loop when false JWL #Else Do While .T. #EndIf nEvent:=AppEvent(@mp1, @mp2, @oXbp) oXbp:handleEvent(nEvent, mp1, mp2) If oFocusBrowse==Nil .And. lMenu DisableXbp(SetAppWindow(), ID_UTILS_MENU ) lMenu:=.F. ElseIf !oFocusBrowse==Nil .And. !lMenu EnableXbp(SetAppWindow(), ID_UTILS_MENU ) lMenu:=.T. EndIf If Len(aFiles)>0 .And. (Seconds()-nSeconds)>=0.1 Openfile(SetAppWindow(),aFiles[1]) ARemove(aFiles) EndIf EndDo Sleep(50) // give time for magic help to quit End Return #IfDef DBEDFUNCTION ************* Func DBAppSys(oOwner) ************* * JWL modifed to set owner to calling dialog Local oDlg, oXbp, aPos[2], aSize:={} Begin Sequence // Get size of desktop window to center the application window aSize:=SetAppWindow():currentSize() aSize[1]:=aSize[1]*0.80 aSize[2]:=aSize[2]*0.80 aPos:=CenterPos(aSize,SetAppWindow():currentSize()) // Create application window oDlg:=XbpMainDialog():New(AppDesktop(), oOwner, aPos, aSize, , .F.) oDlg:icon:=ICON_MAIN oDlg:title:=TITLE oDlg:border:=XBPDLG_RAISEDBORDERTHIN oDlg:taskList:=.T. oDlg:maxButton:=.T. oDlg:minButton:=.T. oDlg:Movewithowner := .T. oDlg:create() // Select font/background colour oDlg:drawingArea:SetFontCompoundName("8.Helv") oDlg:drawingArea:SetColorBG(XBPSYSCLR_APPWORKSPACE) // Create menu system MenuCreate(oDlg, oDlg:menuBar()) // add toolbar AddToolBar(oDlg) // Provide online help oXbp:=XbpHelpLabel():new():create() oXbp:helpObject:=HelpObject("Visual DbEditor.hlp", "Help For Visual DbEditor") oDlg:helpLink:=oXbp // Display application window and set focus to it oDlg:show() SetAppWindow(oDlg) SetAppFocus(oDlg) End Return oDlg #Else *********** Func AppSys() *********** Local oDlg, oXbp, aPos[2], aSize:={} Begin Sequence // Get size of desktop window to center the application window aSize:=SetAppWindow():currentSize() aSize[1]:=aSize[1]*0.80 aSize[2]:=aSize[2]*0.80 aPos:=CenterPos(aSize,SetAppWindow():currentSize()) // Create application window oDlg:=XbpMainDialog():New(AppDesktop(), SetAppWindow(), aPos, aSize, , .F.) oDlg:icon:=ICON_MAIN oDlg:title:=TITLE oDlg:border:=XBPDLG_RAISEDBORDERTHIN oDlg:taskList:=.T. oDlg:maxButton:=.T. oDlg:minButton:=.T. oDlg:create() // Select font/background colour oDlg:drawingArea:SetFontCompoundName("8.Helv") oDlg:drawingArea:SetColorBG(XBPSYSCLR_APPWORKSPACE) // Create menu system MenuCreate(oDlg, oDlg:menuBar()) // add toolbar AddToolBar(oDlg) // Provide online help oXbp:=XbpHelpLabel():new():create() oXbp:helpObject:=HelpObject("Visual DbEditor.hlp", "Help For Visual DbEditor") oDlg:helpLink:=oXbp // Display application window and set focus to it oDlg:show() SetAppWindow(oDlg) SetAppFocus(oDlg) End Return Nil *********** Proc DbeSys() *********** * Load and build all DBE's Local x Local aDbes:={{"DBFDBE", .T.}, ; {"NTXDBE", .T.}, ; {"CDXDBE", .T.}, ; {"DELDBE", .F.}, ; {"SDFDBE", .F.}, ; {"FOXDBE", .T.}} Local aBuild :={{"DBFNTX", 1, 2},; {"DBFCDX", 1, 3},; {"FOXCDX", 6, 3},; {"FOXNTX", 6, 2}, ; {"SDFNTX", 5, 2}, ; {"SDFCDX", 5, 3}, ; {"DELNTX", 4, 2}, ; {"DELCDX", 4, 3}} Begin Sequence // load DBE's For x:=1 To Len(aDbes) If !DbeLoad(aDbes[x][1], aDbes[x][2]) Errm(aDbes[x][1]+" DBE not loaded") EndIf Next x // build database engines For x:=1 To Len(aBuild) If !DbeBuild(aBuild[x][1], aDbes[aBuild[x][2]][1], aDbes[aBuild[x][3]][1]) Errm(aBuild[x][1]+" DBE not built") EndIf Next x End Return #EndIf *************** Func HelpObject(cHelpFile,cTitle) *************** Static soHelp:=Nil Begin Sequence If soHelp==NIL soHelp:=XbpHelp():new() soHelp:resGeneralHelp:=ID_HELP_GENERAL soHelp:resKeysHelp:=ID_HELP_KEYS soHelp:create(SetAppWindow(),cHelpFile,cTitle) EndIf End Return soHelp #IfNDef DBEDFUNCTION ************ Proc AppQuit() ************ Begin Sequence If YesNo("Do you really want to exit","Exit") DbCloseAll() QUIT EndIf End Return #EndIf ******************** Func LoadIniSettings() ******************** * load ini file settings Local aIniFile:={} Begin Sequence aIniFile:=IniLoad("DbEditor.ini") // Default file extension cExtension:=IniGet(aIniFile, "DEFAULTS", "TABLE_EXT") cExtDesc:=IniGet(aIniFile, "DEFAULTS", "EXT_DESC") // Default data directory cDirectory:=IniGet(aIniFile, "DEFAULTS", "DATA_DIR") // Default DBE and settings cDBE:=IniGet(aIniFile, "DEFAULTS", "DBE") DbeSetDefault(cDBE) LoadDbeSettings(aIniFile) // deleted status If IniGet(aIniFile, "DEFAULTS", "SET_DELETED")="On" lShowDeleted:=.F. Set Deleted On Else lShowDeleted:=.T. Set Deleted Off EndIf // multi user status If IniGet(aIniFile, "DEFAULTS", "MULTI_USER")="True" lMultiUser:=.T. Else lMultiUser:=.F. EndIf // uppercase field definitions cUpperCase:=IniGet(aIniFile, "DEFAULTS", "UPPER_CASE") // collation and charset setting Set(_SET_COLLATION, GetDefine(IniGet(aIniFile, "DEFAULTS", "COLLATION"))) Set(_SET_CHARSET, GetDefine(IniGet(aIniFile, "DEFAULTS", "CHARSET"))) // rushmore Set(_SET_RUSHMORE, IniGet(aIniFile, "DEFAULTS", "RUSHMORE")) // smart filtering Set(_SET_SMARTFILTER, IniGet(aIniFile, "DEFAULTS", "SMARTFILTER")) // optimize Set(_SET_OPTIMIZE, IniGet(aIniFile, "DEFAULTS", "OPTIMIZE")) // date format Set(_SET_DATEFORMAT, IniGet(aIniFile, "DEFAULTS", "DATE_FORMAT")) SetAppWindow():oInfoLine:SetCaption(IIf(lMultiUser,"MULTI-USER","NON MULTI-USER")+", "+"SET DELETED "+IIf(lShowDeleted,"ON","OFF")) End Return Nil ******************** Func LoadDbeSettings(aIniFile) ******************** * load DBE settings from ini file Local nCount:=1, cTemp:="", nDefine:="", nSetting1:="", nSetting2:=Nil Begin Sequence Do While .T. cTemp:=IniGet(aIniFile, cDbe, "SETTING"+Ntrim(nCount)) If Empty(cTemp) Exit EndIf nDefine:=GetDefine(Left(cTemp,At(",",cTemp)-1)) nSetting1:=GetDefine(SubStr(cTemp,At(",",cTemp)+1,Rat(",",cTemp)-At(",",cTemp)-1)) nSetting2:=Right(cTemp,Len(cTemp)-Rat(",",cTemp)) If nSetting2=".F." nSetting2:=.F. ElseIf nSetting2=".T." nSetting2:=.T. Else nSetting2:=Iif(GetDefine(nSetting2)==0,Val(nSetting2),GetDefine(nSetting2)) EndIf DbeInfo(nDefine,nSetting1,nSetting2) nCount++ EndDo End Return Nil ************** Func GetDefine(cDefine) ************** * Return correct define Local nRetVal:=0, nScan #IfDef MINUS182 Local aDefines:={ {"CDXDBE_COMIX" , CDXDBE_COMIX }, ; {"CDXDBE_FOXPRO2X" , CDXDBE_FOXPRO2X }, ; {"CDXDBE_LIFETIME" , CDXDBE_LIFETIME }, ; {"CDXDBE_LOCKDELAY" , CDXDBE_LOCKDELAY }, ; {"CDXDBE_LOCKDELAY_MIN" , CDXDBE_LOCKDELAY_MIN }, ; {"CDXDBE_LOCKOFFSET" , CDXDBE_LOCKOFFSET }, ; {"CDXDBE_LOCKRETRY" , CDXDBE_LOCKRETRY }, ; {"CDXDBE_LOCKRETRY_MIN" , CDXDBE_LOCKRETRY_MIN }, ; {"CDXDBE_MODE" , CDXDBE_MODE }, ; {"CDXDBE_SIX3" , CDXDBE_SIX3 }, ; {"CDXDBE_VFOXPRO" , CDXDBE_VFOXPRO }, ; {"COLLAT_SYSTEM" , COLLAT_SYSTEM }, ; {"COLLAT_GERMAN" , COLLAT_GERMAN }, ; {"COLLAT_BRITISH" , COLLAT_BRITISH }, ; {"COLLAT_AMERICAN" , COLLAT_AMERICAN }, ; {"COLLAT_FINNISH" , COLLAT_FINNISH }, ; {"COLLAT_FRENCH" , COLLAT_FRENCH }, ; {"COLLAT_DANISH" , COLLAT_DANISH }, ; {"COLLAT_GREEK437" , COLLAT_GREEK437 }, ; {"COLLAT_GREEK851" , COLLAT_GREEK851 }, ; {"COLLAT_ICELANDIC850" , COLLAT_ICELANDIC850 }, ; {"COLLAT_ICELANDIC861" , COLLAT_ICELANDIC861 }, ; {"COLLAT_ITALIAN" , COLLAT_ITALIAN }, ; {"COLLAT_NORWEGIAN" , COLLAT_NORWEGIAN }, ; {"COLLAT_PORTUGUESE" , COLLAT_PORTUGUESE }, ; {"COLLAT_SPANISH" , COLLAT_SPANISH }, ; {"COLLAT_SWEDISH" , COLLAT_SWEDISH }, ; {"COLLAT_DUTCH" , COLLAT_DUTCH }, ; {"COLLAT_USER" , COLLAT_USER }, ; {"COLLAT_ASCII" , COLLAT_ASCII }, ; {"COMPONENT_DATA" , COMPONENT_DATA }, ; {"COMPONENT_ORDER" , COMPONENT_ORDER }, ; {"DBE_DATATYPES" , DBE_DATATYPES }, ; {"DBE_EXTENSION" , DBE_EXTENSION }, ; {"DBE_LOCKMODE" , DBE_LOCKMODE }, ; {"DBE_MANUFACTURER" , DBE_MANUFACTURER }, ; {"DBE_NAME" , DBE_NAME }, ; {"DBE_VERSION" , DBE_VERSION }, ; {"DELDBE_AUTOFIELD" , DELDBE_AUTOFIELD }, ; {"DELDBE_DECIMAL_TOKEN" , DELDBE_DECIMAL_TOKEN }, ; {"DELDBE_DELIMITER_TOKEN" , DELDBE_DELIMITER_TOKEN }, ; {"DELDBE_FIELD_TOKEN" , DELDBE_FIELD_TOKEN }, ; {"DELDBE_FIELD_TYPES" , DELDBE_FIELD_TYPES }, ; {"DELDBE_LOGICAL_TOKEN" , DELDBE_LOGICAL_TOKEN }, ; {"DELDBE_MAX_BUFFERSIZE" , DELDBE_MAX_BUFFERSIZE }, ; {"DELDBE_MODE" , DELDBE_MODE }, ; {"DELDBE_MULTIFIELD" , DELDBE_MULTIFIELD }, ; {"DELDBE_RECORD_TOKEN" , DELDBE_RECORD_TOKEN }, ; {"DELDBE_SINGLEFIELD" , DELDBE_SINGLEFIELD }, ; {"DELDBO_MODE" , DELDBO_MODE }, ; {"FOXDBE_CACHESIZE" , FOXDBE_CACHESIZE }, ; {"FOXDBE_CREATE_2X" , FOXDBE_CREATE_2X }, ; {"FOXDBE_LIFETIME" , FOXDBE_LIFETIME }, ; {"FOXDBE_LOCKDELAY" , FOXDBE_LOCKDELAY }, ; {"FOXDBE_LOCKDELAY_MIN" , FOXDBE_LOCKDELAY_MIN }, ; {"FOXDBE_LOCKMODE" , FOXDBE_LOCKMODE }, ; {"FOXDBE_LOCKMODE_2X" , FOXDBE_LOCKMODE_2X }, ; {"FOXDBE_LOCKMODE_AUTO" , FOXDBE_LOCKMODE_AUTO }, ; {"FOXDBE_LOCKMODE_VISUAL" , FOXDBE_LOCKMODE_VISUAL }, ; {"FOXDBE_LOCKOFFSET" , FOXDBE_LOCKOFFSET }, ; {"FOXDBE_LOCKRETRY" , FOXDBE_LOCKRETRY }, ; {"FOXDBE_LOCKRETRY_MIN" , FOXDBE_LOCKRETRY_MIN }, ; {"FOXDBE_MEMOBLOCKSIZE" , FOXDBE_MEMOBLOCKSIZE }, ; {"FOXDBE_MEMOFILE_EXT" , FOXDBE_MEMOFILE_EXT }, ; {"NTXDBE_LOCKDELAY" , NTXDBE_LOCKDELAY }, ; {"NTXDBE_LOCKDELAY_MIN" , NTXDBE_LOCKDELAY_MIN }, ; {"NTXDBE_LOCKOFFSET" , NTXDBE_LOCKOFFSET }, ; {"NTXDBE_LOCKRETRY" , NTXDBE_LOCKRETRY }, ; {"NTXDBE_LOCKRETRY_MIN" , NTXDBE_LOCKRETRY_MIN }, ; {"NTXDBE_SIGN" , NTXDBE_SIGN }, ; {"SDFDBE_AUTOCREATION" , SDFDBE_AUTOCREATION }, ; {"SDFDBE_DECIMAL_TOKEN" , SDFDBE_DECIMAL_TOKEN }, ; {"SDFDBE_LOGICAL_TOKEN" , SDFDBE_LOGICAL_TOKEN }, ; {"SDFDBE_STRUCTURE_EXT" , SDFDBE_STRUCTURE_EXT }, ; {"SDFDBO_DECIMAL_TOKEN" , SDFDBO_DECIMAL_TOKEN }, ; {"SDFDBO_LOGICAL_TOKEN" , SDFDBO_LOGICAL_TOKEN } } #Else Local aDefines:={ {"CDXDBE_COMIX" , CDXDBE_COMIX }, ; {"CDXDBE_FOXPRO2X" , CDXDBE_FOXPRO2X }, ; {"CDXDBE_LIFETIME" , CDXDBE_LIFETIME }, ; {"CDXDBE_LOCKDELAY" , CDXDBE_LOCKDELAY }, ; {"CDXDBE_LOCKDELAY_MIN" , CDXDBE_LOCKDELAY_MIN }, ; {"CDXDBE_LOCKOFFSET" , CDXDBE_LOCKOFFSET }, ; {"CDXDBE_LOCKRETRY" , CDXDBE_LOCKRETRY }, ; {"CDXDBE_LOCKRETRY_MIN" , CDXDBE_LOCKRETRY_MIN }, ; {"CDXDBE_MODE" , CDXDBE_MODE }, ; {"CDXDBE_SIX3" , CDXDBE_SIX3 }, ; {"CDXDBE_VFOXPRO" , CDXDBE_VFOXPRO }, ; {"CDXORD_COLLATION" , CDXORD_COLLATION }, ; {"CDXORD_KEYTYPE" , CDXORD_KEYTYPE }, ; {"CDXORD_LOCKMODE" , CDXORD_LOCKMODE }, ; {"CDXORD_MODE" , CDXORD_MODE }, ; {"COLLAT_SYSTEM" , COLLAT_SYSTEM }, ; {"COLLAT_GERMAN" , COLLAT_GERMAN }, ; {"COLLAT_BRITISH" , COLLAT_BRITISH }, ; {"COLLAT_AMERICAN" , COLLAT_AMERICAN }, ; {"COLLAT_FINNISH" , COLLAT_FINNISH }, ; {"COLLAT_FRENCH" , COLLAT_FRENCH }, ; {"COLLAT_DANISH" , COLLAT_DANISH }, ; {"COLLAT_GREEK437" , COLLAT_GREEK437 }, ; {"COLLAT_GREEK851" , COLLAT_GREEK851 }, ; {"COLLAT_ICELANDIC850" , COLLAT_ICELANDIC850 }, ; {"COLLAT_ICELANDIC861" , COLLAT_ICELANDIC861 }, ; {"COLLAT_ITALIAN" , COLLAT_ITALIAN }, ; {"COLLAT_NORWEGIAN" , COLLAT_NORWEGIAN }, ; {"COLLAT_PORTUGUESE" , COLLAT_PORTUGUESE }, ; {"COLLAT_SPANISH" , COLLAT_SPANISH }, ; {"COLLAT_SWEDISH" , COLLAT_SWEDISH }, ; {"COLLAT_DUTCH" , COLLAT_DUTCH }, ; {"COLLAT_USER" , COLLAT_USER }, ; {"COLLAT_ASCII" , COLLAT_ASCII }, ; {"COMPONENT_DATA" , COMPONENT_DATA }, ; {"COMPONENT_ORDER" , COMPONENT_ORDER }, ; {"DBE_DATATYPES" , DBE_DATATYPES }, ; {"DBE_EXTENSION" , DBE_EXTENSION }, ; {"DBE_LOCKMODE" , DBE_LOCKMODE }, ; {"DBE_MANUFACTURER" , DBE_MANUFACTURER }, ; {"DBE_NAME" , DBE_NAME }, ; {"DBE_VERSION" , DBE_VERSION }, ; {"DELDBE_AUTOFIELD" , DELDBE_AUTOFIELD }, ; {"DELDBE_DECIMAL_TOKEN" , DELDBE_DECIMAL_TOKEN }, ; {"DELDBE_DELIMITER_TOKEN" , DELDBE_DELIMITER_TOKEN }, ; {"DELDBE_FIELD_TOKEN" , DELDBE_FIELD_TOKEN }, ; {"DELDBE_FIELD_TYPES" , DELDBE_FIELD_TYPES }, ; {"DELDBE_LOGICAL_TOKEN" , DELDBE_LOGICAL_TOKEN }, ; {"DELDBE_MAX_BUFFERSIZE" , DELDBE_MAX_BUFFERSIZE }, ; {"DELDBE_MODE" , DELDBE_MODE }, ; {"DELDBE_MULTIFIELD" , DELDBE_MULTIFIELD }, ; {"DELDBE_RECORD_TOKEN" , DELDBE_RECORD_TOKEN }, ; {"DELDBE_SINGLEFIELD" , DELDBE_SINGLEFIELD }, ; {"DELDBO_MODE" , DELDBO_MODE }, ; {"FOXDBE_CACHESIZE" , FOXDBE_CACHESIZE }, ; {"FOXDBE_CREATE_2X" , FOXDBE_CREATE_2X }, ; {"FOXDBE_LIFETIME" , FOXDBE_LIFETIME }, ; {"FOXDBE_LOCKDELAY" , FOXDBE_LOCKDELAY }, ; {"FOXDBE_LOCKDELAY_MIN" , FOXDBE_LOCKDELAY_MIN }, ; {"FOXDBE_LOCKMODE" , FOXDBE_LOCKMODE }, ; {"FOXDBE_LOCKMODE_2X" , FOXDBE_LOCKMODE_2X }, ; {"FOXDBE_LOCKMODE_AUTO" , FOXDBE_LOCKMODE_AUTO }, ; {"FOXDBE_LOCKMODE_VISUAL" , FOXDBE_LOCKMODE_VISUAL }, ; {"FOXDBE_LOCKOFFSET" , FOXDBE_LOCKOFFSET }, ; {"FOXDBE_LOCKRETRY" , FOXDBE_LOCKRETRY }, ; {"FOXDBE_LOCKRETRY_MIN" , FOXDBE_LOCKRETRY_MIN }, ; {"FOXDBE_MEMOBLOCKSIZE" , FOXDBE_MEMOBLOCKSIZE }, ; {"FOXDBE_MEMOFILE_EXT" , FOXDBE_MEMOFILE_EXT }, ; {"ISOLATIONLEVEL_READ_COMMITED" , ISOLATIONLEVEL_READ_COMMITED }, ; {"ISOLATIONLEVEL_READ_REPEATABLE", ISOLATIONLEVEL_READ_REPEATABLE}, ; {"ISOLATIONLEVEL_READ_UNCOMMITED", ISOLATIONLEVEL_READ_UNCOMMITED}, ; {"ISOLATIONLEVEL_SERIALIZABLE" , ISOLATIONLEVEL_SERIALIZABLE }, ; {"ISOLATIONLEVEL_SNAPSHOT" , ISOLATIONLEVEL_SNAPSHOT }, ; {"ISOLATIONLEVEL_UNUSED1" , ISOLATIONLEVEL_UNUSED1 }, ; {"ISOLATIONLEVEL_UNUSED2" , ISOLATIONLEVEL_UNUSED2 }, ; {"ISOLATIONLEVEL_UNUSED3" , ISOLATIONLEVEL_UNUSED3 }, ; {"LOCKING_EXCLUSIVE" , LOCKING_EXCLUSIVE }, ; {"LOCKING_EXTENDED" , LOCKING_EXTENDED }, ; {"LOCKING_FORCESINGLE" , LOCKING_FORCESINGLE }, ; {"LOCKING_SHARED" , LOCKING_SHARED }, ; {"LOCKING_UPDATE" , LOCKING_UPDATE }, ; {"NTXDBE_LOCKDELAY" , NTXDBE_LOCKDELAY }, ; {"NTXDBE_LOCKDELAY_MIN" , NTXDBE_LOCKDELAY_MIN }, ; {"NTXDBE_LOCKOFFSET" , NTXDBE_LOCKOFFSET }, ; {"NTXDBE_LOCKRETRY" , NTXDBE_LOCKRETRY }, ; {"NTXDBE_LOCKRETRY_MIN" , NTXDBE_LOCKRETRY_MIN }, ; {"NTXDBE_SIGN" , NTXDBE_SIGN }, ; {"SDFDBE_AUTOCREATION" , SDFDBE_AUTOCREATION }, ; {"SDFDBE_DECIMAL_TOKEN" , SDFDBE_DECIMAL_TOKEN }, ; {"SDFDBE_LOGICAL_TOKEN" , SDFDBE_LOGICAL_TOKEN }, ; {"SDFDBE_STRUCTURE_EXT" , SDFDBE_STRUCTURE_EXT }, ; {"SDFDBO_DECIMAL_TOKEN" , SDFDBO_DECIMAL_TOKEN }, ; {"SDFDBO_LOGICAL_TOKEN" , SDFDBO_LOGICAL_TOKEN } } #EndIf Begin Sequence nScan:=Ascan(aDefines,{|aE| aE[1]==cDefine}) If !nScan==0 nRetVal:=aDefines[nScan,2] EndIf End Return nRetVal