Página 1 de 1

Como acessar programa pela Internet ????

Enviado: 11 Jan 2007 07:19
por ReinaldoFreitas
Ola Amigos, tenho um sistema rodando em um cliente, em uma rede com 10 micros, so que agora ele quer que o servidor fique na casa dele e os micros da empresa acessem o programa pela internet, tem como fazer isso, sem mudar de clipper para xharbour ??? Ou so em Xharbour vou conseguir fazer isso ??

OBrigado................

Enviado: 11 Jan 2007 10:06
por rochinha
Amiguinho

Voce poderia fazer isto com Clipper mas usando Harbour voce tera maiores recursos.

De uma olhada no topico "Vejam um programa Xharbour..." como ele cresce a cada dia.

Voce pode usar o Harbour como eu uso ou xHarbour ou até Clipper com a solução ali proposta.

Enviado: 11 Jan 2007 14:58
por Stanis Luksys
Oi amigo,

Se quiser dar uma olhada em harbour com acesso nativo a mysql, da uma olhadinha neste meu exemplo com fontes:

http://www.luksyssoft.com.br/index.php? ... /index.php

Falou...

Enviado: 11 Jan 2007 16:09
por ReinaldoFreitas
nao tem como acessar com DBF ??? ( use \\no.ip\c\clientes) ou so mudando para SQL ??

obrigado............

Enviado: 11 Jan 2007 21:34
por rochinha
Amiguinho

Se voce quer dar um salto no acesso deverá dar um salto de plataforma também.

O sonho de todo xBaser era poder acessar altas BDs como MySQL, SQLServer e outros.

Infelizmente os RDDs que surgiram eram caros e proprietários como ADS, TopConnect e UltiRoute. Eles até abriam brechas para outros tipos de BDs e acho até que foram descontinuados.

Eu produzi uma biblioteca baseada em códigos de exemplo em VB que fazem acesso a qualquer base de dados, mesmo .DBF a partir de ODBC e JET e não penso em continuar acessando .DBF. Mesmo porque não tem como usar uma Ferrari com motor de Fusca.

Todas os RDDs que voce encontrar por ai com excessão dos nativos NTX, CDX e SIX/NSX(não nativos) trabalharão com .DBF mas para fazer acesso externo voce terá de montar redes baseadas em VPN.

Se quizer acesso real on-line voce terá de usar MySQL, SQLServer(Firebird não posso dizer pois não testei) que permitem o acesso via IP.

Se quizer produzir um aplicativo baseado em novas tecnologias, eu de minha parte posso te oferecer apoio em MySQL+Fivewin+Harbour, pois fora desta triade tem outros profissionais aqui mesmo no forum.

Muita gente confunde Harbour com xHarbour achando ser duas coisas diferentes e só o são comercialmente, programavelmente são a mesma coisa com poucas diferenças e ferramentas.

Para transportar seus .DBFs para MySQL eu tenho uma rotina que gera o script limpinho com estrutura e dados. E usar o MySQL não tem segredo.

Pense bem...

Enviado: 16 Jan 2007 20:42
por Grings
Isso me interessou. MySQL é pago ? aonde consigo para testar ?

Grato!

Enviado: 17 Jan 2007 01:56
por Dudu_XBase
Mysql é gratuito.

// Mysql downloads
http://dev.mysql.com/downloads/

// Casos de Sucesso
http://www.mysqlbrasil.com.br/referencias-cases

Enviado: 17 Jan 2007 08:55
por Grings
Valeu Dudu, vou dar uma olhada.

Enviado: 17 Jan 2007 12:05
por Augusto
rochinha escreveu:Para transportar seus .DBFs para MySQL eu tenho uma rotina que gera o script limpinho com estrutura e dados. E usar o MySQL não tem segredo.
Rochinha... isso muito me interessa... Passar de DBF p/ MySQL é tudo que eu necessito no momento e não tenho uma solução "ainda".... Caso vc possa me passar essa rotina, serei bastante grato...

Falta muito pouco para eu acabar de migrar alguns dos meus principais sistemas para a plataforma WEB (PHP c/ MySQL) e estou perdendo muito tempo para passar os dados de DBF para MySQL... estou fazendo tudo praticamente na mão... Já tentei passar de DBF -> MDB -> MySQL mais não deu certo...

Espero que me ajude...

Aproveitando a oportunidade... Vc tem alguma solução tbm para o link https://pctoledo.org/forum/viewtopic.php?t=5111 ??

Enviado: 18 Jan 2007 08:56
por rochinha
Amiguinho

A rotina que peguei esta logo abaixo mas envie ao seu email ja compilada.

Para compilar

