Por conta disso, este ficou meio complicado.....
WITH OBJECT cnSQL
// jpdecreto
IF AppVersaoDBFAnt() < 20200822
IF :TableExists( "JPDECRET" )
:ExecuteCmd( "RENAME TABLE JPDECRET TO JPDECRETO" )
ENDIF
ENDIF
IF AppVersaoDBFAnt() < AppVersaoDBF()
SayScroll( "JPDECRETO.SQL" )
:ExecuteCmd( ;
"CREATE TABLE IF NOT EXISTS JPDECRETO ( " + ;
"IDDECRETO INT(11) NOT NULL AUTO_INCREMENT, " + ;
"DENOME VARCHAR(50) NULL DEFAULT '', " + ;
"DETEXTO VARCHAR(800) NOT NULL DEFAULT '', " + ;
"DEINFINC VARCHAR(80) NULL DEFAULT '', " + ;
"DEINFALT VARCHAR(80) NULL DEFAULT '', " + ;
"PRIMARY KEY ( IDDECRETO ) " + ;
") COLLATE=latin1_swedish_ci ENGINE=InnoDB" )
ENDIF
IF AppVersaoDBFAnt() < 20200302
IF :FieldExists( "DENUMLAN", "JPDECRETO" )
:ExecuteCmd( "ALTER TABLE JPDECRETO DROP COLUMN DEID, DROP PRIMARY KEY, " + ;
"CHANGE COLUMN DENUMLAN IDDECRETO INT(11) NOT NULL AUTO_INCREMENT, " + ;
"ADD PRIMARY KEY ( IDDECRETO )" )
ENDIF
:ExecuteCmd( "ALTER TABLE JPDECRETO CHANGE COLUMN IDDECRETO IDDECRETO INT(11) NOT NULL AUTO_INCREMENT" )
ENDIF
IF AppVersaoDBFAnt() < 20200801
:ExecuteCmd( "ALTER TABLE JPDECRETO CHANGE COLUMN IDDECRETO IDDECRETO INT(11) NOT NULL AUTO_INCREMENT" )
ENDIF
IF AppVersaoDBFAnt() < 20200822
IF ! :FieldExists( "DETEXTO", "JPDECRETO" )
IF :FieldExists( "DEDESCRICAO", "JPDECRETO" )
:ExecuteCmd( "ALTER TABLE JPDECRETO CHANGE COLUMN DEDESCRICAO DETEXTO VARCHAR(800) NOT NULL DEFAULT ''" )
ELSE
:ExecuteCmd( "ALTER TABLE JPDECRETO ADD COLUMN DETEXTO VARCHAR(800) NOT NULL DEFAULT ''" )
ENDIF
ENDIF
IF :FieldExists( "DEDESCR1", "JPDECRETO" )
:ExecuteCmd( "ALTER TABLE JPDECRETO CHANGE COLUMN DEDESCR1 DEDESCR1 VARCHAR(250) NOT NULL DEFAULT ''" )
:ExecuteCmd( "ALTER TABLE JPDECRETO CHANGE COLUMN DEDESCR2 DEDESCR2 VARCHAR(250) NOT NULL DEFAULT ''" )
:ExecuteCmd( "ALTER TABLE JPDECRETO CHANGE COLUMN DEDESCR3 DEDESCR3 VARCHAR(250) NOT NULL DEFAULT ''" )
:ExecuteCmd( "ALTER TABLE JPDECRETO CHANGE COLUMN DEDESCR4 DEDESCR4 VARCHAR(250) NOT NULL DEFAULT ''" )
:ExecuteCmd( "ALTER TABLE JPDECRETO CHANGE COLUMN DEDESCR5 DEDESCR5 VARCHAR(250) NOT NULL DEFAULT ''" )
:ExecuteCmd( "UPDATE JPDECRETO SET DETEXTO = TRIM( CONCAT_WS( ' ', DEDESCR1, DEDESCR2, DEDESCR3, DEDESCR4, DEDESCR5 ) )" )
:ExecuteCmd( "ALTER TABLE JPDECRETO DROP COLUMN DEDESCR1, DROP COLUMN DEDESCR2," + ;
" DROP COLUMN DEDESCR3, DROP COLUMN DEDESCR4, DROP COLUMN DEDESCR5" )
ENDIF
IF :IndexExists( "NOME", "JPDECRETO" )
:ExecuteCmd( "ALTER TABLE JPDECRETO DROP INDEX NOME" )
ENDIF
IF :FieldExists( "DEDESCRICAO", "JPDECRETO" )
:ExecuteCmd( "ALTER TABLE JPDECRETO CHANGE COLUMN DEDESCRICAO DENOME VARCHAR(50) NOT NULL DEFAULT ''" )
ENDIF
ENDIF
ENDWITH
As mudanças de idéia mal definidas.....
Era DENOME, DEDESCRI1, DEDESCR2, DEDESCR3, DEDESCR4, DEDESCR5
Depois DENOME, DEDESCRICAO
Depois DENOME, DETEXTO
Depois DEDESCRICAO, DETEXTO
Agora DENOME, DETEXTO
Fiz o seguinte:
Primeira parte: DETEXTO
a)se NÃO existe DETEXTO, não existe DEDESCRICAO, sinal de que não fez a conversão de DEDESCR1,2,3,4,5, então cria e transfere e apaga DEDESCR1,2,3,4,5
b) não existe DETEXTO, mas existe DEDESCRICAO, sinal de que converteu, então só renomeia
c) Se existe DETEXTO, então não mexe
resolvido primeira parte sobre DETEXTO, sem destruir o outro campo
Segunda parte:
a) Existe DENOME, deixa como está
b) Existe DEDESCRICAO, renomeia pra DENOME
Parece complicado e perigoso, mas acho que dá.
A partir do momento que existe DETEXTO, DEDESCRICAO antigo deixa de existir, então a checagem principal é essa.
Esse se divide, porque a existência de DEDESCRICAO define se os campos DEDESCR1,2,3,4,5 foram convertidos, se não foram, converte agora.
Resolvida essa parte, só sobra que o outro campo pode ser DEDESCRICAO ou DENOME.
É por isso que quero eliminar conversões antigas.... fica cada vez mais perigoso ficar mantendo coisas assim....
E se for usado em índice... vixe... complicou um pouco mais...