oribeiro Posted July 26, 2018 Report Share Posted July 26, 2018 Pessoal, Estou aprendendo a usar o SQLRDD e estou impressionado com o resultado. Mas, porque isso funciona: cSql := "SELECT M.NR_PD, I.ITEM, C.ABREV, T.ABREV, V.ABREV, E.ENDERECO, G.DESCR, P.PROD, S.CLASSIF, B.DESCR, R.DESCR, N.CFOP FROM FTPEDITE AS I"+; " INNER JOIN FTPRODUT AS P ON I.PROD = P.PROD" +; " INNER JOIN FTPEDMES AS M ON I.NR_PD = M.NR_PD"+; " INNER JOIN FTCLIMES AS C ON M.NR_CL = C.NR_CL"+; " INNER JOIN FTTRANSP AS T ON M.NR_TR = T.NR_TR"+; " INNER JOIN FTVENDED AS V ON M.NR_VD = V.NR_VD"+; " INNER JOIN TBNAT AS N ON M.NAT = N.NAT" +; " INNER JOIN FTGRUPOS AS G ON C.NR_GR = G.NR_GR"+; " INNER JOIN FTCLIEND AS E ON C.NR_CL = E.NR_CL AND C.LOC_FATU = E.LOCAL"+; " INNER JOIN MTGRUPOS AS R ON LEFT(P.PROD,2) = R.NR_GR"+; " INNER JOIN TBCLASSI AS S ON P.CF = S.CF" +; " INNER JOIN TBCST AS B ON P.CST = B.CST" USE (cSql) NEW SHARED ALIAS FTPEDITE xBrowse() e isso não? nSql:=SR_GetConnection() nSql:Exec( "SELECT M.NR_PD, I.ITEM, C.ABREV, T.ABREV, V.ABREV, E.ENDERECO, G.DESCR, P.PROD, S.CLASSIF, B.DESCR, R.DESCR, N.CFOP FROM FTPEDITE AS I"+; " INNER JOIN FTPRODUT AS P ON I.PROD = P.PROD" +; " INNER JOIN FTPEDMES AS M ON I.NR_PD = M.NR_PD"+; " INNER JOIN FTCLIMES AS C ON M.NR_CL = C.NR_CL"+; " INNER JOIN FTTRANSP AS T ON M.NR_TR = T.NR_TR"+; " INNER JOIN FTVENDED AS V ON M.NR_VD = V.NR_VD"+; " INNER JOIN TBNAT AS N ON M.NAT = N.NAT" +; " INNER JOIN FTGRUPOS AS G ON C.NR_GR = G.NR_GR"+; " INNER JOIN FTCLIEND AS E ON C.NR_CL = E.NR_CL AND C.LOC_FATU = E.LOCAL"+; " INNER JOIN MTGRUPOS AS R ON LEFT(P.PROD,2) = R.NR_GR"+; " INNER JOIN TBCLASSI AS S ON P.CF = S.CF" +; " INNER JOIN TBCST AS B ON P.CST = B.CST" ) xBrowse() Qual é a diferença entre eu usar o USE (cSql) e o nSql:Exec() ? No primeiro caso o xBrowse() mostra todos os campos selecionados e no segundo caso não mostra nada, mesmo sem apresentar nenhum erro no nSql:Exec(). Quote Link to comment Share on other sites More sharing options...
aferra Posted July 26, 2018 Report Share Posted July 26, 2018 não uso mas usando a logica do pouco que já li em um vc está tendo uma area a ser representada e no outro vc tem um objeto, então usando assim xBrowse ( nSql ) acredito que vá mostrar os dados Quote Link to comment Share on other sites More sharing options...
miragerr Posted July 26, 2018 Report Share Posted July 26, 2018 Ola, Bom dia Quando você usa o USE... você esta criando uma ÁREA de trabalho, o qual o xBrowse consegue enxergar, para você usar o nSql:Exec você pode pegar o resultado em um ARRAY o qual EU também uso muito. mais para isso você deve colocar todos os parâmetros necessários. Método Exec() Executa um comando SQL, recuperando opcionalmente o result set › Sintaxe Exec( <cCommand>, [<lMsg>], [<lFetch>], [<aArray>], [<cFile>, [<cAlias>]], [<nMaxRecords>], [<lNoRecno>], [<cRecnoName>], [<cDeletedName>], [<lTranslate>] ) ==> NIL › Argumentos <cCommand> Comando SQL a executar <lMsg> Caso .T. (default) gera um run time error caso exista um erro no comando SQL <lFetch> Caso .F. (default), o result set não é recuperado. Caso .T., o result set é recuperado conforme os parâmetros seguintes <aArray> Array que receberá o result set caso informado po referência, e caso lFetch esteja com .T. <cFile> Nome de arquivo DBF que será utilizado para armazenar o result set caso lFetch esteja com .T.. Esta opção possui prioridade sobre o parâmetro <aArray>, ou seja, caso seja informado o nome do arquivo não será gravado o result set no array do parâmetro anterior. <cFile> será criado com a estrutura do result set do comando SQL e ficará aberta em modo exclusivo após a execução do método. <cAlias> Alias do arquivo DBF a ser criado na opção acima. <nMaxRecords> Quantidade máxima de linhas do result set a recuperar <lNoRecno> Caso .F. (default) adiciona a coluna referente ao Recno() no result set. Caso .T., não adiciona <cRecnoName> Nome da coluna Recno() <cDeletedName> Nome da coluna Deleted() <lTranslate> Caso .T. (default) retorna a informação contida em Multi Idioma no idioma atual Espero ter ajudado. Quote Link to comment Share on other sites More sharing options...
oribeiro Posted July 26, 2018 Author Report Share Posted July 26, 2018 Ajudou muito... Vou estudar esse exemplo desse link, do Ariston Santos, sobre como usar Array em conjunto com o :Exec(). http://fivewin.com.br/index.php?/topic/26973-socorro-em-sql/ Obrigado. Quote Link to comment Share on other sites More sharing options...
emotta Posted July 26, 2018 Report Share Posted July 26, 2018 Pessoal, Estou aprendendo a usar o SQLRDD e estou impressionado com o resultado. Mas, porque isso funciona: cSql := "SELECT M.NR_PD, I.ITEM, C.ABREV, T.ABREV, V.ABREV, E.ENDERECO, G.DESCR, P.PROD, S.CLASSIF, B.DESCR, R.DESCR, N.CFOP FROM FTPEDITE AS I"+; " INNER JOIN FTPRODUT AS P ON I.PROD = P.PROD" +; " INNER JOIN FTPEDMES AS M ON I.NR_PD = M.NR_PD"+; " INNER JOIN FTCLIMES AS C ON M.NR_CL = C.NR_CL"+; " INNER JOIN FTTRANSP AS T ON M.NR_TR = T.NR_TR"+; " INNER JOIN FTVENDED AS V ON M.NR_VD = V.NR_VD"+; " INNER JOIN TBNAT AS N ON M.NAT = N.NAT" +; " INNER JOIN FTGRUPOS AS G ON C.NR_GR = G.NR_GR"+; " INNER JOIN FTCLIEND AS E ON C.NR_CL = E.NR_CL AND C.LOC_FATU = E.LOCAL"+; " INNER JOIN MTGRUPOS AS R ON LEFT(P.PROD,2) = R.NR_GR"+; " INNER JOIN TBCLASSI AS S ON P.CF = S.CF" +; " INNER JOIN TBCST AS B ON P.CST = B.CST" USE (cSql) NEW SHARED ALIAS FTPEDITE xBrowse() e isso não? nSql:=SR_GetConnection() nSql:Exec( "SELECT M.NR_PD, I.ITEM, C.ABREV, T.ABREV, V.ABREV, E.ENDERECO, G.DESCR, P.PROD, S.CLASSIF, B.DESCR, R.DESCR, N.CFOP FROM FTPEDITE AS I"+; " INNER JOIN FTPRODUT AS P ON I.PROD = P.PROD" +; " INNER JOIN FTPEDMES AS M ON I.NR_PD = M.NR_PD"+; " INNER JOIN FTCLIMES AS C ON M.NR_CL = C.NR_CL"+; " INNER JOIN FTTRANSP AS T ON M.NR_TR = T.NR_TR"+; " INNER JOIN FTVENDED AS V ON M.NR_VD = V.NR_VD"+; " INNER JOIN TBNAT AS N ON M.NAT = N.NAT" +; " INNER JOIN FTGRUPOS AS G ON C.NR_GR = G.NR_GR"+; " INNER JOIN FTCLIEND AS E ON C.NR_CL = E.NR_CL AND C.LOC_FATU = E.LOCAL"+; " INNER JOIN MTGRUPOS AS R ON LEFT(P.PROD,2) = R.NR_GR"+; " INNER JOIN TBCLASSI AS S ON P.CF = S.CF" +; " INNER JOIN TBCST AS B ON P.CST = B.CST" ) xBrowse() Qual é a diferença entre eu usar o USE (cSql) e o nSql:Exec() ? No primeiro caso o xBrowse() mostra todos os campos selecionados e no segundo caso não mostra nada, mesmo sem apresentar nenhum erro no nSql:Exec(). Faça um teste em array antes, faça assim? cSql := // colocar aqui o seu SELECT aSql := {} oSql:Exec(cSql,,.t.,@aSql) MsgStop(Sr_ShowVector(aSql)) Veja se aparece algo Quote Link to comment Share on other sites More sharing options...
emotta Posted July 26, 2018 Report Share Posted July 26, 2018 Já vi o que está errado, vc não está indicando um ALIAS... faça a chamada do exec assim: oSql:Exec(cSql,,.t.,NIL,NIL,"TEMP") TEMP->(Browse()) Quote Link to comment Share on other sites More sharing options...
miragerr Posted July 26, 2018 Report Share Posted July 26, 2018 Pode usar da seguinte forma também cSql := // colocar aqui o seu SELECT aSql := {} oSql:Exec(cSql,,.t.,@aSql) xBrowse( aSql ) Espero ter ajudado 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.