Clipper dbf2sql.prg
Blinker fi dbf2sql,sixcdx lib six3

Para usala:

Entre no diretorio de seus .DBFs, exemplo c:\sistema

cd\sistema

Digite o comando para criar o script, exemplo:

dbf2sql mysql clientes clientes.sql

Entre no diretorio do MySQL:

cd\mysql\bin

Faça a conexao:

c:\mysql\bin>mysql -h127.0.0.1 -uroot p""

Carrega o MySQL com sua tabela

mysql> \. c:/sistema/clientes.sql

Pronto o banco de dados do MySQL ja possui uma tabela chamada clientes.

Salve este trecho como DBF2SQL.PRG

Código: Selecionar todos

/*
   FREEWARE
   Written for Clipper 5.2e by Janusz Piwowarski.
   Home page: http://www.geocities.com/SiliconValley/Heights/9174
   Email: januszp@geocities.com
   
   *----------*
   
   Extract a component from a full file name.

   Syntax:

       FILEDRIVE(<cFullFileName>) --> cDrive
       FILEPATH(<cFullFileName>) --> cPath
       FILENAME(<cFullFileName>) --> cName
       FILEEXT(<cFullFileName>) --> cExtension

   Arguments:

       <cFullFileName> is a full file name to split.

   Returns:

       FILE*() returns one of four <cFullFileName> components.

   Example:

       c:\database>nfmysql database table table.sql
       c:\mysql\bin>mysql -h127.0.0.1 -uroot p""
       mysql> \. c:/database/table.sql
 */

#include "sixcdx.ch"
#include "inkey.ch"
#include "Directry.ch"

#define   CR      chr(13)+chr(10)

REQUEST HARDCR
REQUEST MEMOTRAN
REQUEST STRTRAN

