kapiaba Posted August 22, 2014 Report Share Posted August 22, 2014 Documentando: http://forums.fivetechsupport.com/viewtopic.php?f=6&t=28917&hilit=sql abs, Quote Link to comment Share on other sites More sharing options...
oribeiro Posted August 22, 2014 Report Share Posted August 22, 2014 Esse tópico de SQL apresenta tantos motores que eu fiquei confuso. Quero migrar a minha aplicação para SQL para evitar ter que reindexar arquivos e futuramente para gerar partes da minha aplicação na nuvem. Mas, sinceramente, não sei por conte começar. Quote Link to comment Share on other sites More sharing options...
miragerr Posted August 22, 2014 Report Share Posted August 22, 2014 Ola amigos Oscar realmente existem varias formas e varios SGDB, voce devera optar por aquele que você melhor se identificar, no caso de uso em NUVEM, EU "particularmente" recomendaria o POSTGRES, mais tem o MariaDB o qual este substitui o Mysql em velocidade com folga e com os mesmos comandos e DLL do Mysql, isso caso voce queira migrar de Mysql para MariaDB. Exite a SQLRDD que te dá todo este suporte de migração sem voce ter que refazer todo o teu codigo, apenas convertendo de DBF para SQL, exceto que voce tera que se conectar no SGDB de sua preferencia. Eu mesmo quando converti meus DBFs para Mysql que foi minha opção inicial, fiquei usando os comandos xBASE por um bom tempo, o qual ainda uso até hoje, exceto para relatorios, pois acabou os DO WHILE !EOF e varias condições dentro do DO WHILE. Uma pequena amostra de como uso por exemplo para fazer um somatorio de NFe por CST e CFOP. Select a.arcodigo AS COD_ITEM, a.arqtdent AS QTD, b.arunidad AS UNID, SUM( COALESCE( a.arvtotal, a.arvrunit * a.arqtdent ) ) AS VL_ITEM, sum( a.arvrdesc ) AS VL_DESC, COALESCE( d.arcstopr, a.arcodcst ) AS CST_ICMS, a.arcfop AS CFOP, d.arcodopr AS COD_NAT, SUM( ROUND( IF( a.arvricms IS NOT NULL,a.arvrbase_icms, 0 ), 2 ) ) AS VL_BC_ICMS, a.arpericm AS ALIQ_ICMS, SUM( ROUND( COALESCE( a.arvricms, 0 ), 2 ) ) AS VL_ICMS, SUM( ROUND( COALESCE( a.arvrbs_icm_st, 0 ), 2 ) ) AS VL_BC_ICMS_ST, 0 AS ALIQ_ST, SUM( ROUND( COALESCE( a.arvricms_st, 0 ), 2 ) ) AS VL_ICMS_ST, ROUND( IF( COALESCE( d.arcstopr, a.arcodcst ) = '20', SUM( a.arvrunit * a.arqtdent ) - SUM(arvrbase_icms), 0 ), 2 ) AS VL_RED_BC, IF( a.arcst_pis = '0.', '', a.arcst_pis ) AS CST_PIS, SUM( ROUND( COALESCE( a.arvbcpis, 0 ), 2 ) ) AS VL_BC_PIS, a.arperpis AS ALIQ_PIS, SUM( ROUND( COALESCE( a.arvalpis, 0 ), 2 ) ) AS VL_PIS, IF( a.arcst_cof = '0.', '', a.arcst_cof ) AS CST_COF, SUM( ROUND( COALESCE( a.arvbccof, 0 ), 2 ) ) AS VL_BC_COF, a.arpercof AS ALIQ_COF, SUM( ROUND( COALESCE( a.arvalcof, 0 ), 2 ) ) AS VL_COF, a.arperipi AS ALIQ_IPI, SUM( ROUND( COALESCE( a.arvripei, 0 ), 2 ) ) AS VR_IPI FROM ent2prod AS a LEFT JOIN pg02 c ON a.arcodfor = c.arcodfor AND c.sr_deleted != 'T' LEFT JOIN estoque b ON a.arcodigo = b.arcodigo LEFT JOIN natopera d ON a.arcfop = d.arnroopr WHERE a.arnrnota = '0000139362' AND a.arcodfor = '0039' AND a.ardtentr = str_to_date( '20140731', '%Y%m%d' ) AND a.sr_deleted != 'T' GROUP BY 6, 7, a.arpericm com este codigo o SGDB me devolve o resultado prontamente e não preciso ficar fazendo Sub-condiçoes dentro do DO WHILE. Qualquer coisa estamos aqui para SOMAR e MULTIPLICAR, nada de DIVIDIR ou DIMINUIR. rafaoasys 1 Quote Link to comment Share on other sites More sharing options...
oribeiro Posted August 23, 2014 Report Share Posted August 23, 2014 Jackson, É um prazer re-estabelecer o contato com você que já me ajudou muito no passado. Lembro que você me incentivou a mudar para SQL mas o cabeça dura aqui ainda não fez isso, mas eu estou tendo alguns problemas com DBF/CDX em algumas redes instáveis de clientes que insistem em colocar a culpa no programa e eu imagino que um banco de dados SQL irá solucionar o meu problema. Estou certo? Em dezembro eu adquiri a atualização do Fivewin com o Gilmer visando utilizar o SQLRDD mais recente, mas não obtive muito sucesso. O problema maior que tive com SQL foi que o meu sistema é multi-empresas com as tabelas distribuídas em pastas da seguinte forma: C:\SISTEMA\ (aqui ficam as tabelas compartilhadas por todas as lojas do grupo: CLIENTES, PRODUTOS, FORNECEDORES, ETC.) C:\SISTEMA\00001 (aqui ficam as tabelas exclusivas da loja UM: NOTAS FISCAIS, MOVIMENTO NO ESTOQUE, CAIXA, CONTAS, ETC.) C:\SISTEMA\00002 (aqui ficam as tabelas exclusivas da loja DOIS: NOTAS FISCAIS, MOVIMENTO NO ESTOQUE, CAIXA, CONTAS, ETC.) etc... Com o DBF/CDX eu tenho uma função que CRIA e ABRE as tabelas na pasta certa da empresa que está utilizando o sistema, não consegui fazer isso no PostGres. Você tem alguma sugestão? Obrigado, Quote Link to comment Share on other sites More sharing options...
miragerr Posted August 23, 2014 Report Share Posted August 23, 2014 Ola Oscar. Você tem 2 possibilidades de usar de forma parecida como o que você faz hoje em DBF. 1a. Recriar todas as suas tabelas com um campo COD_EMPRESA. 2a Usar o MariaDB e fazer uma verificação de o DB de determinada empresa ja existe, caso não exista é só criar o mesmo, assim como voce faz em DBF, só que vai ser no SGDB, não em diretorio. Quando a problemas em REDES INSTAVEIS, pode ter certeza que mesmo em SGDB voce tera problemas tambem, o SGDB não faz milagres quanto a isso, ele pode até amenizar os problemas, mais isso pode acarretar em problemas MAIORES posteriormente, o que te aconselho e dependendo do cliente, faça um acordo com ele, resolva VOCÊ mesmo o problema da REDE, invista na infra estrutura do cliente, no qual se o problema for resolvido e dependendo do acordo, o cliente lhe reembolsa o seu valor investido, digo isso pois ja fiz isso com clientes meus, no meu caso valeu a pena, pois atraves deste cliente ganhei mais 3. Se precisar de ajuda para mudar para SGDB posso te dar uma consultorias e ideias de como voce devera fazer para contornar teu problema de MULTI-EMPRESAS. Espero ter ajudado. Quote Link to comment Share on other sites More sharing options...
oribeiro Posted August 24, 2014 Report Share Posted August 24, 2014 Valeu Jackson, Aprecio muito a sua solicitude. Vou estudar qual é o melhor caminho e então solicitarei a sua ajuda. Um grande abraço na família, Quote Link to comment Share on other sites More sharing options...
emotta Posted August 25, 2014 Report Share Posted August 25, 2014 Vou explicar minha experiencia que começou em novembro/2006.... Comprei o Xharbour Enterprise + SQLRDD... Adaptamos nosso sistema para funcionar em DBF e SQL usando o mesmo codigo, porem sem nenhuma melhoria com comandos de banco. Chamo isso de fase 1, que é onde apenas migramos nossa base para um banco de dados sem obter as melhorias que são possiveis em um banco de dados. Desta maneira, alguns procedimentos ficam até mais lentos, porem com a segurança de um banco de dados por trás. Já em 2007 iniciamos o que chamo de fase 2, que é um passo intermediário para começar a usar mais recursos de banco, porem sem muitas melhorias de código. É o momento que se utiliza muito a funcao SR_SETFILTER onde voce faz um filtro que roda direto no banco de dados e evita os famosos SKIP/LOOP em relatórios ou processos de fechamento. Isso já melhora bem a performance, mas ainda não é o ideal. Com tudo isso estabilizado iniciamos a fase 3, onde temos vários IFs dentro da aplicação que executa de uma maneira em DBF porem quando o cliente está com um banco de dados SQL usamos SELECTs para obter as informações, ao invez de fazer DBSEEK/WHILE/ENDDO/ETC. A fase 4 vamos iniciar agora que é a utilização de STORED PROCEDURES e também INSERT/UPDATE/DELETE em todas as rotinas. Não sei avaliar outras soluções para banco mas cito aqui um caso real de 8 anos usando SQLRDD e funcionando. Vale a pena e quando se tem duvidas é só acionar o suporte do xHarbour Comercial que é muito eficiente. Abraços e boa sorte Esse tópico de SQL apresenta tantos motores que eu fiquei confuso. Quero migrar a minha aplicação para SQL para evitar ter que reindexar arquivos e futuramente para gerar partes da minha aplicação na nuvem. Mas, sinceramente, não sei por conte começar. Quote Link to comment Share on other sites More sharing options...
SAOliveira Posted August 25, 2014 Report Share Posted August 25, 2014 Para os que usam SQLLib o MariaDB funciona, pelo menos comigo. Se puderem testar. Quote Link to comment Share on other sites More sharing options...
oribeiro Posted August 26, 2014 Report Share Posted August 26, 2014 Eduardo Motta, Qual foi o banco de dados que vocês adotaram? O banco está rodando local ou na nuvem? Obrigado, Quote Link to comment Share on other sites More sharing options...
kleyber Posted August 26, 2014 Report Share Posted August 26, 2014 Oscar, Para usar bancos SQL é necessário estudar SQL e como o SGBD controla o banco pra você. Estamos acostumados a fazer com que nossos sistemas gerenciem os DBFs e isso com bancos SQL não ocorre. O pensamento em relação a banco de dados muda drasticamente, até mesmo porque DBF não é banco de dados e sim repositório de dados. Isso se aprende quando estudamos a fundo bancos SQL. Muitas vezes tentamos usar o SQL com linguagem xbase e isso não tira o melhor que o banco SQL oferece. Estude bem SQL antes de começar a tua migração. Existem vários textos na net mostrando como se usa bancos SQL. Não é complicado, mas é trabalhoso. Só que no final o resultado é compensador. Quanto a migração, eu faria como o Eduardo Motta citou, indo por partes, mas sempre tendo o foco de usar ao máximo o que o SQL tem a oferecer. Minha opinião. kapiaba and rafaoasys 2 Quote Link to comment Share on other sites More sharing options...
oribeiro Posted August 27, 2014 Report Share Posted August 27, 2014 Obrigado Kleyber, Vou começar a estudar esse assunto. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 27, 2014 Author Report Share Posted August 27, 2014 Buenas, alguém já usou este QSRDD by quiquesoft? http://www.quiquesoft.com/descargas/qsRdd.zip http://fivetechsupport.com/forums/viewtopic.php?f=6&t=25847 Obg. abs. Quote Link to comment Share on other sites More sharing options...
oribeiro Posted November 3, 2014 Report Share Posted November 3, 2014 Pessoal, Criei coragem e vou iniciar a troca do DBF para PostGres. Pretendo seguir os seguintes passos: 1º) Intalar o banco no meu servidor Windows Server 2008: 2º) Começar usando o SQLRDD release november-2009 (05/12/2010) 3º) Usar as funções nativas do SQLRLL 4º) Depois de estabilizado, passar a usar o SR_SETFILTER para evitar SKIP/LOOP 5º) Passar a usar SELECT no lugar de WHILE, DBSEEK, etc 6º) Inlcuir as TRIGGERS e STORED POCEDURES no banco 7º) Liberar o banco para acesso através da Internet e iniciar o desenvolvimento de algumas aplicações Web usando WebDev. Vou precisar muito da ajuda dos colegas e vou deixar registrado nesse espaço toda a experiência para que outros se beneficiem. Passo 1: Instalar o banco - Para começar, qual é a versão do Postgres que eu devo instalar para rodar com o SQLRDD Nov/2009. No site, a última é a versão (postgresql-9.3.5-3-windows), mas eu li no site do xHarbour.com que o SQLRDD suporta o PostGres na versão 9.0, encontrei no site essa instalação (postgresql-9.0.18-2-windows) - É essa que vocês estão utilizando com o SQLRDD? - Vocês tem alguma sugestão de respostas que eu devo dar ao instalador no momento da instalação? - Qual ferramenta devo usar para administração desse banco? Aguardo, obrigado. rafaoasys 1 Quote Link to comment Share on other sites More sharing options...
miragerr Posted November 3, 2014 Report Share Posted November 3, 2014 Ola amigo Oscar Voce fez uma boa escolha quanto ao SGDB, no caso da versão da SQLRDD ai não sei lhe dizer, mais voce pode testar instalando a ultima versção do Postgres, creio que ira funcionar sim. espero ter ajudado. Quote Link to comment Share on other sites More sharing options...
oribeiro Posted November 4, 2014 Report Share Posted November 4, 2014 Jackson, Espero que estejas bem, tu e tua família. Obrigado pelo incentivo. Aliás, se eu estivesse acatado a sua sugestão ha anos atrás, já estaria utilizando o SQL. Bem! Não é tarde demais. A sua ajuda é muito bem vinda porque, apesar de ter estudado a liguagem SQL, estou totalmente no escuro quanto a utilizá-la no Fivewin. Ontem eu instalei o postgresql-9.0.18-2-windows. Depois alterei o meu batch de compilação incluindo as linhas: SQL = C:\SQLRDD\LIB\BORLAND LIBFILES = $(FWH)\lib\fivehx.lib $(FWH)\lib\fivehc.lib lang.lib vm.lib rtl.lib rdd.lib macro.lib pp.lib dbfntx.lib dbfcdx.lib dbffpt.lib common.lib gtgui.lib codepage.lib ct.lib tip.lib pcrepos.lib hsx.lib hbsix.lib zlib.lib hbzip.lib png.lib $(CC_DIR)\lib\import32.lib $(CC_DIR)\lib\cw32.lib $(CC_DIR)\lib\psdk\msimg32.lib $(CC_DIR)\lib\psdk\psapi.lib $(SQL)\sql.lib $(SQL)\oci.lib $(SQL)\fbclient_bc.lib $(SQL)\libpq.lib $(SQL)\odbccp32.lib $(SQL)\libmysql.lib $(CC_DIR)\lib\psdk\odbc32.lib Daí, inclui as seguintes funções que eu encontrei no fórom para manipulação de BD: ****************************************************************************** STATIC FUNCTION SQLCONECTAR() ****************************************************************************** // BANCO DE DADOS SQL VIA FTP // LOCAL oDlg PUBLIC cEND_FTP :='ftp.xpg.com.br' PUBLIC cDIR_FTP :='/sist/integr/' PUBLIC cARQ_FTP :='oasys.sia' PUBLIC cUSU_FTP :='oasysitu' PUBLIC cSEN_FTP :='12345678' cIConn := cHost := cNomTab := cPass := cUser := Space(10) cIniFile := pDado+"OASMEMO.MEM" aIConn := {"MYSQL","POSTGRES","FIREBIRD"} IF FILE(cIniFile) cConnTipo := GetPvProfString( "CONECTE", "TipoConn", cIConn , cIniFile) cConnBase := DEcrypt( GetPvProfString( "CONECTE", "DataBase", cNomTab , cIniFile) ) cConnName := DEcrypt( GetPvProfString( "CONECTE", "HostName", cHost , cIniFile) ) cConnPass := DEcrypt( GetPvProfString( "CONECTE", "Password", cPass , cIniFile) ) cConnUsrs := DEcrypt( GetPvProfString( "CONECTE", "User" , cUser , cIniFile) ) ENDIF cConnName:="" // Para foçar a conexão ao banco IF EMPTY(cConnName) cHost := "localhost " cPass := SPACE(10) cIConn := "MySql" lConecte := .F. DEFINE DIALOG oDlg FROM 0,0 TO 13,30 TITLE "(OASyS) BD Conexão" STYLE NOR(WS_POPUPWINDOW) @ 0.9,001 SAY "Banco:" OF oDlg @ 1.8,001 SAY "Servidor:" OF oDlg @ 2.7,001 SAY "Usuário:" OF oDlg @ 3.6,001 SAY "Senha:" OF oDlg @ 001,7.5 COMBOBOX oIConn VAR cIConn ITEMS aIConn SIZE 50,70 OF oDlg @ 2.2,7.5 GET oHost VAR cHost SIZE 50,10 OF oDlg WHEN .T. PICTURE "@X!" @ 3.2,7.5 GET oUser VAR cUser SIZE 50,10 OF oDlg WHEN .T. PICTURE "@X!" @ 4.2,7.5 GET oPass VAR cPass SIZE 50,10 OF oDlg WHEN .T. PICTURE "@X!" @ 004,001 ButtonBmp oBtn1 PROMPT "Conecta" RESOURCE "B_OK1" SIZE 49,17 OF oDlg ACTION (lConecte:=.T.,oDlg:End()) @ 004,010 ButtonBmp oBtn2 PROMPT "Cancela" RESOURCE "B_CANC1" SIZE 49,17 OF oDlg ACTION (lConecte:=.F.,oDlg:End()) CANCEL ACTIVATE DIALOG oDlg CENTERED IF !(lConecte) MsgStop("O banco de dados não foi conectado","(OASyS) Conexão ao BD") Return .F. ELSE WritePProString( "CONECTE", "TipoConn", cIConn , cIniFile) WritePProString( "CONECTE", "DataBase", Encrypt(cNomTab) , cIniFile) WritePProString( "CONECTE", "HostName", Encrypt(cHost) , cIniFile) WritePProString( "CONECTE", "Password", Encrypt(cPass) , cIniFile) WritePProString( "CONECTE", "User" , Encrypt(cUser) , cIniFile) cConnTipo := GetPvProfString( "CONECTE", "TipoConn", cIConn , cIniFile) cConnBase := DEcrypt( GetPvProfString( "CONECTE", "DataBase", cNomTab , cIniFile) ) cConnName := DEcrypt( GetPvProfString( "CONECTE", "HostName", cHost , cIniFile) ) cConnPass := DEcrypt( GetPvProfString( "CONECTE", "Password", cPass , cIniFile) ) cConnUsrs := DEcrypt( GetPvProfString( "CONECTE", "User" , cUser , cIniFile) ) ENDIF ENDIF // Bibliotecas do SQLRDD // #include "sqlrdd.ch" REQUEST SQLRDD // SQLRDD should be linked in REQUEST SQLEX // SQLRDD Extreme should be linked in if cIConn="MYSQL" #include "mysql.ch" // Needed if you plan to use native connection to MySQL REQUEST SR_MYSQL // Needed if you plan to use native connection to MySQL elseif cIConn="POSTGRESS" #include "pgs.ch" // Needed if you plan to use native connection to Postgres REQUEST SR_PGS // Needed if you plan to use native connection to Postgres elseif cIConn="FIREBIRD" #include "firebird.ch" // Needed if you plan to use native connection to Firebird #include "vKEY.ch" // Needed if you plan to use native connection to Firebird #include "BLOB.ch" // Needed if you plan to use native connection to Firebird REQUEST SR_FIREBIRD // Needed if you plan to use native connection to Firebird elseif cIConn="ORACLE" #include "oracle.ch" // Needed if you plan to use native connection to Oracle REQUEST SR_ORACLE // Needed if you plan to use native connection to Oracle else REQUEST SR_ODBC // Needed if you plan to connect with ODBC endif rddSetDefault("SQLRDD") CONECTAR(cConnTipo,cConnBase,cConnName,cConnPass,cConnUsrs) RETURN NIL ****************************************************************************** STATIC FUNCTION CONECTAR(cConnTipo,cConnBase,cConnName,cConnPass,cConnUsrs) ****************************************************************************** LOCAL cCriaBat:="", cConString1, nCon1, cBANCO:="", nError, lConectou:=.F. //lower(ALLTRIM(cConnUsrs)) cSayNomeBd:="Conectado ao Banco de Dados "+ cConnTipo IF ALLTRIM(cConnTipo) == "POSTGRES" // SE A CONEXÃO FOR POSTGRES cCriaBat:="CD "+CurDrive()+":\"+CurDir()+"\DLLS"+CRLF cCriaBat+="SET PGPASSWORD="+lower(ALLTRIM(cConnPass))+CRLF cCriaBat+="createdb -Ttemplate0 -U"+lower(ALLTRIM(cConnUsrs))+" -EWin1252 "+alltrim(LOWER(cConnBase))+CRLF cCriaBat+="SET PGPASSWORD=0"+CRLF cConString1:="pgs="+cConnName + ";" + "uid="+lower(ALLTRIM(cConnUsrs)) + ";"+"dtb="+alltrim(LOWER(cConnBase)) + ";" +"pwd="+lower(ALLTRIM(cConnPass))+";PRT=5432" nCon1 := SR_AddConnection( CONNECT_POSTGRES, cConString1 ) IF nCon1 < 0 IF MSGYESNO("BANCO DE DADOS NÃO ENCONTRADO, DESEJA CRIÁ-LO?","CONEXÃO MAL SUCEDIDA") MemoWrit( "conect.bat", cCriaBat ) ShellExecute(oWnd, "Open", "conect.bat") MsgRun("Criando o Banco de Dados. Esta operação pode demorar alguns minutos...","Aguarde...",{|| CONECTANDO(@nCon1,cConString1) }) ferase("conect.bat") ELSE QUIT ENDIF ELSE lConectou:=.T. ENDIF ELSEIF ALLTRIM(cConnTipo) == "MYSQL" // SE A CONEXÃO FOR MYSQL cConString1 :="MySQL="+lower(ALLTRIM(cConnName)) + ";" + "UID="+lower(ALLTRIM(cConnUsrs))+ ";"+"pwd="+lower(ALLTRIM(cConnPass))+ ";" +"dtb="+alltrim(LOWER(cConnBase))+";PRT=3306" nCon1 := SR_AddConnection( CONNECT_MYSQL, cConString1 ) IF nCon1 < 0 IF ! MsgYesNo("O banco de dados "+lower(ALLTRIM(cConnName))+" não existe. Gostaria de criá-lo?","Criar banco de dados") QUIT ELSE cConString1:="MySQL="+lower(ALLTRIM(cConnName)) + ";" + "UID="+lower(ALLTRIM(cConnUsrs))+ ";"+"pwd="+lower(ALLTRIM(cConnPass))+ ";" +"dtb=mysql"+";PRT=3306" nCon1 := SR_AddConnection( CONNECT_MYSQL, cConString1 ) IF nCon1 < 0 MsgInfo("Erro de Conexão. Veja o Arquivo Sqlerror.log para mais Detalhes.", "Atenção, Erro") RETURN (.F.) ELSE oSql:= SR_GetConnection() oSql:exec("CREATE DATABASE "+alltrim(LOWER(cConnBase))) MsgWait( "Novo DataBase Criado "+alltrim(LOWER(cConnBase)), "OK",2 ) SR_EndConnection( nCon1 ) //--> Encera a Conexao com o dataBase "MySql cConString1:="MySQL="+lower(ALLTRIM(cConnName))+ ";" + "UID="+lower(ALLTRIM(cConnUsrs))+ ";"+"pwd="+lower(ALLTRIM(cConnPass))+ ";" +"dtb="+alltrim(LOWER(cConnBase))+";PRT=3306" nCon1 := SR_AddConnection( CONNECT_MYSQL, cConString1 ) ENDIF ENDIF ENDIF ELSEIF ALLTRIM(cConnTipo) == "FIREBIRD" // SE A CONEXÃO FOR FIREBIRD 93.104.215.135/cpanel cBANCO:=if(lower(ALLTRIM(cConnName))=='localhost',CurDrive()+":\"+CurDir()+"\BANCOS","\\"+lower(ALLTRIM(cConnName))+"\"+CurDrive()+"\"+CurDir()+"\BANCOS") IF ! IsDirectory( cBANCO ) nError := MakeDir( cBANCO ) IF nError == 5 MSGINFO( "Error ao Criar o seguinte diretorio: "+cBANCO,"Erro de Criação" ) RETURN .F. ENDIF ENDIF IF !FILE(cBANCO+"\"+alltrim(LOWER(cConnBase))+".fdb") IF FBCreateDB( lower(ALLTRIM(cConnName))+":"+if(lower(ALLTRIM(cConnName))=='localhost',CurDrive()+":\"+CurDir()+"\BANCOS\"+ALLTRIM(LOWER(cConnBase))+".fdb",; CurDrive()+":\"+CurDir()+"\BANCOS\"+ALLTRIM(LOWER(cConnBase))+".fdb"), lower(ALLTRIM(cConnUsrs)), lower(ALLTRIM(cConnPass)),"8192","ISO8859_2",3) # SQL_SUCCESS alert("Erro ao criar o banco de dados para o Firebird") quit ELSE MsgWait( "Novo DataBase Criado "+alltrim(LOWER(cConnBase)), "OK",2 ) ENDIF ENDIF cConString1:="FIREBIRD="+ALLTRIM(LOWER(cConnName))+":"+if(lower(ALLTRIM(cConnName))=='localhost',CurDrive()+":\"+CurDir()+"\BANCOS\"+ALLTRIM(LOWER(cConnBase))+".fdb",; CurDrive()+":\"+CurDir()+"\BANCOS\"+ALLTRIM(LOWER(cConnBase))+".fdb")+";uid="+lower(ALLTRIM(cConnUsrs))+";pwd="+lower(ALLTRIM(cConnPass))+";charset=ISO8859_2" nCon1 := SR_AddConnection( CONNECT_FIREBIRD, cConString1 ) IF nCon1 < 0 MsgInfo("Erro de Conexão. Veja o Arquivo Sqlerror.log para mais Detalhes.", "Atenção, Erro") RETURN (.F.) ENDIF ENDIF RETURN NIL ****************************************************************************** STATIC FUNCTION CONECTANDO(nCon,cConString1) ****************************************************************************** LOCAL lConectar :=.F. DO WHILE lConectar == .F. nCon := SR_AddConnection( CONNECT_POSTGRES, cConString1 ) IF nCon < 0 lConectar:=.F. ELSE lConectar:=.T. ENDIF LOOP ENDDO RETURN lConectar Ao fazer isso e compilar, o sistema deu a seguinte mensagem de erro: O MVEND.EXE parou de funcionar. E não abre o sistema. Se eu removo essas funções ele abre. O que tem de errado nelas? Aguardo, obrigado. Quote Link to comment Share on other sites More sharing options...
oribeiro Posted November 4, 2014 Report Share Posted November 4, 2014 Quando eu incluo a linha: REQUEST SR_PGS // Needed if you plan to use native connection to Postgres O executável não roda mais. Dá a mensagem: O MVEND.EXE parou de funcionar. O Windows pode verificar uma solução online para o seu problema. Quote Link to comment Share on other sites More sharing options...
miragerr Posted November 4, 2014 Report Share Posted November 4, 2014 Ola Oscar As DLLs estão no mesmo diretorio da aplicação. Fico no aguardo. Quote Link to comment Share on other sites More sharing options...
oribeiro Posted November 5, 2014 Report Share Posted November 5, 2014 Quais dessas DLLs são necessárias para o PostGres? Além dessas existem outras necessáras? comerr32.dll fbclient.dll krb5_32.dll libeay32.dll libiconv-2.dll libintl-2.dll libmysql.dll libpq.dll oci.dll ssleay32.dll Quote Link to comment Share on other sites More sharing options...
oribeiro Posted November 5, 2014 Report Share Posted November 5, 2014 Instalei o PostGres 8.3 que é o que aparece nos exemplos do SQLRDD. Coloquei todas as DLL´s da pasta SQLRDD\DLL na pasta da minha aplicação. Ao compilar ele indica que não encontrou o banco e que vai criar e daí fica travado nessa função: ****************************************************************************** STATIC FUNCTION CONECTANDO(nCon,cConString1) ****************************************************************************** LOCAL lConectar :=.F. DO WHILE lConectar == .F. nCon := SR_AddConnection( CONNECT_POSTGRES, cConString1 ) IF nCon < 0 lConectar:=.F. ELSE lConectar:=.T. ENDIF LOOP ENDDO RETURN lConectar Os parâmetros que estão sendo passados para ela são: Conteúdo do nCon: -1 Conteúdo do cConString1: pgs=servsys;uid=postgres;dtb=oasysbd;pwd=postgres;PRG=5432 Conteúdo do Conect.bat: O:\SIST\WOASYS\SET PGPASSWORD=postgres createdb -Ttemplate0 -Upostgres -EWin1252 oasysbd SET PGPASSWORD=0 O que pode estar causando esse travamento? O banco não está sendo criado. Quote Link to comment Share on other sites More sharing options...
rochinha Posted November 5, 2014 Report Share Posted November 5, 2014 Amiguinhos, No seguinte trecho de código encontrei uma incoerencia, ou seja, não entendi, me desculpe pela critica, mas explicarei: if cIConn="MYSQL" #include "mysql.ch" // Needed if you plan to use native connection to MySQL REQUEST SR_MYSQL // Needed if you plan to use native connection to MySQL elseif cIConn="POSTGRESS" #include "pgs.ch" // Needed if you plan to use native connection to Postgres REQUEST SR_PGS // Needed if you plan to use native connection to Postgres elseif cIConn="FIREBIRD" #include "firebird.ch" // Needed if you plan to use native connection to Firebird #include "vKEY.ch" // Needed if you plan to use native connection to Firebird #include "BLOB.ch" // Needed if you plan to use native connection to Firebird REQUEST SR_FIREBIRD // Needed if you plan to use native connection to Firebird elseif cIConn="ORACLE" #include "oracle.ch" // Needed if you plan to use native connection to Oracle REQUEST SR_ORACLE // Needed if you plan to use native connection to Oracle else REQUEST SR_ODBC // Needed if you plan to connect with ODBC endif Os termos #define e #include não são dinâmicos para que seu uso possa ser feito em estruturas if..end, case..endcase, etc. Tanto #define como #include serão manipulados somente no momento da compilação e portanto suas definições e conteúdos serão inclusos ao código resultado. Veja o resultado de um .PPO. Mesmo que você tenha a estrutura: if critica1 #include "header1.ch" else critica2 #include "header2.ch" else critica3 #include "header3.ch" endif E dentro dos cabeçalhos você tenha variáveis de mesmo nome, ao compilar, a variável do ultimo cabeçalho irá suplantar as variáveis anteriores e a estrutura if..endif perderá seu comportamento. Talvez, por isto, você vem obtendo erros. Agora se usar assim: #define cMotorSQL sim #ifdef cMotorSQL #include "headerSQL.ch" #else #include "headerDBF.ch" #endif Se cMotorSQL estiver definido somente o conteúdo de headerSQL.ch será embutido na compilação. Resumindo, voce tem estruturas que deve usar somente na compilação e outras para momento da execução. Eu ainda não uso SQLMix( ainda estou indeciso ), mas se fosse usar vários esquemas ao mesmo tempo o inicio de meu código ficaria assim: #include "mysql.ch" #include "pgs.ch" #include "firebird.ch" #include "vKEY.ch" #include "BLOB.ch" #include "oracle.ch" REQUEST SR_MYSQL REQUEST SR_PGS REQUEST SR_FIREBIRD REQUEST SR_ORACLE REQUEST SR_ODBC FUNCTION MAIN() ... CODIGO ... RETURN NIL Desde que é claro, os conteúdos não se choquem e suplantem variáveis. Bom trabalho. Quote Link to comment Share on other sites More sharing options...
oribeiro Posted November 5, 2014 Report Share Posted November 5, 2014 Valeu a dica Rochinha. O código funcionou, faltava colocar as DLL´s na pasta da aplicação. Agora não estou conseguindo conectar com o banco postgres e criar o banco. Obrigado. Quote Link to comment Share on other sites More sharing options...
aferra Posted November 5, 2014 Report Share Posted November 5, 2014 Aproveitando, onde encontro informações sobre o SQLMIX ? Quote Link to comment Share on other sites More sharing options...
oribeiro Posted November 6, 2014 Report Share Posted November 6, 2014 Pessoal, É possível estar havendo alguma incompatibilidade entre o SQLRDD e o (Fwh1312 + xHarbour 1.2.3 + BCC582) e por esse motivo é que ele não cria o banco? Pergunto isso porque os SAMPLES do SQLRDD funcionam com versões anteriores do FWH, mas não estão funcionando com essa que eu estou usando. Alguém está rodando o SQLRDD com essa versão do FWH? Aguardo, obrigado. Quote Link to comment Share on other sites More sharing options...
oribeiro Posted November 11, 2014 Report Share Posted November 11, 2014 Registrando a minha experiência: 1º) Intalei o banco Postgres 8.3 no meu servidor Windows Server 2008: 2º) Baixei o SQLRDD DEMO do xHarbour.com 3º) Passei a usar as funções nativas do SQLRLL Até aqui eu criei o banco usando o PgAdmin3 (não consegui criá-lo por dentro da aplicação). Entretanto, todas as tabelas e chaves do banco foram criadas normalmente pela aplicação na rotina de organização dos arquivos. O próximo passo agora é testar todas as funções da aplicação e fazer os ajustes necessários para que tudo funcione com o Banco assim como já rodavam com DBF. 4º) Depois de estabilizado, vou usar o SR_SETFILTER para evitar SKIP/LOOP 5º) Passar a usar SELECT no lugar de WHILE, DBSEEK, etc 6º) Inlcuir as TRIGGERS e STORED POCEDURES no banco 7º) Liberar o banco para acesso através da Internet e iniciar o desenvolvimento de algumas aplicações Web usando WebDev. rafaoasys 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.