Theotokos Posted March 11, 2017 Report Share Posted March 11, 2017 Boa Tarde Amigos!!! Estou pedindo um socorro aos amigos, preciso deixar de usar banco de dados DBF´s da vida... ja tentei outras vezes mas não foi para frente... então, se alguem puder por favor me ajudar... tipo enviar um fonte simples de exemplo de como abrir bando dados, inserir, alterar, excluir... qual RDD SQL usar, de preferencia nativo fivewin... desde já contando sempre com vcs eu agradeço e louva a Deus... Obgdão!!!! ronecoura@gmai.com Quote Link to comment Share on other sites More sharing options...
jfaguiar Posted March 11, 2017 Report Share Posted March 11, 2017 Boa Tarde Amigos!!! Estou pedindo um socorro aos amigos, preciso deixar de usar banco de dados DBF´s da vida... ja tentei outras vezes mas não foi para frente... então, se alguem puder por favor me ajudar... tipo enviar um fonte simples de exemplo de como abrir bando dados, inserir, alterar, excluir... qual RDD SQL usar, de preferencia nativo fivewin... desde já contando sempre com vcs eu agradeço e louva a Deus... Obgdão!!!! ronecoura@gmai.com Boa noite amigo. Eu também certamente irei ter dúvidas como a sua, pois irei começar migração para mysql em breve. Há poucos dias, interroguei os companheiros do forum e me disseram que na nova versão do fw não é necessário nenhuma rdd, tipo sqlrdd, sqllib, dentre outras. acho que com essa debanda de usuários dos dbfs para o sql, seria interessante uma sala só para esses assuntos envolvendo sql. Atualmente, utilizando o Mysql com Workbench, consigo fazer muita coisa no banco e se esses comandos que utilizo no workbench funcionarem do mesmo jeito dentro do Fivewin, ai será o paraíso para os migradores dos dbfs para o sql. Theotokos 1 Quote Link to comment Share on other sites More sharing options...
Jmsilva Posted March 12, 2017 Report Share Posted March 12, 2017 Para quem não conhece nada de SQL e bom assistir uns vídeos no YouTube, Seasons. Dica de para comandos link https://www.w3schools.com/sql/sql_intro.asp. O que é bom saber é sobre as licenças no caso do MySQL no Windows depende de licença. Exceto usando o xampp. Alternativa é o Mariadb totalmente Free e é similar ao MySQL. Estou fazendo teste com o Firebird que Free e posso copiar o banco que é um arquivo diferente do MySQL. Theotokos 1 Quote Link to comment Share on other sites More sharing options...
evandro Posted March 12, 2017 Report Share Posted March 12, 2017 Olá, O primeiro passo para migrar é "brincar" bastante com o Mysql. Se inteirar o máximo possível do SQL. Recomendo o MariaDB. Não por causa de licença, pois a necessidade dela é coisa antiga, não existe mais. O Maria é mais rápido e é Open. O MySql é da Oracle. Pode mudar a forma de licença a hora que quiser. Os outros bancos, Firebird inclusive, haverá uma maior dificuldade de tudo. RDD, solução nativa, outros usuários, etc. Para uma migração gradativa, ou seja, mesclar partes em DBF e partes em MySql, tem de ser com uma RDD. Neste caso recomendo a SqlLib. Usei as duas ( SqlLib e SqlRdd ) e, na época, optei largamente pela SqlLib. Se for radical e migrar tudo, tanto o Harbour, quanto o FW mais recente, têm solução nativa. Estou fazendo minhas rotinas com opção para as duas alternativas para poder comparar o desempenho. O que for melhor no cliente, basta alterar uma pequena configuração. Claro que usar a opção nativa é muito melhor, só que não dá para aproveitar nenhum tipo de acesso aos dados ( use, seek, etc. ). Theotokos 1 Quote Link to comment Share on other sites More sharing options...
aferra Posted March 13, 2017 Report Share Posted March 13, 2017 o Valdir e eu escolhemos a opção tdolphin,. não é nativa mas vc tem o fonte para altera da forma que precisar...agora dependendo da sua versão fivewin vc terá a classe nativa. Agora como o Evandro disse aprenda, estude, compreenda a mudança de dbf para sql ( existe acredite ) e ai sim faça a conversão. link pra estudos digite tdolphin em search e se divirta, tem muito material Quote Link to comment Share on other sites More sharing options...
Theotokos Posted March 13, 2017 Author Report Share Posted March 13, 2017 Vlw pessoal!!! Quanto aos comandos, ja tive estudando... o negocio agora é começar a conversão... o que usar, como transferir os dados do DBF para SQL... Quote Link to comment Share on other sites More sharing options...
Jmsilva Posted March 15, 2017 Report Share Posted March 15, 2017 O processo mais seguro e vc criar uma classe para gravar no SQL, antes cria a tabela, depois um do Antes DO While no Dbf passando campo para a classe, setnome,setdatanasc,.....E realiza o insert. Quote Link to comment Share on other sites More sharing options...
Jmsilva Posted March 15, 2017 Report Share Posted March 15, 2017 #include "FiveWin.ch" Function Main() Use "pessoa" alias "pessoa" new oPes := TPESSOA():NEW() pessoa->(dbgotop()) DO WHILE !pessoa->(Eof()) oPes:SetCpf(pessoa->cpf) oPes:SetNome(pessoa->nome) oPes:Insert() //grava banco de dados sql pessoa->(dbskip()) Enddo pessoa->(DbClose()) //fecha sql Return nil **========================================================================================== CLASS TPESSOA //FROM TSQLITE AS LOGICAL INIT .f. DATA oSql //PROTECTED VAR cCpf INIT Space(11) //PROTECTED VAR cNome INIT Space(60) //PROTECTED METHOD New() CONSTRUCTOR METHOD SetCpf(p) METHOD GetCpf() METHOD SetNome(p) METHOD GetNome() METHOD Insert() ENDCLASS **============================================================ METHOD New() CLASS TPESSOA **============================================================ //fazer conexão sql RETURN Self **============================================================ METHOD SetCpf(p) CLASS TPESSOA **============================================================ ::cCpf := p RETURN NIL **============================================================ METHOD GetCpf() CLASS TPESSOA **============================================================ RETURN(::cCpf) **============================================================ METHOD SetNome(p) CLASS TPESSOA **============================================================ ::cNome := p RETURN NIL **============================================================ METHOD GetNome() CLASS TPESSOA **============================================================ RETURN(::cNome) **============================================================ METHOD INSERT() CLASS TPESSOA **============================================================ LOCAL lRET := .T. LOCAL cSql := "INSERT INTO pessoa(cpf, nome) " cSql += "VALUES('"+::cCpf+"','"+::cNome+"');" IF !SqlExecute(cSql) lRET := .F. ENDIF Return(lRET) Esta é a dica Theotokos 1 Quote Link to comment Share on other sites More sharing options...
Ariston Santos Posted March 16, 2017 Report Share Posted March 16, 2017 Os demais colegas devem ter exemplos mais completos mas este mostra como eu cadastro e modifico fornecedores usando SQLRDD. /****************************************************************************** * Nome do PRG: fornenet.prg (Iniciada em 24/05/2014) * * Função.....: Cadastro e alteração de fornecedores via sqlrdd * * Autor......: Ariston Santos (Pode contar código de colaboradores) * * Site.......: www.arsoft-ap.com.br * * Suporte....: www.arsoft-ap.com.br/index.php#four * ******************************************************************************/ #include "FiveWin.ch" #include "corget.ch" #include "image.ch" #include "sqlrdd.ch" #include "msg.ch" #include "xbrowse.ch" #include "vlib.ch" STATIC aForns FUNCTION CadFornec(oDlg) oDlg:cMsg := "Obtendo a lista dos dados cadastrados..." oDlg:Refresh() l_Err := .F. aForns := PegaFornecs(2) oDlg:cMsg := "Aguarde um momento..." oDlg:Refresh() cDesc := SPACE(40) cCodi := SPACE(13) cFant := SPACE(40) DEFINE DIALOG oDlItm FROM 0, 0 TO 35, 100 TITLE "Cadastro de fornecedores" //Procurar campo 1 @02,005 SAY "Descrição - Asterisco (*) para TODOS" OF oDlItm SIZE 100,10 PIXEL @10,005 GET cDesc OF oDlItm SIZE 100,10 PIXEL UPDATE WHEN .F. //Procurar campo 2 @02,110 SAY "Código" OF oDlItm SIZE 50,10 PIXEL @10,110 GET cCodi PICTURE "9999999999999" OF oDlItm SIZE 50,10 PIXEL UPDATE WHEN .F. //Procurar campo 3 @02,170 SAY "Fantasia" OF oDlItm SIZE 100,10 PIXEL @10,170 GET cFant OF oDlItm SIZE 100,10 PIXEL UPDATE WHEN .F. @25,05 XBROWSE oBrw ; COLUMNS 1,2,3,4,5,6,7,8 ; HEADERS "Código", "Razão social", "Fantasia", "Contato", "Telefone", "Endereço", "Cidade", "UF" ; COLSIZES 90,200,200,150,150,200,100,25; OF oDlItm ; ARRAY aForns ; ON DBLCLICK EditFornec(.f., oBrw) ; SIZE 385, 210 PIXEL LINES CELL UPDATE oBrw:bClrSelFocus := {|| { CLR_WHITE, CLR_HBLUE }} // Seleção com foco oBrw:bClrSel := {|| { CLR_BLACK, CLR_GRAY }} // Seleção sem foco oBrw:lColDividerComplete := .f. oBrw:CreateFromCode() nLin := 20*12 nCol := 55 @ nLin, (8+(nCol*1)-55) SBUTTON oSbt1 PROMPT "&Cadastrar" OF oDlItm ACTION EditFornec(.t., oBrw) SIZE 50, 18 PIXEL FILENAME ".\FIGURAS\Novo.BMP" COLORS CLR_BLACK,{CLR_HGRAY,CLR_WHITE,3} NOBORDER XP TOOLTIP "Cadastrar novo fornecedor" @ nLin, (8+(nCol*2)-55) SBUTTON oSbt2 PROMPT "&Alterer" OF oDlItm ACTION EditFornec(.f., oBrw) SIZE 50, 18 PIXEL FILENAME ".\FIGURAS\abrir.BMP" COLORS CLR_BLACK,{CLR_HGRAY,CLR_WHITE,3} NOBORDER XP WHEN LEN(aForns) > 0 TOOLTIP "Modificar dados do fornecedor" @ nLin, (8+(nCol*3)-55) SBUTTON oSbt3 PROMPT "&Excluir" OF oDlItm ACTION DeleFornec(oBrw) SIZE 50, 18 PIXEL FILENAME ".\FIGURAS\lixeira.bmp" COLORS CLR_BLACK,{CLR_HGRAY,CLR_WHITE,3} NOBORDER XP WHEN LEN(aForns) > 0 TOOLTIP "Excluir o fornecedor" @ nLin, (8+(nCol*4)-55) SBUTTON oSbt3 PROMPT "&Imprimir" OF oDlItm ACTION ImprFornec(aForns) SIZE 50, 18 PIXEL FILENAME ".\FIGURAS\printer.BMP" COLORS CLR_BLACK,{CLR_HGRAY,CLR_WHITE,3} NOBORDER XP WHEN LEN(aForns) > 0 TOOLTIP "Imprimir listagem dos fornecedores" @ nLin, (8+(nCol*7)-55) SBUTTON oSbt7 PROMPT "&Retornar" OF oDlItm ACTION oDlItm:End() SIZE 50, 18 PIXEL FILENAME ".\FIGURAS\STOP.BMP" COLORS CLR_BLACK,{CLR_HGRAY,CLR_WHITE,3} NOBORDER XP TOOLTIP "Retornar à tela principal" ACTIVATE DIALOG oDlItm CENTERED RETURN NIL FUNCTION PegaFornecs(nOrd) LOCAL l_Err := .f., aArray := {}, SqlArr n_Conn := nConection() IF n_Conn != 0 SqlArr := "SELECT CODIGO,"+; // 1 - Código " ITEM02,"+; // 2 - Razao social " ITEM10,"+; // 3 - Fantasia " ITEM03,"+; // 4 - Contato " ITEM04,"+; // 5 - Fone " ITEM07,"+; // 6 - Endereço / Logradouro " ITEM05,"+; // 7 - Cidade " ITEM06,"+; // 8 - UF " ITEM35,"+; // 9 - Número do imóvel " ITEM08" +; //10 - CNPJ " FROM forneced_bd" aArray := SQLArray(LOWER(SqlArr), @l_Err) IF LEN(aArray) > 0 ASORT(aArray,,,{|A,B| A[nOrd] < B[nOrd]}) ENDIF ENDIF RETURN(aArray) *----------------( Cadastro / Alteração do fornecedor )------------------------) STATIC FUNCTION EditFornec(lAppnd, oBrw) LOCAL lSave := .F., nQue := 1, nAt := oBrw:nArrayAt LOCAL nFcodi := 0 ,; // Código cItm02 := SPACE(50) ,; // Razao social cItm03 := SPACE(30) ,; // Contato cItm04 := SPACE(15) ,; // Fone 1 cItm05 := SPACE(30) ,; // Cidade cItm06 := SPACE(02) ,; // UF cItm07 := SPACE(45) ,; // Endereço / Logradouro cItm08 := SPACE(20) ,; // CNPJ cItm09 := SPACE(15) ,; // IE cItm10 := SPACE(50) ,; // Fantasia cItm11 := SPACE(15) ,; // FAX cItm12 := SPACE(40) ,; // E-mail cItm13 := SPACE(40) ,; // Site cItm14 := SPACE(30) ,; // Bairro cItm15 := SPACE(10) ,; // CEP cItm16 := SPACE(15) ,; // Fone 2 cItm17 := SPACE(15) ,; // Celular dItm18 := DATE() ,; // Data cadastro lItm19 := .F. ,; // Aceita devolu‡Æo? lItm20 := .F. ,; // É fabricante? cItm21 := SPACE(03) ,; // Frete CIF ou FOB? cItm22 := SPACE(20) ,; // Banco 1 cItm23 := SPACE(20) ,; // Agencia 1 cItm24 := SPACE(20) ,; // N§ conta 1 cItm25 := SPACE(20) ,; // Obs banco 1 cItm26 := SPACE(20) ,; // Banco 2 cItm27 := SPACE(20) ,; // Agencia 2 cItm28 := SPACE(20) ,; // N§ conta 2 cItm29 := SPACE(20) ,; // Obs banco 2 cItm30 := SPACE(20) ,; // Banco 3 cItm31 := SPACE(20) ,; // Agencia 3 cItm32 := SPACE(20) ,; // N§ conta 3 cItm33 := SPACE(20) ,; // Obs banco 3 cItm34 := SPACE(35) ,; // País do fornecedor / Transportadora cItm35 := SPACE(10) ,; // Número do imóvel cItm36 := SPACE(09) ,; // Número de inscrição do participante na Suframa. cItm37 := SPACE(10) // Pessoa: FÍSICA, JURÍDICA IF lAppnd MsgRun("Conectando...","Conectando...",{||n_Conn := nConection()}) IF n_Conn == 0 ; RETURN NIL ; ENDIF SqlArr := "SELECT MAX(CODIGO) AS ULTCOD FROM forneced_bd" aMaxIt := SQLArray(SqlArr) IF LEN(aMaxIt) > 0 nFcodi := aMaxIt[1,1] + 1 ENDIF ELSE a_Field := {} SqlArr := "SELECT CODIGO,"+; // 01 - Código " ITEM02,"+; // 02 - Razao social " ITEM03,"+; // 03 - Contato " ITEM04,"+; // 04 - Fone 1 " ITEM05,"+; // 05 - Cidade " ITEM06,"+; // 06 - UF " ITEM07,"+; // 07 - Endereço / Logradouro " ITEM08,"+; // 08 - CNPJ " ITEM09,"+; // 09 - IE " ITEM10,"+; // 10 - Fantasia " ITEM11,"+; // 11 - FAX " ITEM12,"+; // 12 - E-mail " ITEM13,"+; // 13 - Site " ITEM14,"+; // 14 - Bairro " ITEM15,"+; // 15 - CEP " ITEM16,"+; // 16 - Fone 2 " ITEM17,"+; // 17 - Celular " ITEM18,"+; // 18 - Data cadastro " ITEM19,"+; // 19 - Aceita devolu‡Æo? " ITEM20,"+; // 20 - É fabricante? " ITEM21,"+; // 21 - Frete CIF ou FOB? " ITEM22,"+; // 22 - Banco 1 " ITEM23,"+; // 23 - Agencia 1 " ITEM24,"+; // 24 - N§ conta 1 " ITEM25,"+; // 25 - Obs banco 1 " ITEM26,"+; // 26 - Banco 2 " ITEM27,"+; // 27 - Agencia 2 " ITEM28,"+; // 28 - N§ conta 2 " ITEM29,"+; // 29 - Obs banco 2 " ITEM30,"+; // 30 - Banco 3 " ITEM31,"+; // 31 - Agencia 3 " ITEM32,"+; // 32 - N§ conta 3 " ITEM33,"+; // 33 - Obs banco 3 " ITEM34,"+; // 34 - País do fornecedor / Transportadora " ITEM35,"+; // 35 - Número do imóvel " ITEM36,"+; // 36 - Número de inscrição do participante na Suframa. " ITEM37" +; // 37 - Pessoa: FÍSICA, JURÍDICA " FROM forneced_bd WHERE CODIGO = "+ALLTRIM(STR(aForns[nAt,1])) l_Err := .F. a_Field := SQLArray(SqlArr, @l_Err) IF LEN(a_Field) == 0 .OR. l_Err == .T. SysRefresh() MsgAlert("Fornecedor não mais encontrado no banco de dados.", "Aviso") RETURN NIL ENDIF nFcodi := aForns[nAt,1] cItm02 := a_Field[1,02] cItm03 := a_Field[1,03] cItm04 := a_Field[1,04] cItm05 := a_Field[1,05] cItm06 := a_Field[1,06] cItm07 := a_Field[1,07] cItm08 := a_Field[1,08] cItm09 := a_Field[1,09] cItm10 := a_Field[1,10] cItm11 := a_Field[1,11] cItm12 := a_Field[1,12] cItm13 := a_Field[1,13] cItm14 := a_Field[1,14] cItm15 := a_Field[1,15] cItm16 := a_Field[1,16] cItm17 := a_Field[1,17] dItm18 := a_Field[1,18] lItm19 := a_Field[1,19] lItm20 := a_Field[1,20] cItm21 := a_Field[1,21] cItm22 := a_Field[1,22] cItm23 := a_Field[1,23] cItm24 := a_Field[1,24] cItm25 := a_Field[1,25] cItm26 := a_Field[1,26] cItm27 := a_Field[1,27] cItm28 := a_Field[1,28] cItm29 := a_Field[1,29] cItm30 := a_Field[1,30] cItm31 := a_Field[1,31] cItm32 := a_Field[1,32] cItm33 := a_Field[1,33] cItm34 := a_Field[1,34] cItm35 := a_Field[1,35] cItm36 := a_Field[1,36] cItm37 := a_Field[1,37] ENDIF cAviso := "" IF nQue = 1 cAviso := "Os dados indicados com asterísco (*) são obrigatórios para geração do SPED" ENDIF DEFINE FONT oSayFnt NAME "Times New Roman" SIZE 0, -30 BOLD ITALIC DEFINE DIALOG F_dl RESOURCE "FORN_CAD" TITLE IIF(lAppnd ,"Cadastro","Alteração") REDEFINE SAY oId25 PROMPT "Ficha Cadastral - "+{"Fornecedor","Transportadora","Laboratórios"}[nQue] ID 58 OF F_dl COLORS CLR_HBLUE oId25:SetFont(oSayFnt) REDEFINE GET oId33 VAR nFcodi PICTURE "9999999999" ID 33 OF F_dl WHEN .F. REDEFINE GET oId34 VAR cItm02 ID 34 OF F_dl VALID EVAL({||(IIF(EMPTY(cItm02),MsgStop("Este campo nao pode ficar vazio!","Êpa!"),nil)),!EMPTY(cItm02)}) REDEFINE GET oId35 VAR cItm10 ID 35 OF F_dl VALID EVAL({||(IIF(EMPTY(cItm10),MsgStop("Este campo nao pode ficar vazio!","Êpa!"),nil)),!EMPTY(cItm10)}) REDEFINE GET oId36 VAR cItm03 ID 36 OF F_dl REDEFINE GET oId37 VAR cItm05 ID 37 OF F_dl REDEFINE GET oId38 VAR cItm06 ID 38 OF F_dl // VALID CheckMunUF(@cAviso, cItm05, cItm06, oId68) REDEFINE GET oId41 VAR cItm15 ID 41 OF F_dl REDEFINE GET oId51 VAR cItm07 ID 51 OF F_dl REDEFINE GET oId66 VAR cItm35 ID 66 OF F_dl REDEFINE GET oId52 VAR cItm14 ID 52 OF F_dl REDEFINE GET oId67 VAR cItm34 ID 67 OF F_dl REDEFINE GET oId39 VAR cItm04 ID 39 OF F_dl REDEFINE GET oId40 VAR cItm16 ID 40 OF F_dl REDEFINE GET oId42 VAR cItm11 ID 42 OF F_dl REDEFINE GET oId32 VAR cItm17 ID 32 OF F_dl REDEFINE COMBOBOX oCt70 VAR cItm37 ITEMS {"FÍSICA", "JURÍDICA"} ID 70 OF F_dl REDEFINE GET oId48 VAR cItm08 ID 48 OF F_dl // VALID CheckCpf(cItm08, lAppnd, 2) REDEFINE GET oId49 VAR cItm09 ID 49 OF F_dl REDEFINE GET oId69 VAR cItm36 PICTURE "999999999" ID 69 OF F_dl REDEFINE GET oId43 VAR cItm12 ID 43 OF F_dl REDEFINE GET oId56 VAR cItm13 ID 56 OF F_dl REDEFINE GET oId46 VAR dItm18 ID 46 OF F_dl REDEFINE COMBOBOX oId44 VAR cItm21 ITEMS {"CIF","FOB"} ID 44 OF F_dl REDEFINE CHECKBOX oId45 VAR lItm19 ID 45 OF F_dl WHEN nQue = 1 REDEFINE CHECKBOX oId47 VAR lItm20 ID 47 OF F_dl WHEN nQue = 1 REDEFINE GET oId50 VAR cItm22 ID 50 OF F_dl REDEFINE GET oId53 VAR cItm23 ID 53 OF F_dl REDEFINE GET oId54 VAR cItm24 ID 54 OF F_dl REDEFINE GET oId55 VAR cItm25 ID 55 OF F_dl REDEFINE GET oId57 VAR cItm26 ID 57 OF F_dl REDEFINE GET oId59 VAR cItm27 ID 59 OF F_dl REDEFINE GET oId60 VAR cItm28 ID 60 OF F_dl REDEFINE GET oId61 VAR cItm29 ID 61 OF F_dl REDEFINE GET oId62 VAR cItm30 ID 62 OF F_dl REDEFINE GET oId63 VAR cItm31 ID 63 OF F_dl REDEFINE GET oId64 VAR cItm32 ID 64 OF F_dl REDEFINE GET oId65 VAR cItm33 ID 65 OF F_dl REDEFINE BUTTON oBt1 ID 30 OF F_dl ACTION ( lSave := .T. , F_dl:End()) REDEFINE BUTTON oBt2 ID 31 OF F_dl ACTION ( lSave := .F. , F_dl:End()) REDEFINE SAY oId68 PROMPT cAviso ID 68 OF F_dl COLORS CLR_HRED ACTIVATE DIALOG F_dl CENTERED ON INIT (IIF(nQue != 1,(oId45:Hide(),oId47:Hide()),NIL)) if lSave IF lAppnd cQury := "INSERT INTO forneced_bd (CODIGO, ITEM02, ITEM03, ITEM04, ITEM05, ITEM06, ITEM07, ITEM08, ITEM09, ITEM10, ITEM11, ITEM12, ITEM13, ITEM14, ITEM15, ITEM16, ITEM17, ITEM18, ITEM19, ITEM20, ITEM21, ITEM22, ITEM23, ITEM24, ITEM25, ITEM26, ITEM27, ITEM28, ITEM29, ITEM30, ITEM31, ITEM32, ITEM33, ITEM34, ITEM35, ITEM36, ITEM37) VALUES "+CRLF cQury += "("+ALLTRIM(STR(nFcodi))+", '"+; cItm02+"', '"+; cItm03+"', '"+; cItm04+"', '"+; cItm05+"', '"+; cItm06+"', '"+; cItm07+"', '"+; cItm08+"', '"+; cItm09+"', '"+; cItm10+"', '"+; cItm11+"', '"+; cItm12+"', '"+; cItm13+"', '"+; cItm14+"', '"+; cItm15+"', '"+; cItm16+"', '"+; cItm17+"', '"+; SR_Val2Char(dItm18)+"', '"+; IIF(lItm19,"1","0")+"', '"+; IIF(lItm20,"1","0")+"', '"+; cItm21+"', '"+; cItm22+"', '"+; cItm23+"', '"+; cItm24+"', '"+; cItm25+"', '"+; cItm26+"', '"+; cItm27+"', '"+; cItm28+"', '"+; cItm29+"', '"+; cItm30+"', '"+; cItm31+"', '"+; cItm32+"', '"+; cItm33+"', '"+; cItm34+"', '"+; cItm35+"', '"+; cItm36+"', '"+; cItm37+"')" TRY MsgRun("Conectando...","Conectando...",{||n_Conn := nConection()}) IF n_Conn == 0 ; BREAK ; ENDIF oSql := SR_GetConnection() nErr := oSql:Execute(cQury) oSql:Commit() // Atualiza o browse aForns := PegaFornecs(1) oBrw:SetArray(aForns) oBrw:bLogicLen := {|| len(aForns)} oBrw:GoBottom() oBrw:Refresh() CATCH oErr SysRefresh() MsgErro("Erro ao tentar salvar os dados."+CRLF+CRLF+; "Erro: "+oErr:Description,"Erro") END ELSE cQury := "UPDATE forneced_bd SET"+; " ITEM02 = '"+cItm02+"'," + ; " ITEM03 = '"+cItm03+"'," + ; " ITEM04 = '"+cItm04+"'," + ; " ITEM05 = '"+cItm05+"'," + ; " ITEM06 = '"+cItm06+"'," + ; " ITEM07 = '"+cItm07+"'," + ; " ITEM08 = '"+cItm08+"'," + ; " ITEM09 = '"+cItm09+"'," + ; " ITEM10 = '"+cItm10+"'," + ; " ITEM11 = '"+cItm11+"'," + ; " ITEM12 = '"+cItm12+"'," + ; " ITEM13 = '"+cItm13+"'," + ; " ITEM14 = '"+cItm14+"'," + ; " ITEM15 = '"+cItm15+"'," + ; " ITEM16 = '"+cItm16+"'," + ; " ITEM17 = '"+cItm17+"'," + ; " ITEM18 = '"+SR_Val2Char(dItm18)+"'," + ; " ITEM19 = '"+IIF(lItm19,"1","0")+"'," + ; " ITEM20 = '"+IIF(lItm20,"1","0")+"'," + ; " ITEM21 = '"+cItm21+"'," + ; " ITEM22 = '"+cItm22+"'," + ; " ITEM23 = '"+cItm23+"'," + ; " ITEM24 = '"+cItm24+"'," + ; " ITEM25 = '"+cItm25+"'," + ; " ITEM26 = '"+cItm26+"'," + ; " ITEM27 = '"+cItm27+"'," + ; " ITEM28 = '"+cItm28+"'," + ; " ITEM29 = '"+cItm29+"'," + ; " ITEM30 = '"+cItm30+"'," + ; " ITEM31 = '"+cItm31+"'," + ; " ITEM32 = '"+cItm32+"'," + ; " ITEM33 = '"+cItm33+"'," + ; " ITEM34 = '"+cItm34+"'," + ; " ITEM35 = '"+cItm35+"'," + ; " ITEM36 = '"+cItm36+"'," + ; " ITEM37 = '"+cItm37+"'" + ; " WHERE CODIGO = "+ALLTRIM(STR(aForns[nAt,1])) lSaved := .F. TRY MsgRun("Conectando...","Conectando...",{||n_Conn := nConection()}) IF n_Conn == 0 ; BREAK ; ENDIF oSql := SR_GetConnection() nErr := oSql:Execute(cQury) oSql:Commit() lSaved := .T. CATCH oErr SysRefresh() MsgErro("Erro ao tentar salvar os dados."+CRLF+CRLF+; "Erro: "+oErr:Description,"Erro") END IF lSaved aForns[nAt, 2] := cItm02 aForns[nAt, 3] := cItm10 aForns[nAt, 4] := cItm03 aForns[nAt, 5] := cItm04 aForns[nAt, 6] := cItm07 aForns[nAt, 7] := cItm05 aForns[nAt, 8] := cItm06 oBrw:Refresh() ENDIF endif endif RETURN NIL *----------------( Exclusão do fornecedor )------------------------------------) STATIC FUNCTION DeleFornec(oBrw) LOCAL nAt := oBrw:nArrayAt, cQury IF ! MsgNoYes("Você está prestes a excluir este fornecedor:"+CRLF+CRLF+; "CÓDIGO: "+ALLTRIM(STR(aForns[nAt, 1]))+CRLF+; "CNPJ: "+ALLTRIM(aForns[nAt, 10])+CRLF+; "NOME: "+ALLTRIM(aForns[nAt, 2]), "Confirma a exclusão?") RETURN NIL ENDIF cQury := "DELETE FROM forneced_bd WHERE CODIGO = '"+ALLTRIM(STR(aForns[nAt,1]))+"'" TRY MsgRun("Excluindo...","Aguarde...",{||n_Conn := nConection()}) IF n_Conn == 0 ; BREAK ; ENDIF oSql := SR_GetConnection() nErr := oSql:Execute(cQury) oSql:Commit() // Atualiza o browse aForns := PegaFornecs(2) oBrw:SetArray(aForns) oBrw:bLogicLen := {|| len(aForns)} oBrw:GoTop() oBrw:Refresh() CATCH oErr SysRefresh() MsgErro("Erro ao tentar excluir o fornecedor."+CRLF+CRLF+; "Erro: "+oErr:Description,"Erro") END RETURN NIL *----------------( Impressão da listagem de fornecedores )---------------------) STATIC FUNCTION ImprFornec(aForns) PRINTER oPrn NAME "Fornecedores" PREVIEW oPrn:SetLandscape() DEFINE FONT oFont NAME "Courier New" SIZE 0, -8 OF oPrn DEFINE FONT oFon2 NAME "Arial" SIZE 0, -08 OF oPrn BOLD DEFINE FONT oFon3 NAME "Arial Narrow" SIZE 0, -11 OF oPrn BOLD DEFINE FONT oFon4 NAME "Arial Narrow" SIZE 0, -08 OF oPrn DEFINE PEN oPen COLOR CLR_BLACK WIDTH (oFont:nHeight/10) DEFINE PEN oLin COLOR CLR_HGRAY WIDTH (oFont:nHeight/12) mLarg := oFon2:nHeight nTab := (oPrn:nHorzRes() / 22) * 2 nSpc := (oPrn:nHorzRes()- (2*nTab)) / 120 nCls := {nTab+(nSpc*000),; nTab+(nSpc*006),; nTab+(nSpc*019),; nTab+(nSpc*050),; nTab+(nSpc*092),; nTab+(nSpc*119) } // Cabeçalho nRow := 3 nPag := 1 nTtl := 0 oPrn:StartPage() oPrn:Box(03*mLarg, nTab, 08*mLarg, oPrn:nHorzRes()-nTab, oPen ) oPrn:SayBitmap((3.5 * mLarg ), nTab+nSpc, ".\figuras\logoimpr.bmp", 20*nSpc, 4*mLarg) nRow := 4 oPrn:Say(nRow*mLarg, oPrn:nHorzRes()-(nTab+nSpc), "DATA "+DTOC(DATE()), oFont,,,,1) nRow++ oPrn:Say(nRow*mLarg, oPrn:nHorzRes()/2, "AUTOBOX LUBRIFICANTES", oFon3,,,,2) oPrn:Say(nRow*mLarg, oPrn:nHorzRes()-(nTab+nSpc), "HORA "+LEFT(TIME(),5), oFont,,,,1) nRow++ oPrn:Say(nRow*mLarg, oPrn:nHorzRes()-(nTab+nSpc), "PAGINA "+ALLTRIM(STR(nPag)), oFont,,,,1) nRow += 2.5 oPrn:Say(nRow*mLarg, oPrn:nHorzRes()/2, "LISTAGEM DE FORNECEDORES", oFon3, , , , 2) nRow+= 1.5 oPrn:Line(nRow*mLarg,nTab, nRow*mLarg,oPrn:nHorzRes()-nTab, oPen ) nRow += 0.5 // Título oPrn:Say(nRow*mLarg, nCls[01], "CÓDIGO", oFont) oPrn:Say(nRow*mLarg, nCls[02], "CNPJ", oFont) oPrn:Say(nRow*mLarg, nCls[03], "NOME", oFont) oPrn:Say(nRow*mLarg, nCls[04], "ENDEREÇO", oFont) oPrn:Say(nRow*mLarg, nCls[05], "CIDADE", oFont) oPrn:Say(nRow*mLarg, nCls[06], "TELEFONE", oFont,,,,1) nRow+=2 FOR nLin := 1 TO LEN(aForns) oPrn:Say(nRow*mLarg, nCls[01], STRZERO(aForns[nLin,1],5), oFon4) oPrn:Say(nRow*mLarg, nCls[02], aForns[nLin,10], oFon4) oPrn:Say(nRow*mLarg, nCls[03], ALLTRIM(aForns[nLin,2]), oFon4) oPrn:Say(nRow*mLarg, nCls[04], ALLTRIM(aForns[nLin,6])+", "+ALLTRIM(aForns[nLin,9]), oFon4) oPrn:Say(nRow*mLarg, nCls[05], ALLTRIM(aForns[nLin,7])+"-"+ALLTRIM(aForns[nLin,8]), oFon4) oPrn:Say(nRow*mLarg, nCls[06], ALLTRIM(aForns[nLin,5]), oFon4,,,,1) nRow += 1.2 oPrn:Line(nRow*mLarg,nTab, nRow*mLarg,oPrn:nHorzRes()-nTab, oLin ) nRow += 0.2 IF (nRow*mLarg) >= ( oPrn:nVertRes()-(8*mLarg) ) oPrn:EndPage() oPrn:StartPage() // Cabeçalho nRow := 3 nPag ++ oPrn:Say(nRow*mLarg, nTab, "DATA "+DTOC(DATE())+" às "+LEFT(TIME(),5)+"h", oFon2) oPrn:Say(nRow*mLarg, oPrn:nHorzRes()/2, "LISTAGEM DE FORNECEDORES", oFon3, , , , 2) oPrn:Say(nRow*mLarg, oPrn:nHorzRes()-((1.5*nTab)+nSpc), "PAGINA "+ALLTRIM(STR(nPag)), oFon2,,,,1) nRow+= 1.5 // Título nRow++ oPrn:Say(nRow*mLarg, nCls[01], "CÓDIGO", oFont) oPrn:Say(nRow*mLarg, nCls[02], "CNPJ", oFont) oPrn:Say(nRow*mLarg, nCls[03], "NOME", oFont) oPrn:Say(nRow*mLarg, nCls[04], "ENDEREÇO", oFont) oPrn:Say(nRow*mLarg, nCls[05], "CIDADE", oFont) oPrn:Say(nRow*mLarg, nCls[06], "TELEFONE", oFont,,,,1) nRow+=2 oPrn:Line(nRow*mLarg,nTab, nRow*mLarg,oPrn:nHorzRes()-nTab, oPen ) nRow += 0.5 ENDIF NEXT oPrn:EndPage() oPrn:Preview() DeleteObject(oPrn) RELEASE FONT oFont, oFon2, oFon3, oFon4 RETURN NIL Funções adicionais requeridas FUNCTION nConection() LOCAL a_Array, nErr, nPos, cComm STORE 0 TO nErr, nPos a_Array := {} TRY oSql := SR_GetCnn() // Retorna um objeto da conexão derivado da classe SR_CONNECTION caso a conexão esteja ativa oSql:exec( "SHOW TABLES",,.t.,@a_Array,,,0) // Executar qualquer comando, apenas para testar a conexão. CATCH oErr // Se houve erro, a conexão foi perdida. SR_End() // Fecha todas as conexões n_Conn := 0 IF SetConnection() // Abre nova conexão n_Conn := SR_GetActiveConnection() // Obtem o ID da conexão ativa SR_UseDeleteds(.F.) // Don't keep deleted records in database SR_SetFastOpen(.T.) // ABRE AS TABELAS EM MODO COMPARTILHADO SR_SetGoTopOnScope(.F.) // NÃO EXECUTA O DBGOTOP() AUTOMATICO NOS ORDSCOPE SR_MaxRowCache( 100 ) // Determina o tamanho máximo teórico do cache de linhas da workarea SR_SetBaseLang( 2 ) // portugues SR_Msg(2) // portugues SR_SETSYNTHETICINDEX(.F.) // Força que os próximos índices criados sejam sintéticos(porem os indice ficam por conta apenas do SQLRDD) SR_SETSYNTHETICINDEXMINIMUN(10) //Configura a quantidade mínima de colunas na chave de índice para criá-lo como Sintético ENDIF END RETURN( n_Conn ) FUNCTION SetConnection() LOCAL _Wait, lConn cRDD := "SQLRDD" cDSN := "MYSQL" lConn := Connect(@cRDD, cDSN) IF ! lConn *SysRefresh() ; MsgAlert("Não foi possível estabelecer uma conaxão com o servidor de banco de dados. Favor tentar novamente","Aviso") ENDIF RETURN(lConn) FUNCTION SQLArray(c_Sql, l_Err) LOCAL a_Array, nErr, nPos STORE 0 TO nErr, nPos l_Err := .F. a_Array := {} SQL := c_Sql TRY oSql := SR_GetConnection() apCode := SR_SQLParse( SQL, @nErr, @nPos ) SQL := SR_SQLCodeGen( apCode, { 1000 }, oSql:nSystemID ) nErr := oSql:Exec( SQL,,.t.,@a_Array) CATCH oErr l_Err := .T. n:=1 cFile := GetCurDir()+"\errorlog\Err_"+StrZero(n,4)+".Log" while File(cFile) n++ cFile := GetCurDir()+"\errorlog\Err_"+StrZero(n,4)+".Log" end FileWrite(cFile, oErr:Description) SysRefresh() MsgAlert("Erro ao tentar obter os dados."+CRLF+CRLF+; "Erro: "+oErr:Description+CRLF+CRLF+; "Favor reconectar e tentar novamente.","Erro") END RETURN( a_Array ) Espero que ajude. Theotokos 1 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.