Clique abaixo para nos ajudar
Login

Esqueci minha senha

Estamos no Facebook
Buscar
 
 

Resultados por:
 


Rechercher Busca avançada

Quem está conectado
9 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 9 Visitantes :: 2 Motores de busca

Nenhum

[ Ver toda a lista ]


O recorde de usuários online foi de 468 em 1/3/2012, 10:43
Últimos assuntos
» Alterar uma palavra num arquivo de texto
Ontem à(s) 12:02 por Teseu

» Buscar endereço por CEP
3/12/2016, 19:59 por pedrossian

» USAR WEBSERVICE NO VFP9
2/12/2016, 09:50 por AJC

» BANIMENTO DE USUARIO
17/11/2016, 08:31 por FAF

» Impressora Ticket
15/11/2016, 09:20 por clima238

» Gráfico
9/11/2016, 10:43 por hidroluz

» TRANSPOR TABELA
9/11/2016, 10:34 por hidroluz

» MUDANÇA DO .DBF PARA POTSGREE
9/11/2016, 09:12 por AJC

» Website com videoaulas sobre linguagens de programação
8/11/2016, 09:56 por JLDR

» Parceria para desenvolvimento de template em Wordpress
7/11/2016, 19:15 por mindix

» Data fica invertida na planilha que é gerada via programa.
27/10/2016, 11:00 por Linghston

» Maximizar report direto do menu
21/10/2016, 20:48 por Rosangela Pires

» Fechar form com tempo
21/10/2016, 10:15 por Rosangela Pires

» URGENTE: Ajuda com impressora ELGIN-L42
14/10/2016, 09:53 por megasoft

» Opções para gerar NF-e
10/10/2016, 09:07 por mavsinfo

» Google Maps
8/10/2016, 15:08 por Rosangela Pires

» Mysql
5/10/2016, 11:22 por Marcos Guedes

» Acessando Banco em MYSQL de um projeto WORDPRESS
3/10/2016, 10:58 por Marcos Guedes

» OPTION SELECT MOSTRAR CAMPOS QUASE PRONTO
26/9/2016, 21:09 por BobKuspe

» Pesquisa em grid
14/9/2016, 09:24 por AJC

Alterar uma palavra num arquivo de texto

5/12/2016, 12:02 por Teseu

Olá prezados colegas de programação!

Este é eu primeiro post no fórum e gostaria de poder …

Comentários: 0

Buscar endereço por CEP

3/12/2016, 19:59 por pedrossian

Caros amigos, meu código para buscar endereço pelo CEP não funciona mais.
Alguém pode me …

Comentários: 0

USAR WEBSERVICE NO VFP9

2/12/2016, 09:50 por AJC

Pessoal, preciso de um material ou livro que me traga instruções como
usar a consumação de …

Comentários: 0

BANIMENTO DE USUARIO

13/11/2016, 16:21 por FAF

A usuária ROSANGELA PIRES ao tentar acessar o Forum obtem sempre a mensagem de BANIMENTO.
A mesma …

Comentários: 3

Impressora Ticket

15/11/2016, 09:20 por clima238

Bom dia,
Por favor alguém me explique porque o código abaixo imprime no ecrã em vez do printer: …

Comentários: 0

Estatísticas
Temos 6960 usuários registrados
O último usuário registrado atende pelo nome de Maycon Hersing

Os nossos membros postaram um total de 17118 mensagens em 2576 assuntos

Banco de dados Access X VFP

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Anexo Banco de dados Access X VFP

Mensagem por Marcos Guedes em 14/10/2009, 15:26

Segue uma rotina que criei para manipulação de banco de dados Access.
Espero que seja útil aos colegas.

Inicialmente é possível fazer cópias de um banco .mdb, convertendo-o para .dbc e listar registros de uma tabela do access num cursor.

Qualquer dúvida, sugestão ou modificação, é só postar!
Código:
*!* Autor: Marcos Guedes
*!* Email: [Você precisa estar registrado e conectado para ver este link.]
*!* Utilidade da rotina: Manipulação de banco access a partir do VFP

#DEFINE def_sucesso "Operação realizada com sucesso!"

DEFINE CLASS access_vfp AS CUSTOM

   HIDDEN caminhodb AS STRING && Caminho do arquivo .MDB
   *!* String de conexão com o banco de dados
   *!* (Sem o endereço do arquivo especificado)
   HIDDEN strconexao AS STRING
   HIDDEN nconnhandle AS INTEGER && Handle de conexão com o banco de dados
   HIDDEN conectado AS logical && Status de conexão
   HIDDEN msgstatus AS STRING && Mensagem de status das operações.

   FUNCTION mdb_dbc AS logical
      LPARAMETERS caminhonovodb AS STRING, nomenovodb AS STRING
      *!* Converte um banco de dados access (.mdb) para o nativo do fox (.dbc).
      *!* O parâmetro especifica o caminho onde o banco e tabelas importadas serão salvos.
      *!* Se não for especificado, o caminho será a parta raíz onde a aplicação estiver rodando
      LOCAL sucesso AS logical
      LOCAL cursortemp1 AS STRING
      LOCAL cursortemp2 AS STRING

      m.sucesso = .F.
      m.cursortemp1 = SYS(2015)
      m.cursortemp2 = SYS(2015)

      IF ((VARTYPE(m.caminhonovodb)!="C") OR EMPTY(m.caminhonovodb)) THEN
         *!* Se o caminho não for especificado pelo usuário, o mesmo
         *!* será definido como sendo a pasta raíz da aplicação.
         m.caminhonovodb = SYS(5)+CURDIR()
      ENDIF

      IF ((VARTYPE(m.nomenovodb)!="C") OR EMPTY(m.nomenovodb)) THEN
         *!* Se o nome do banco (.dbc) não for especificado pelo usuário, o mesmo
         *!* será definido com o mesmo nome do banco (.mdb).
         m.nomenovodb = JUSTSTEM(THIS.caminhodb)
      ENDIF

      IF (THIS.conectado) THEN
         LOCAL nresult AS INTEGER
         LOCAL nometabela AS STRING
         *!*
         m.nresult = SQLTABLES(THIS.nconnhandle, 'TABLE',m.cursortemp1)
         *!*
         IF (m.nresult>0) THEN
            LOCAL set_default AS STRING
            LOCAL set_safety
            LOCAL sqlcommand AS STRING
            LOCAL ngetdata AS INTEGER
            *!* Armazena alguns estados em que a aplicação se encontra
            m.set_default = SYS(5)+CURDIR()
            m.set_safety = SET("Safety")
            *!* Se os arquivos existirem serão apagados
            *!* sem uma pergunta prévia!
            SET SAFETY OFF
            SET DEFAULT TO (m.caminhonovodb)
            *!*
            CREATE DATABASE (m.nomenovodb) && Cria o banco de dados (.dbc)
            SET DATABASE TO (m.nomenovodb) && Seleciona o banco de dados criado
            *!*
            SELECT(m.cursortemp1)
            SCAN
               m.nometabela = ALLTRIM(&cursortemp1..table_name)
               m.sqlcommand = "SELECT * FROM [" + m.nometabela + "]"
               m.ngetdata = SQLEXEC(THIS.nconnhandle, m.sqlcommand, m.cursortemp2)

               IF (m.ngetdata>0) THEN
                  *!* Torna válido o nome da tabela
                  m.nometabela = STRTRAN(m.nometabela, " ", "")
                  m.nometabela = STRTRAN(m.nometabela, "-", "")
                  *!*
                  SELECT(m.cursortemp2) && Seleciona o cursor
                  COPY STRUCTURE TO (m.nometabela) && Cria uma nova tabela com a mesma estrutura da tabela original

                  SET DATABASE TO (m.nomenovodb) && Seleciona o banco de dados criado
                  ADD TABLE (m.nometabela) && Adiciona a tabela criada ao banco de dados

                  m.nometabela = JUSTSTEM(m.nometabela) && Retira a extensão do nome da tabela
                  USE (m.nometabela) IN SELECT(m.nometabela) EXCLUSIVE
                  *!* Copia os dados da tabela original para a nova tabela
                  INSERT INTO (m.nometabela) SELECT * FROM (m.cursortemp2)
                  *!* Fecha a tabela criada
                  USE IN SELECT(m.nometabela)
               ENDIF
            ENDSCAN
            *!* Fecha o banco de dados
            SET DATABASE TO (m.nomenovodb)
            CLOSE DATABASES
            *!*
            SET SAFETY &set_safety
            SET DEFAULT TO (m.set_default) && Restaura o diretório default da aplicação

            *!* Backup realizado com sucesso!
            THIS.msgstatus = def_sucesso
            m.sucesso = .T.
         ELSE
            *!* Nem uma tabela existente no banco especificado
            THIS.msgstatus = "Nenhuma tabela encontrada!"
         ENDIF
      ELSE
         *!* A conexão com o banco .mdb de dados não foi realizada!
         THIS.msgstatus = "Não conectado!"
      ENDIF

      *!* Fecha os cursores temporários
      USE IN SELECT(m.cursortemp1)
      USE IN SELECT(m.cursortemp2)

      RETURN m.sucesso
   ENDFUNC

   FUNCTION tabela_cursor AS STRING
      LPARAMETERS ;
         strsql AS STRING,;
         nomecursor AS STRING
      *!* Retorna um cursor a partir de uma consulta em um tabela access
      *!* Obs: Será necessário se conectar, antes de utilizar esta função
      IF (VARTYPE(m.nomecursor)!="C" OR !EMPTY(m.nomecursor)) THEN
         *!* Se segundo parâmetro não for especificado será gerado
         *!* um nome qualquer para o cursor.
         m.nomecursor = SYS(2015)
      ENDIF
      IF (THIS.conectado) THEN
         IF (SQLEXEC(THIS.nconnhandle, m.strsql, m.nomecursor)>0) THEN
            *!* Operação realizada com sucesso!
            THIS.msgstatus = def_sucesso
         ELSE
            *!* Não houve sucesso na consulta
            THIS.msgstatus = "Consulta inválida!"
         ENDIF
      ELSE
         *!* A conexão com o banco de dados não foi realizada!
         THIS.msgstatus = "Não conectado!"
         m.nomecursor = ""
      ENDIF
      RETURN m.nomecursor
   ENDFUNC

   FUNCTION conectar AS INTEGER
      LPARAMETERS caminhodb AS STRING
      *!* Conecta-se ao banco de dados access
      IF VARTYPE(m.caminhodb)=="C" AND !EMPTY(m.caminhodb) THEN
         *!* Parâmetro não é obrigatório a menos que haja
         *!* necessidade de abrir um outro arquivo mdb
         THIS.nconnhandle = SQLSTRINGCONNECT(THIS.strconexao + m.caminhodb)
      ELSE
         THIS.nconnhandle = SQLSTRINGCONNECT(THIS.strconexao + THIS.caminhodb)
      ENDIF
      THIS.conectado = (THIS.nconnhandle>0) && Status de conexão com o banco de dados
      *!* Retorna o status de conexão com o banco
      RETURN THIS.conectado
   ENDFUNC

   PROCEDURE desconectar AS void
      LPARAMETERS nconnhandle AS INTEGER
      *!* Desconecta-se do banco de dados access
      IF (VARTYPE(m.nconnhandle)=="N") THEN
         *!* O parâmetro não é obrigatório a menos que haja
         *!* necessidade de fechar uma outra conexão ativa
         =SQLDISCONNECT(m.nconnhandle)
      ELSE
         =SQLDISCONNECT(THIS.nconnhandle)
      ENDIF
   ENDPROC

   FUNCTION getconnhandle AS INTEGER
      *!* Retorna o Handler de conexão atual
      RETURN THIS.nconnhandle
   ENDFUNC

   PROCEDURE setcaminhodb AS void
      LPARAMETERS caminhodb AS STRING
      *!* Define/Altera o caminho do arquivo
      *!* mdb o qual será acessado
      THIS.caminhodb = m.caminhodb
   ENDPROC

   HIDDEN PROCEDURE INIT AS void
      THIS.strconexao = 'DRIVER=MICROSOFT ACCESS DRIVER (*.MDB);DBQ='
      THIS.caminhodb = ""
      THIS.conectado = .F.
      THIS.nconnhandle = -1
   ENDPROC

ENDDEFINE


Última edição por Marcos Guedes em 14/10/2009, 15:37, editado 1 vez(es)

_________________
Marcos Guedes - Programador e desenvolvedor Web.


Visite o nosso portal:
[Você precisa estar registrado e conectado para ver este link.]

Marcos Guedes
Webmaster
Webmaster


Voltar ao Topo Ir em baixo

Anexo Re: Banco de dados Access X VFP

Mensagem por Marcos Guedes em 14/10/2009, 15:30

Segue um exemplo realizando cópia de um banco access:
Código:
LOCAL obj AS OBJECT
*!*
m.obj = NEWOBJECT("access_vfp")
m.obj.setcaminhodb(SYS(5)+CURDIR()+"DBSAMPLE.MDB")
*!* Conecta-se ao banco access
IF (m.obj.conectar()) THEN
   *!* Realiza o Backup de um banco .mdb
   ?m.obj.mdb_dbc()
   *!* Desconecta-se do banco access
   m.obj.desconectar()
ENDIF
m.obj = NULL


Última edição por Marcos Guedes em 14/10/2009, 15:37, editado 1 vez(es)

_________________
Marcos Guedes - Programador e desenvolvedor Web.


Visite o nosso portal:
[Você precisa estar registrado e conectado para ver este link.]

