Clipper On Line • Ver Tópico - Gravar dados grid em dbf

Gravar dados grid em dbf

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Gravar dados grid em dbf

Mensagempor gilsonpaulo » 15 Jul 2011 19:00

Desculpe a ignorancia, mas estou com mais duas duvidas. Como gravar conteudo com varios registros da grid em um dbf.

No clipper fazia assim.:
   SELECT TEMP

   
        DO WHILE .NOT. EOF()

      IF tcliaux > 0

         SELECT VENCLI
         VENCLI->(dbAppend())
         IF NETERR()
            Mensagem("Nao foi possivel gravar o registro, tente novamente")
            INKEY(0)
         ELSE
            IF RLOCK()
               VENCLI->VECLI:=      tcli
               VENCLI->NOMCLI:=      CLI->DESCLI
               VENCLI->VETIP:=       "5"
               VENCLI->VEDAT:=        DATE()
               VENCLI->VECOD:=       TEMP->MATVEN
               VENCLI->VEQTD:=       TEMP->QTDVEN
               VENCLI->FUNCIO:=     funcionario
                                        VENCLI->TICKET:=     STRZERO(xxnum,5,0)
               UNLOCK
               COMMIT
            ENDIF
         ENDIF

      ENDIF

      tpago = tpago + TEMP->TOTVEN

      bai = SPACE(8)

      bai = TEMP->MATVEN
      SELECT MER
      SET ORDER TO 1   
      GO TOP
      SEEK bai
      IF FOUND()
         IF RLOCK()
            IF MER->MULTI<> 0
               IF MER->CONTROLAR =  "S"
                  MER->SAIMER:=        MER->SAIMER-(TEMP->QTDVEN*MER->MULTI)
               ENDIF
            ELSE
               IF MER->CONTROLAR = "S"
                  MER->SAIMER:=        MER->SAIMER-TEMP->QTDVEN
               ENDIF
            ENDIF
            MER->VENATU:=        MER->VENATU-TEMP->QTDVEN
            UNLOCK
            COMMIT
         ENDIF
      ENDIF

      SELECT TEMP

      IF MER->CONTROLAR = "S"

         SELECT MES
         APPEND BLANK
         IF RLOCK()
                                MES->MVDOC:=             STRZERO(xxnum,6,0)
            MES->MVDAT:=      DATE()
            MES->MVCOD:=        bai
            MES->MVQTD:=      TEMP->QTDVEN
            MES->MVUNI:=      TEMP->UNIVEN
            MES->MVFOR:=     "88888"
            MES->MVACE:=     "Devolucao"
            MES->MVTIP:=     "5"
            MES->FUNCIONAR:=      funcionario
            COMMIT
            UNLOCK
         ENDIF
                ENDIF

      SELECT TEMP
      SKIP

   ENDDO

   SET RELATION TO

   EXIT

ENDDO


A outra duvida é com relacao a permitir em um textbox sometes letras. No clipper fazia assim e não permitia a digitação de numeros.:

@ 04,11 GET cod PICTURE "@!K AA"


Desde ja agradeço a paceiencia de todos.

Estou usando HMG IDE 3.035
gilsonpaulo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 135
Data de registro: 02 Fev 2008 10:30
Cidade/Estado: Quatro Barras
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Gravar dados grid em dbf

Mensagempor Pablo César » 26 Fev 2012 21:38

Com respeito ao tratamento de registros em dbfs no HMG (melhor dito no Harbour) é "exatamente" igual em questão a sintaxe me refiro. Então não tem por quê não funcionar os replaces de vários registros. Só não entendí o por quê das linhas 82 e 84 do seu código. Pois isto faz com que sai do laço de repetição (do Do While).

Com respeito a máscara (Pictures) o K não funciona. Mas o "!" e o "A" sim funcionam. Mas lembre que a programação GUI é diferente tratamento que quando tratávamos a digitação "on the fly", portanto é bom se acostumar com funções de validação após a saída de cada GETBOX...
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Gravar dados grid em dbf

Mensagempor gilsonpaulo » 02 Mar 2012 08:04

Abusando um pouco da sua boa vontade Pablo vc poderia me da uma mão aqui.:

Function converte_grupo

   Local aGrupos:={}
   Local oQuery
   Local i
   
   use grupos shared alias grupos
   do while .not. eof()
      aadd(aGrupos,{(str(grupos->codigo,4,0)),grupos->descricao})
      skip
   enddo
   close all

   FOR i := 1 TO LEN(aGrupos)
      aCod:=aGrupos[nAux,1]
      aDes:=aGrupos[nAux,2]
      oQuery := oServer:Query( "insert into grupo (codigo,descricao) values ('"+aCod+"','"+aDes+"')")      
      oQuery:Destroy()
   NEXT   

   
Return(nil)


Estou perdido com for e next nesta array, não estou conseguindo pegas os dados da array para gravar no mysql.
gilsonpaulo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 135
Data de registro: 02 Fev 2008 10:30
Cidade/Estado: Quatro Barras
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Gravar dados grid em dbf

Mensagempor Pablo César » 02 Mar 2012 08:46

O único que vejo de errado são nas linhas 15 e 16 do seu ultimo código-fonte. Substitua nAux por i
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Gravar dados grid em dbf

Mensagempor gilsonpaulo » 02 Mar 2012 09:57

Pablo, muito obrigado pela ajuda.

O problema era que eu não estava selecionando o banco no MariaDB.

Function converte_grupo

   Local aGrupos:={}
   Local oQuery
   Local i

   oServer:SelectDB("ducler")
   
   use grupos shared alias grupos
   do while .not. eof()
      aadd(aGrupos,{(strzero(grupos->codigo,4,0)),grupos->descricao})
      skip
   enddo
   close all

   FOR i := 1 TO LEN(aGrupos)
      aCod:=aGrupos[i,1]
      aDes:=aGrupos[i,2]
      oQuery := oServer:Query( "insert into grupo (codigo,descricao) values ('"+aCod+"','"+aDes+"')")     
   NEXT   

   oQuery:Destroy()
   
Return(nil)


Tambem poderia ser feito assim.

Function converte_grupo

   Local aGrupos:={}
   Local oQuery
   Local i

   oServer:SelectDB("ducler")
   
   use grupos shared alias grupos
   do while .not. eof()
      aCod:=strzero(grupos->codigo,4,0)
      aDes:=grupos->descricao
      oQuery := oServer:Query( "insert into grupo (codigo,descricao) values ('"+aCod+"','"+aDes+"')")     
      skip
   enddo
   close all
   
   oQuery:Destroy()
   
Return(nil)


E como não acusava erro algum pensei que fosse algo errado com o For e Next.
gilsonpaulo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 135
Data de registro: 02 Fev 2008 10:30
Cidade/Estado: Quatro Barras
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Gravar dados grid em dbf

Mensagempor Amparo » 04 Abr 2014 17:14

ola amigos

desculpe me pela intromissão e por ressuscitar o topico , mas tenho um sistema feito em harbour (DBF cdx) estou querendo converter para MySQL, só que li sobre o MariaDB e as noticias que tenho visto sobre MySQL x MariaDB acabou me agradando o uso do MariaDB, o problema é que não tenho conhecimento sobre SGBD estou começando agora, instalei o MySQL e já consegui fazer um programa em minigui para converter minhas tabelas DBF em MySQL, baixei e instalei o Mariadb em minha maquina na porta 3316 ficando o MySQL na porta 3306, pergunto: como faço para conectar no MariaDB selecionar uma DATABASE criar TABELAS como é feito no MySQL.

estou passando parte do programa que fiz para conversão dos dados, o que tenho que mudar, como devo proceder?
a sintaxe é a mesma usada para acessar o MySQL ou tenho que usar ODBC se for isso existe algum exemplo, alguma luz para que eu possa gatinhar neste SGBD, na pasta onde fica meu aplicativo devo trocar o libmysql.dll que veio junto com o MySQl pelo libmysql.dll que veio junto com o MariaDB é só isso ou tem mais algo que devo fazer?

#INCLUDE "minigui.ch"
#INCLUDE "rddsys.ch"

#DEFINE PROGRAM "DBF TO MySql"
#DEFINE BSL chr(92) 
#DEFINE QUEBRA chr(13)+chr(10)

MEMVAR LCONNECTED
MEMVAR OSERVER
MEMVAR CSERVER
MEMVAR CUSER
MEMVAR CPASWD

MEMVAR ADATABASES
MEMVAR ATABLES
MEMVAR LTABLESELECT
MEMVAR LBASESELECT
Memvar CBASE
MEMVAR CTABLE

MEMVAR NSCOPE
MEMVAR NFROM

*---------------------------------------------------------------------------------------------------------------------------------
PROCEDURE MAIN()

PUBLIC LCONNECTED   := .F.
PUBLIC OSERVER      := NIL
PUBLIC CSERVER      := "localhost"
PUBLIC CUSER        := "root"
PUBLIC CPASWD       := "1234567890abcd"
PUBLIC NOMEBASE     := "sigecom"
PUBLIC ADATABASES   := {}
Public ATABLES      := {}
PUBLIC LTABLESELECT := .f.
PUBLIC LBASESELECT  := .f.
PUBLIC CBASE        := ""
PUBLIC CTABLE       := ""
PUBLIC NSCOPE       := 500000   // max records for select scope (limit)
PUBLIC NFROM        := 0      // starting pointer for select scope - Don't touch!
PUBLIC DIR_SIST     := ""
PUBLIC DIR_CONV     := DISKNAME()+":\"+CURDIR()+"\CONVERTE\"
PUBLIC DIR_ZZZZ     := DISKNAME()+":\"+CURDIR()+"\"

SET DATE GERMAN
SET CENTURY ON
SET MULTIPLE OFF WARNING

REQUEST DBFCDX, DBFFPT
RDDSETDEFAULT( "DBFCDX" )
DBSETDRIVER( "DBFCDX")

SET EPOCH TO 1964
SET DATE BRIT
SET CENTURY ON
SET DELETED ON
SET LANGUAGE TO PORTUGUESE
SET INTERACTIVECLOSE ON
SET MENUSTYLE EXTENDED
SET TOOLTIPBALLOON ON
SET ERRORLOG TO ('MYSQLCLI.HTM')
SET LOGERROR ON
SET SOFTSEEK ON
SET MULTIPLE OFF WARNING

OSERVER:= TMYSQLSERVER():NEW( CSERVER, CUSER, CPASWD )

IF !( OSERVER:NETERR() )
    LCONNECTED := .T.
ELSE
    MSGINFO( "Problemas na conexão!!" + QUEBRA + OSERVER:Error() )
    RETURN .F.
ENDIF


Abraços

Amparo
Avatar de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 337
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

Gravar dados grid em dbf

Mensagempor gilsonpaulo » 04 Abr 2014 18:39

De uma olhada nestes anexos.

Tem como conectar, tem inserts,updates,delete e selects em mysql ou mariadb, use dll do mariadb que é lgpl, nao tem licensa dupla como a dll do mysql.
Anexos
Cliente.Prg
(17.43 KiB) Baixado 156 vezes
Main.Prg
(993 Bytes) Baixado 143 vezes
gilsonpaulo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 135
Data de registro: 02 Fev 2008 10:30
Cidade/Estado: Quatro Barras
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Gravar dados grid em dbf

Mensagempor Amparo » 05 Abr 2014 08:25

ola amigos

Gilson, obrigado por sua colaboração.

pelo que vi no seus exemplos não muda nada, a única coisa é trocar o libmySQL.dll do Mysql pelo libmySQL.dll do MariaDB, fiz isso recompilei meu programa e ao executar o programa aparece a seguinte mensagem:
O aplicativo não pode ser inicializado corretamente (0xc000007b).
Clique em OK para fechar o aplicativo.

cliquei em OK, copiei então a libmySQl.lib que esta na pasta C:\MariaDB\lib\ para a pasta C:\MiniGUI\Harbour\lib\ e compilei novamente meu prg ai deu o seguinte erro:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: 'C:\MINIGUI\HARBOUR\LIB\LIBMYSQL.LIB' contains invalid OMF record,
type 0x21 (possibly COFF)

como faço para compilar e minhas versões: todos os testes que fiz usando o Mysql segue esta mesma estrutura, não utilizo nenhuma IDE faço tudo na unha.
Harbour MiniGUI Extended Edition 2.2.2 - 2013.05.14
BRMAKE - Make File para Harbour/xHarbour/MiniGUI     Versão 2.05   FreeWare

compile.bat minha bat de compilação
C:\BRMAKE\brmake linkar
copy/v/y MYSQLCLI.EXE D:\DBFtoMYSQL\

linkar meus arquivo MLK com os prgs declarados
# Inicio do Arquivo de projeto #
GUI=Y
DIROBJ  OBJ

EXEFILE MYSQLCLI.EXE
FILE MYSQLCLI.PRG

RESOURCE MYSQLCLI.RC

BRMAKE.INI parâmetros de configuração
*BRMAKE for Harbour/xHarbour/MiniGUI VersÆo 2.05 - Parametros */
*Utilizando Compilador HARBOUR *
[MINIGUI]
MiniGUI Path=C:\MINIGUI

[HARBOUR]
Harbour Path=C:\MINIGUI\HARBOUR
Harbour Flags= -n -m -Z

[BCC55]
Bcc55 Path=C:\BORLAND\BCC55

[HARBOUR BASIC LIBRARY]

Lib=hbrtl.lib
Lib=hbvm.lib
Lib=gtgui.lib
Lib=hbLang.lib
Lib=hbmacro.lib
Lib=hbrdd.lib
Lib=rddntx.lib
Lib=rddcdx.lib
Lib=hbcommon.lib
Lib=hbct.lib
Lib=hbmisc.lib
Lib=hbcpage.lib
Lib=rddfpt.lib
Lib=hbsix.lib
Lib=hbole.lib
Lib=Dll.lib
Lib=Calldll.lib
Lib=Socket.lib
Lib=hbprinter.lib
Lib=miniprint.lib
lib=tsbrowse.lib
lib=hbmysql.lib
lib=libmysql.lib
lib=miniprint.lib
lib=odbc32.lib

[MISC]
Language=PT
Video Mode=Disabled
Compress With UPX=N
STOP=N



tens ideia do que pode ser?
Abraços
Amparo
Avatar de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 337
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

Gravar dados grid em dbf

Mensagempor gilsonpaulo » 05 Abr 2014 09:13

Vc gerou esta lib do mysql? se sim vc talvez tenha que gerear com os do mariadb.
gilsonpaulo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 135
Data de registro: 02 Fev 2008 10:30
Cidade/Estado: Quatro Barras
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Gravar dados grid em dbf

Mensagempor Amparo » 05 Abr 2014 09:46

ola amigos

Gilson tudo bem?

não, eu não gerei a lib mesmo porque nem sei como fazer isto, apenas copiei as lib´s que esta na pasta C:\MariaDB\lib\ para a pasta C:\MiniGUI\Harbour\Lib\

na pasta C:\MariaDB\Lib\ temos:
libmysql.dll
libmysql.lib
libmysql.pdb
libmysqld.dll
libmysqld.lib
libmysqld.pdb
mysqlclient.lib
mysqlclient.pdb
mysqlserver.lib
mysqlserver.pdb
mysqlservices.lib

abraços
Amparo
Avatar de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 337
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

Gravar dados grid em dbf

Mensagempor gilsonpaulo » 10 Abr 2014 11:06

Nos inicio eu ja compilei a lib mysql, mas agora não me lembro como, eu uso a HMG do Roberto Lopez, não preciso gerar nada, simplesmente instalo a hmg e copio a libmariadb.dll (renomeio para libmysql.dll) para o diretório da aplicação criada.
Anexos
libmariadb.rar
Segue a dll, só renomear para libmysql.dll
(96.7 KiB) Baixado 124 vezes
gilsonpaulo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 135
Data de registro: 02 Fev 2008 10:30
Cidade/Estado: Quatro Barras
Curtiu: 0 vez
Mens.Curtidas: 0 vez




Retornar para MiniGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 5 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro