>>*********************************************************************************** >>procedure DeleteFields >>*-------------------------------------------------------------------------- >>* -- RMM: 05/23/00 >>* -- This procedure compares the current table's fields with the fields in the >>* -- datadict. >>* -- If fields are found in the current table and not in the datadict, then assume >>* -- we need to delete these fields ... >>* -- This procedure is called before we do the modify (alter table) commands >>*-------------------------------------------------------------------------- >>lparameters tcTableName >>local lnOldSelect, lcCommandDel, lnCount, lcMessDel, lcMessDelIndx, ; >> lcOldError, llError, lcTag, lcOldMessage, llDel >>lnOldSelect=select() >>if !oValid.lContinue && Don't continue >> return >>endif >>create cursor oldTab (FldName C(128)) >>insert into oldTab from array laFields && Array of fields in a table >>** Find fields, which should be deleted >>store '' to lcCommandDel, lcMessDel, lcMessDelIndx >>select * ; >> from oldTab ; >> where FldName not in ; >> (select Field_Name from DataDict where &tcTableName>0) ; >> into cursor curTemp >> >>if _tally > 0 >> select curTemp >> scan >> if !oValid.lContinue >> return >> endif >> lcCommandDel =lcCommandDel+ " DROP COLUMN " + lower(alltrim(curTemp.FldName)) >> lcMessDel=lcMessDel+alltrim(curTemp.FldName)+',' >> endscan >> suspend >> set message to 'Deleting fields: '+left(lcMessDel,len(lcMessDel)-1) >> =messagebox(lcCommandDel) >> lcOldError=on('error') >> on error llError = .t. >> alter table (tcTableName) &lcCommandDel >> do while llError >> =aerror(laError) >> if laError[1,1] = 1531 && cannot drop field because of index >> lcTag = laError[1,3] >> delete tag (lcTag) >> llError = .f. >> alter table (tcTableName) &lcCommandDel >> else >> exit >> endif >> enddo >> if llError >>** Exited >> aerror(laError) >> =messagebox("Error: " + transform(laError[1,1])+chr(13)+; >> laError[1,2], 48) >> endif >> on error &lcOldError >> llDel=.t. >>else && Tally=0 no fields to delete >> llDel=.f. >>endif >>* Close no longer needed tables >>use in curTemp >>use in oldTab >>select (lnOldSelect) >>return llDel>>