Форум » [x]Harbour » "M" => "C" » Ответить

"M" => "C"

Dima: Может кто писал такое , не хочется велик изобретать. Нужно просканировать папку(текущую) с DBF файлами. Выяснить в каких их них есть MEMO поля , при чем в одном DBF может быть не одно MEMO поле. И затем MEMO поля преобразовать в тип "C" с длиной 250 (не убив при этом базы) ;)

Ответов - 4

SergKis: была рыба, на подобное:[pre2] lSet := Set( _SET_DELETED, .F. ) aDir := Directory(cPath+"*.dbf") nK := len(aDir) FOR nI := 1 TO nK cFile := aDir[ nI ][1] USE ( cPath + cFile ) NEW ALIAS INP nInp := select() aStru := dbStruct() dbGotop() nM := AScan(aStru, {|x| x[2] == 'M' }) // memo поле есть\нет IF nM > 0 k := len(aStru) FOR i := 1 TO k IF aStru[ i ][2] == 'M' aStru[ i ][2] := 'C' aStru[ i ][3] := 250 ENDIF NEXT ENDIF dbCreate(cPath+'_'+cFile, aStru, 'DBFCDX', .T., 'OUT') DO WHILE ! ( nInp )->( EOF() ) dbAppend() FOR i := 1 TO k FieldPut(i, ( nInp )->( FieldGet(i) )) NEXT IF ( nInp )->( deleted() ); dbDelete() ENDIF ( nInp )->( dbSkip(1) ) ENDDO dbCloseArea() ( nInp )->( dbCloseArea() ) NEXT Set( _SET_DELETED, lSet ) // SET DELETED OFF [/pre2]

Andrey: Не писал... Но думаю придётся тебе из базы в базу копировать чтобы данные не потерялись... aStru := dbStruct() nMemo := 0 ; aEval(aStru, {|x,e| nMemo += iif(x[2] == 'M', 1, 0)}) // кол-во МЕМО-полей в БД IF nMemo > 0 DO WHILE ! EOF() FOR i := 1 to len(aStru) IF aStru[ i ][2] == 'M' j := FieldGet(i) // твоя обработка ENDIF NEXT SKIP ENDDO ENDIF

SergKis: PS. IF nM > 0 k := len(aStru) строки поменять местами k := len(aStru) IF nM > 0


Dima: SergKis Спасибо , самое оно. Довел слегка только.



полная версия страницы