function main(pDbf,pTbl,pSql)
    
    // structure info
    public cName     := ""
    public cType     := ""
    public nLen      := 0
    public nDec      := 0
    
    // splitpath file name
    public cFname    := ""
    
    // # of CDX TAGS
    public nCdx      := 0
    public nTagCount := 0 
    public aTagInfo  := {}      
    public aTags     := {}      
    
    // array for dbf structure
    public aStru     := {}
    
    // output file handle
    public nHandle
    
    // temp var for fwrite
    public cTmp      := ""
    
    // input parameters database & test file
    public cDbf      := ""
    public cTbl      := ""
    public cSql      := ""
    
    REQUEST DBFCDX
    RDDSetDefault("DBFCDX")
        DBSetDriver("DBFCDX")
    cls
    
    // make sure correct amount of parameters entered
    if( pcount() !=3 )
        qout()
        qout("Syntax <database> <tabela> <mySqlMakeFile>")    
        qout()
        qout("Exemplo:")    
        qout()
        qout("DBF2SQL MYSQL CLIENTES CLIENTES.SQL")    
        qout()
        quit
    endif    
    
    // put parameter values into public variables
    cDbf   := pDbf
    cTbl   := pTbl
    cSql   := pSql
    //cFname := b_spltpath(cTbl,3)
    cFname := FILENAME(cTbl)
    
    // see if dbf exists
    if( !file(cTbl+".DBF") )
        qout()
        qout(cDbf+" not found!")
        qout()
        quit
    endif
    
    // open dbf
    use &cTbl shared via "SIXCDX" alias dFile
    //    use &cTbl shared alias dFile
    if file(cTbl+".cdx")
       set index to &cTbl
    endif
    
    // check for open error    
    if( neterr() )
        qout()
        qout("Sharing violation opening "+cTbl)
        qout()
        quit
    endif    
    
    // six driver functions
    nCdx      := sx_IndexCount()
    nTagCount := Sx_TagCount() 
    aTagInfo  := Sx_TagInfo()      
    aTags     := Sx_Tags()      
    
    // put dbf structure into array
    aStru := dFile->(dbstruct())
    
    // create output file
    if( (nHandle := fcreate(cSql,0)) == -1 )
        qout()
        qout("Unable to create "+cSql)
        qout()
        quit
    endif
    
    // log (error) file
    cTmp := "# hbADOx Dump 1.1"+CR+;
            "#"+CR+;
            "# Host: 127.0.0.1 Database: "+lower(cDbf)+CR+;
            "#--------------------------------------------------------"+CR+;
            "# Server version 4.1.15"+CR+CR
    fwrite(nHandle,cTmp,len(cTmp))
    
    // select database
    cTmp := "USE "+lower(cDbf)+";"+CR+CR
    fwrite(nHandle,cTmp,len(cTmp))
    
    cTmp := "#"+CR+;
            "# Estrutura da Tabela '"+lower(cTbl)+"'"+CR+;
            "#"+CR+CR
    fwrite(nHandle,cTmp,len(cTmp))

    // erase table if it already exists
    cTmp := "DROP TABLE IF EXISTS "+lower(cFname)+";"+CR
    fwrite(nHandle,cTmp,len(cTmp))
    
    // mySql command
    cTmp := "CREATE TABLE IF NOT EXISTS "+lower(cFname)+"("+CR
    fwrite(nHandle,cTmp,len(cTmp))
    
    // record numbers auto increment & primary key
    cTmp := "RECNO INT NOT NULL AUTO_INCREMENT,"+CR    
    fwrite(nHandle,cTmp,len(cTmp))
    
    // figure out what we have here
    for i = 1 to len(aStru)
        cName := lower(aStru[i][1])
        cType := aStru[i][2]
        nLen  := aStru[i][3]
        nDec  := aStru[i][4]
        do case
            case cType == "C"
                 cTmp := " "+cName+" CHAR("+alltrim(str(nLen)) +")"            
                 fwrite(nHandle,cTmp,len(cTmp))
            case cType == "M"
                 cTmp := " "+cName+" TEXT"            
                 fwrite(nHandle,cTmp,len(cTmp))
            case cType == "L"
                 cTmp := " "+cName+" TINYINT(1)"            
                 fwrite(nHandle,cTmp,len(cTmp))
            case cType == "D"
                 cTmp := " "+cName+" DATE"            
                 fwrite(nHandle,cTmp,len(cTmp))
            case cType == "N"
                 if( nDec == 0 )
                     cTmp := " "+cName+" INT("+alltrim(str(nLen))+")"
                     fwrite(nHandle,cTmp,len(cTmp))
                 else
                     cTmp := " "+cName+" DOUBLE("+alltrim(str(nLen))+","+alltrim(str(nDec))+")"            
                     fwrite(nHandle,cTmp,len(cTmp))
                 endif
        endcase        
        // see if this is an index key
        cTmp  := isKeyFld(cName,i)+","+CR
        fwrite(nHandle,cTmp,len(cTmp))
    next        
    
    // create indexes
    if( nCdx > 0 )
      for i := 1 to nTagCount    
          // replace + with ,
          cExp := strtran(aTagInfo[i,2],chr(43),chr(44))
          cTmp := "INDEX "+aTagInfo[i,1]+"( "+alltrim(cExp)+" ),"+CR
          fwrite(nHandle,cTmp,len(cTmp))
      next    
    endif  
    
    // make record number the primary key
    cTmp := "PRIMARY KEY(RECNO) );"+CR+CR
    fwrite(nHandle,cTmp,len(cTmp))
    
    cTmp := "#"+CR+;
            "# Inserindo Dados na Tabela '"+lower(cTbl)+"'"+CR+;
            "#"+CR+CR
    fwrite(nHandle,cTmp,len(cTmp))
    // lets write some data
    dFile->(dbgotop())
    nFields := fcount()
    
    do while( !dFile->(eof()) )
        // write to screen
        @0,0 say "Processing Record Number: "
        @0,26 say alltrim(tran(recno(),"999,999,999,999"))
        cMem := ""
        cTmp := ""
        cTmp := "INSERT INTO "+lower(cFname)+" VALUES("+alltrim(str(recno()))+","
        
        for i := 1 to nFields
            
            fVal  := fieldget(i)
            cType := type("FVAL")
            
            // check for float float
            if( cType == "N" )
                cLen = alltrim(str(fVal))
                if( rat(".",str(i)) > 0 )
                    nDec := len(substr(str(i), rat(".",str(i)) + 1))
                else
                    nDec := 0    
                endif
            endif    
            
            do case
                case  cType == "C"
                    cTmp += "'"+escape(fVal)+"'"
                case  cType == "M"
                    cMem := escape(fVal)
                    cTmp += "'"+cMem+"'"
                case  cType == "D"
                    cTmp += "'"+subs(dtos(fVal),1,4)
                    cTmp += subs(dtos(fVal),5,2)
                    cTmp += subs(dtos(fVal),7,2)+"'"
                case  cType == "L"
                    cTmp += iif(fVal,"1","0")
                case cType == "N"
                    if( nDec == 0 )
                        cTmp += cLen            
                    else
                        cTmp += cLen+"."+alltrim(str(nDec))
                    endi
            endcase
            
            //comma seperate fields
            if( i != nFields )
              cTmp += ','
            endif
        
        next
        
        // end of mySql create table statement
        cTmp += ");"+CR
        fwrite(nHandle,cTmp,len(cTmp))
        dFile->(dbskip())
    
    enddo    
    
    // quit mySql
    cTmp := ""
    fwrite(nHandle,cTmp,len(cTmp))
    
    fclose(nHandle)
    dbcloseall()
    qout()
    qout("Finished!!!")
    qout()
    quit

