Jump to content
Fivewin Brasil

MIGRANDO PARA SQLRDD


oribeiro

Recommended Posts

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().

 

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

 

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

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...