marcio1361303176 Posted March 17, 2008 Report Share Posted March 17, 2008 Amigos Tem como modificar a Estrutura da Tabela(Mysql) Via Código(five), ou seja Colocar um Campo a mais, reduzir um campo de tamanho, excluir um campo, etc... Obrigado a Todos. masterservicevrb@gmail.com FWHX2.6+SQLLIB+xDev+rpv+ MYSQL Quote Link to comment Share on other sites More sharing options...
marcio1361303176 Posted March 17, 2008 Author Report Share Posted March 17, 2008 Amigos Tem como modificar a Estrutura da Tabela(Mysql) Via Código(five), ou seja Colocar um Campo a mais, reduzir um campo de tamanho, excluir um campo, etc... Obrigado a Todos. masterservicevrb@gmail.com FWHX2.6+SQLLIB+xDev+rpv+ MYSQL Quote Link to comment Share on other sites More sharing options...
toya Posted March 17, 2008 Report Share Posted March 17, 2008 Deduzo que estejas usando SqlLib... Veja se da pra te orientares por este: //////////////////////////////////////////////////////////////////////////////// // toya - 17/03/2008 //////////////////////////////////////////////////////////////////////////////// function AltStruSql( cTabela, aCampos, aCamposNovos ) local cCampo:='' local x:=0, nPos:=0 cCampo:='sql_rowid' for x=1 to len( aCampos ) if upper( alltrim( aCampos[x,1] ) )='SQL_ROWID' cCampo:=upper( alltrim( aCampos[x-1,1] ) ) nPos:=x-1 exit endif next for x=1 to len( aCamposNovos ) if ascan( aCampos, aCamposNovos[x,1] )>0 SQL EXECUTE 'ALTER TABLE '+cTabela+' MODIFY COLUMN '+aCamposNovos[x,1]+' '+aCamposNovos[x,2] else SQL EXECUTE 'ALTER TABLE '+cTabela+' ADD '+aCamposNovos[x,1]+' '+aCamposNovos[x,2]+' AFTER '+cCampo cCampo:=aCamposNovos[x,1] endif next return nil toya (Ahora en la version 5.8) toyasis@yahoo.com.br http://www.toyanet.com.br FWH 2.6+PellesC+xHarbour.org 0.99 - MySql 5.0.12 Beta - SqlLib - Rpv FW 2.4+WS 4.5+Blinker 7.0+Clipper 5.2E+Rpv Linux 2.4.29 - Slack 10.1 - (No@Say) Quote Link to comment Share on other sites More sharing options...
marcio1361303176 Posted March 17, 2008 Author Report Share Posted March 17, 2008 Olá amigo, obrigado pela ajuda Mas nada de funcionar Editado por - marcio on 17/03/2008 08:30:09 Quote Link to comment Share on other sites More sharing options...
vailtom Posted March 17, 2008 Report Share Posted March 17, 2008 Veja se as LIBs da SQL LIB RDD estão antes das do FWH. Quote Link to comment Share on other sites More sharing options...
marcio1361303176 Posted March 17, 2008 Author Report Share Posted March 17, 2008 estão marcadas pra SIM masterservicevrb@gmail.com FWHX2.6+SQLLIB+xDev+rpv+ MYSQL Quote Link to comment Share on other sites More sharing options...
alex2002 Posted March 17, 2008 Report Share Posted March 17, 2008 Olá, Segue função para tal. Lembrando que o array da estrutura tem que vir no formato SQL e não DBF. Ex: aEstrutura := {} aadd(aEstrutura, {"usuario", "char(3)", "NO", ""} ) aadd(aEstrutura, {"opcao", "char(10)", "NO", ""} ) VerificaEstrutura('acesso', aEstrutura ) ..... ////////////////////////////DADOS DA FUNCAO//////////////////////////////////////////// // NOME : VerificaEstrutura // // SINTESE : Verifica a Estrutura de uma tabela e corrige se necessário // // PARAMETROS : <1> cTabela // // <2> aEstrutura Correta // // RETORNO : lOk (se tudo ok) // /////////////////////////////////////////////////////////////////////////////////////// Function VerificaEstrutura( cTabela, aEstrutura ) local aEstruturaOld := {} local cCmdSql := '' local lRetorno := .t. local x, y cCmdSql := 'show columns from '+cTabela aEstruturaOld := SqlArray( cCmdSql ) for x = 1 to len( aEstrutura ) nEncontrado := Ascan( aEstruturaOld, {| y | upper(y[1]) = upper(aEstrutura[x,1]) } ) if nEncontrado <> 0 // Existe o campo, agora vai verificar se o campo está correto if aEstrutura[x,2] <> aEstruturaOld[nEncontrado,2] .or. aEstrutura[x,3] <> aEstruturaOld[nEncontrado,3] .or. ( aEstrutura[x,4] <> 'NULL' .and. aEstrutura[x,4] <> aEstruturaOld[nEncontrado,5] ) cCmdSql := 'alter table '+cTabela+' modify column '+aEstrutura[x,1]+' '+aEstrutura[x,2]+' '+if(aEstrutura[x,3]="NO","NOT NULL","NULL")+if( aEstrutura[x,4] <> 'NULL' ,' default "'+aEstrutura[x,4]+'"','') if !SqlExecute( cCmdSql ) lRetorno := .f. exit endif endif else cCmdSql := 'alter table '+cTabela+' add '+aEstrutura[x,1]+' '+aEstrutura[x,2]+' '+if(aEstrutura[x,3]="NO","NOT NULL","NULL")+if( aEstrutura[x,4] <> 'NULL',' default "'+aEstrutura[x,4]+'"','')+' after '+aEstruturaOld[len(aEstruturaOld)-2,1] if !SqlExecute( cCmdSql ) lRetorno := .f. exit endif endif next return lRetorno ps. Perdeu a IDENTAÇÃO Um abraço, Alexandre Pereira fwh 2.6, xharbour, .99.6, MyMake msn: alexpdasilva6@hotmail.com atualmente em Rondônia * ps 2 (não é playstation não) Editado pq a linha estava errada cCmdSql := 'alter table '+cTabela+' add '+aEstrutura[x,1]+' '+aEstrutura[x,2]+' '+if(aEstrutura[x,3]="NO","NOT NULL","NULL")+if( aEstrutura[x,4] <> 'NULL',' default "'+aEstrutura[x,4]+'"','')+' after '+aEstruturaOldid=red>[len(aEstruturaOld)-2,1] Tinha esquecido do OLD Editado por - alex2002 on 17/03/2008 21:33:27 Quote Link to comment Share on other sites More sharing options...
wmsoft Posted March 17, 2008 Report Share Posted March 17, 2008 toya para quem usa SQLRDD funciona também? Washington Guimarães Clipper 5.2 Lib 5.3 - Blinker 7.0 FWH 701, xHarbour 0.99.61 (Simplex) Quote Link to comment Share on other sites More sharing options...
marcio1361303176 Posted March 19, 2008 Author Report Share Posted March 19, 2008 Caro amigo alex2002 Obrigado pela ajuda, mas não deu certo, veja se Estou passando alguma coisa errado. Obrigado aEstrutura := {} aadd(aEstrutura, {"acesso", "char(03)", "NO", ""} ) aadd(aEstrutura, {"usuario", "int(06)" , "NO", ""} ) VerificaEstrutura('niveis', aEstrutura ) Será que está algo errado.... Obrigado masterservicevrb@gmail.com FWHX2.6+SQLLIB+xDev+rpv+ MYSQL Quote Link to comment Share on other sites More sharing options...
alex2002 Posted March 19, 2008 Report Share Posted March 19, 2008 olá. Veja bem, esta função é apenas para tabelas já existentes. Se a tabela não existir, primeiro vc tem que criá-la (dbcreate). Veja se é isso. Um abraço, Alexandre Pereira fwh 2.6, xharbour, .99.6, MyMake msn: alexpdasilva6@hotmail.com atualmente em Rondônia Quote Link to comment Share on other sites More sharing options...
marcio1361303176 Posted March 20, 2008 Author Report Share Posted March 20, 2008 Amigo, a tabela já Existe Sim , mas mesmo assim ele não nodificou... masterservicevrb@gmail.com FWHX2.6+SQLLIB+xDev+rpv+ MYSQL Quote Link to comment Share on other sites More sharing options...
Polirep Posted March 20, 2008 Report Share Posted March 20, 2008 Eu uso o dbcreate normal, com única diferença: Vc não pode incluir um campo que não seja na última posição, pois o SQLLIB mantem os campos SQL_ROWID e SQL_DELETED como os últimos da tabela.. nesse caso, vc não pode incluir um campo em uma tabela já existente, entre os campos que já existem. Alexandre (Polirep) Belo Horizonte / MG alexandrepolirep@hotmail.com Quote Link to comment Share on other sites More sharing options...
evandro Posted March 21, 2008 Report Share Posted March 21, 2008 Olá, Márcio, verifique se após a execução da rotina não gerou um arquivo SQLLOG.TXT. Se tiver algum problema na execução da query este arquivo registra. []s, Evandro G. de Paula Curvelo - MG evandro@skillnet.com.br (Escr. - na Cidade) imortal@skillnet.com.br (Res. - na Roça) FWH 2.6+PellesC+MyMake+xHarbour.org 0.99.5+SqlLib I PREPARATÓRIO PARA O VI ENCONTRO FIVEWIN - JULHO/2008 - CURVELO - MG Quote Link to comment Share on other sites More sharing options...
marcio1361303176 Posted March 22, 2008 Author Report Share Posted March 22, 2008 Desta forma funcionou local cCmdSql := '' cCmdSql :='CREATE TABLE IPTU (tempo2 CHAR(18) )' Serve pra criar uma Tabela cCmdSql := 'alter table acesso add tempo2 CHAR(18)' coloca um novo campo na tabela cCmdSql := 'alter table '+'acesso'+' modify column '+ 'tempo2 CHAR(58)' modifica um campo já existente *=========================== SqlExecute( cCmdSql ) executa o comando conforme descrito acima masterservicevrb@gmail.com FWHX2.6+SQLLIB+xDev+rpv+ MYSQL Quote Link to comment Share on other sites More sharing options...
alex2002 Posted March 24, 2008 Report Share Posted March 24, 2008 Olá, Conforme citei anteriormente, esta função serve apenas para tabelas criadas pelo DBCREATE(). Pq todas as tabelas criadas pelo DBCREATE com a SqlLib possui os campos Sql_RowId e Sql_deleted. Sendo assim, esta função está preparada apenas para trabalhar com este tipo de tabela. Se vc quiser que ela trabalhe com tabelas que não possui estes campos, basta tirar o -2 que eu coloquei após o "after". Um abraço, Alexandre Pereira fwh 2.6, xharbour, .99.6, MyMake msn: alexpdasilva6@hotmail.com atualmente em Rondônia Quote Link to comment Share on other sites More sharing options...
marcio1361303176 Posted March 29, 2008 Author Report Share Posted March 29, 2008 Amigos, e se eu Antes de Iniciar a Modificação, deletar os campos +- assim cCmdSql := 'ALTER TABLE `acesso` DROP COLUMN `sql_rowid`' SqlExecute( cCmdSql ) cCmdSql := 'ALTER TABLE `acesso` DROP COLUMN `sql_deleted`' SqlExecute( cCmdSql ) Depois Crio os campos masterservicevrb@gmail.com FWHX2.6+SQLLIB+xDev+rpv+ MYSQL Quote Link to comment Share on other sites More sharing options...
personal Posted March 29, 2008 Report Share Posted March 29, 2008 ALTER TABLE `tabela` ADD `campo_novo` DECIMAL(10,0) DEFAULT "0" AFTER `campo_que_quer_que_seja_criado` Oliveira, Sérgio A. PERSONAL Comp. e Sitemas.id=green> FWH 2.5, xharbour 0.99.4, SqlLib,AdoRDD, MySql, xMate. TWBrowse(HC),C5Menu,vPrinter. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.