return(NIL)

// see if field is part of index key
function IsKeyFld(cName,nCt)
  local cRv := ""
  local j   := 0
  
  for j := 1 to nTagCount    
    if( cName $ aTagInfo[j,2] ) 
      cRv := " NOT NULL"
      exit
    endif
  next
  return(cRv)

// clean up memo fields
function escape(cText)
    local cStr := trim(cText)
    //  )
    cStr := strtran(cStr,chr(41),chr(32))
    //  (
    cStr := strtran(cStr,chr(40),chr(32))
    //  '
    cStr := strtran(cStr,chr(39),chr(32))
    //  "
    cStr := strtran(cStr,chr(34),chr(32))
    //  .
    cStr := strtran(cStr,chr(46),chr(32))
    //  \
    cStr := strtran(cStr,chr(92),chr(32))
    //

Enviado: 18 Jan 2007 16:03
por rochinha
Amiguinho

Tem jeito sim de voce executar seu aplicativo em Clipper/DOS sem recompila-lo ou fazer outro.

O servidor deverá possuir instalado o Windows 2003 Server ou Windows XP Professional. Prefira Windows 2003 é mais leve, mais poderoso e sem frescuras.

Na instalação ele perguntará quantos usuarios remotos poderão ser admitidos para sessões REMOTE, o padrão é 5 e funciona beleza por 120 dias, depois disto é só desintalar o recursos Terminal Service e reinstalar que funciona mais 120 dias.

Após instalado o Windows é hora de instalar o Terminal Service que fica em Adicionar Remover Programas/Componentes do Windows.

Voce deverá copiar do cd do Windows o Terminal Service Client em um disquete e instala-lo em cada maquina que irá acessar o servidor.

Deverá cadastrar cada usuário que fará o acesso remoto e inclui-los no grupo Usuários da Área Remota.

Se quizer mais de 5 usuários voce deverá comprar a liceça para 10 users chamadas de CAL AlgumaCoisa.

O terminal Service poderá ser instalado em maquinas com somente o Windows 98 e acesso a banda larga, voce executa o programa, digita o IP do servidor e em pouco tempo o Windows 2003 Server passa a ser executado nesta maquina como se estivesse instalado nela.

Procure no Google mais informações sobre este recurso.

Enviado: 18 Jan 2007 18:15
por Everton
Olá Rochinha.

Tem como funcionar sem ter que desinstalar o terminal server e nunca mais ele trava se vc for em configurações painel de controle e adicionar ou remover programas, lá entre no remover ou adicionar componentes do windows instale o componete licenciamento de terminal server que nunca mais expira o prazo. tenta ai depois me fala,pelo menos nos meus cliente funciona que é uma beleza, um forte abraço

Enviado: 18 Jan 2007 23:17
por rochinha
Amiguinho

Na verdade este componente vem com o Windows e é ele que define este tempo limite, talvez o que vc esta usando já seja um com liberação de tempo e esta a parte de seu Windows.

O que vem com Windows tem esta restrição e talvez o seu cliente já tenha comprado o mesmo com a licença para uso do TS.

Enviado: 19 Jan 2007 00:26
por Stanis Luksys
Augusto escreveu:
rochinha escreveu:Para transportar seus .DBFs para MySQL eu tenho uma rotina que gera o script limpinho com estrutura e dados. E usar o MySQL não tem segredo.
Rochinha... isso muito me interessa... Passar de DBF p/ MySQL é tudo que eu necessito no momento e não tenho uma solução "ainda".... Caso vc possa me passar essa rotina, serei bastante grato...

Falta muito pouco para eu acabar de migrar alguns dos meus principais sistemas para a plataforma WEB (PHP c/ MySQL) e estou perdendo muito tempo para passar os dados de DBF para MySQL... estou fazendo tudo praticamente na mão... Já tentei passar de DBF -> MDB -> MySQL mais não deu certo...

Espero que me ajude...

Aproveitando a oportunidade... Vc tem alguma solução tbm para o link https://pctoledo.org/forum/viewtopic.php?t=5111 ??
Olá...

Aí vai um outro aplicativo pra converter DBF pra MySQL facinho facinho de usar... Inicialmente fiz para meu uso, e foi tomando forma conforme minhas necessidades. Atualmente oferece suporte de migração também para Postgre, Firebird, Access e Excel.

http://www.luksyssoft.com.br/downloads/DBFConvert.rar

Este do link é somente um módulo dele, apenas para MySQL... Em breve vou colocar a disposição o código desta parte.

Falou!