macs Posted August 19, 2013 Report Share Posted August 19, 2013 Pessoal, como eu faço para criar um índice de uma tabela criada a partir de uma consulta SQL. Estou fazendo desta forma: dbUseArea( .T., upper( ::cTipoBanco ), "*", cInstrucaoSql, .F., .T.,, ::nConexao ) IF ! empty( aIndices ) FOR nIndex := 1 TO LEN( aIndices ) cTagIndex := "ind_" + aIndices[ nIndex, 1 ] + strZero( nIndex, 2 ) cChave := aIndices[ nIndex, 2 ] ordCondSet( ,,,,,, recno(),,,,,,,,,,, .T.,, ) ordCreate( Nil, cTagIndex, cChave ) NEXT ENDIF Ocorre o seguinte erro: SQLLIB/1000: MySQL RDD: COMPLEX SQL not suport INDEX. Quote Link to comment Share on other sites More sharing options...
Erciley Junior Posted August 19, 2013 Report Share Posted August 19, 2013 http://stackoverflow.com/questions/14397785/mysql-create-temporary-table-with-index-and-select Quote Link to comment Share on other sites More sharing options...
macs Posted August 19, 2013 Author Report Share Posted August 19, 2013 http://stackoverflow.com/questions/14397785/mysql-create-temporary-table-with-index-and-select Não estou querendo criar um índice no banco... estou tentando criar um índice na tabela criada a partir de uma consulta. Quote Link to comment Share on other sites More sharing options...
Yury Posted August 19, 2013 Report Share Posted August 19, 2013 Olá no caso de usar comandos/FUNÇÕES Clipper/xHB para criar o índice vc deve montar o índice sem utilizar funções como strzero, dtos, etc... ou seja deve ser somente campo + campo +campo, exemplo: nCodCliente + cNomeCliente outra coisa: lembre-se que vc somente consegue criar índices para TABELAS existentes, nesse caso do USE SQL vc não está criando uma tabela, somente uma instrução ; vc poderia facilmente colocar um ORDER BY na sua instrução para resolver a questão, exemplo: USE SQL "SELECT nCodCliente,cNomeCliente,cCidCliente,cUFCliente FROM TAB_CLI ORDER BY nCodCliente,cNomeCliente" ALIAS "CLI" NEW VIA "MySQL" Abraço Quote Link to comment Share on other sites More sharing options...
macs Posted August 19, 2013 Author Report Share Posted August 19, 2013 Olá no caso de usar comandos/FUNÇÕES Clipper/xHB para criar o índice vc deve montar o índice sem utilizar funções como strzero, dtos, etc... ou seja deve ser somente campo + campo +campo, exemplo: nCodCliente + cNomeCliente outra coisa: lembre-se que vc somente consegue criar índices para TABELAS existentes, nesse caso do USE SQL vc não está criando uma tabela, somente uma instrução ; vc poderia facilmente colocar um ORDER BY na sua instrução para resolver a questão, exemplo: USE SQL "SELECT nCodCliente,cNomeCliente,cCidCliente,cUFCliente FROM TAB_CLI ORDER BY nCodCliente,cNomeCliente" ALIAS "CLI" NEW VIA "MySQL" Abraço Ok... neste exemplo que você colocou, como eu faço para criar um índice, exemplo: criar o índice por cCidCliente. Estou precisando realizar pesquisa através deste campo (caso do exemplo). Não quero criar uma consulta já ordenada ( ORDER BY nCodCliente,cNomeCliente" ) Quote Link to comment Share on other sites More sharing options...
Yury Posted August 19, 2013 Report Share Posted August 19, 2013 cNomeTabela := 'TAB_CLI'cNomeIndice := 'TAB_CLI1'cAliasTabela:= 'CLI'cExpress := 'cCidCliente' DBUSEAREA(.T.,'MySQL',cNomeTabela,cAliasTabela,.T.) DBSELECTAREA(cAliasTabela) DBCREATEINDEX(cNomeIndice,cExpress) Quote Link to comment Share on other sites More sharing options...
Erciley Junior Posted August 19, 2013 Report Share Posted August 19, 2013 Não estou querendo criar um índice no banco... estou tentando criar um índice na tabela criada a partir de uma consulta. O exemplo que postei faz exatamente isso que você citou. Cria um índice temporário em uma tabela temporária. (só faltou você ler) Quote Link to comment Share on other sites More sharing options...
emotta Posted August 19, 2013 Report Share Posted August 19, 2013 Já coloca o ORDER BY na sua instrucao SQL do que vc precisa.... Na workarea já virá ordenado. não existe motivo para o retrabalho 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.