Marcos Guedes
Webmaster
Webmaster


Voltar ao Topo Ir em baixo

Anexo Re: Banco de dados Access X VFP

Mensagem por Marcos Guedes em 14/10/2009, 15:36

Exemplo de como utilizar a rotina para filtrar dados de uma tabela access para um cursor no vfp:
Código:
LOCAL obj AS OBJECT
LOCAL nomecursor AS STRING
*!*
m.obj = NEWOBJECT("access_vfp")
m.obj.setcaminhodb(SYS(5)+CURDIR()+"DBSAMPLE.MDB")
*!* Conecta-se ao banco access
IF (m.obj.conectar()) THEN
   *!* Filtra todos os registros de uma determinada tabela
   m.nomecursor = m.obj.tabela_cursor("SELECT * FROM [Dados do Organograma]")
   *!* Desconecta-se do banco access
   m.obj.desconectar()
   *!* Certifica-se de que o cursor foi criado
   IF USED(m.nomecursor) THEN
      SELECT(m.nomecursor) && Seleciona o cursor
      GO TOP && Posiciona-se no primeiro registro
      BROWSE && Exibe os dados do cursor
      USE IN SELECT(m.nomecursor) && Fecha o cursor
   ENDIF
ENDIF
m.obj = NULL

_________________
Marcos Guedes - Programador e desenvolvedor Web.


Visite o nosso portal:
[Você precisa estar registrado e conectado para ver este link.]

Marcos Guedes
Webmaster
Webmaster


Voltar ao Topo Ir em baixo

Anexo Re: Banco de dados Access X VFP

Mensagem por Marcos Guedes em 4/12/2009, 11:36

Criei também um projeto com exemplos práticos.

Clique aqui para baixar o arquivo!

Qualquer dúvida é só postar!
Very Happy

_________________
Marcos Guedes - Programador e desenvolvedor Web.


Visite o nosso portal:
[Você precisa estar registrado e conectado para ver este link.]

Marcos Guedes
Webmaster
Webmaster


Voltar ao Topo Ir em baixo

Anexo Re: Banco de dados Access X VFP

Mensagem por Conteúdo patrocinado Hoje à(s) 05:12


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum