Gravar dados grid em dbf

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

Gravar dados grid em dbf

Mensagem por gilsonpaulo »

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

No clipper fazia assim.:

Código: Selecionar todos

	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.:

Código: Selecionar todos

@ 04,11 GET cod PICTURE "@!K AA"
Desde ja agradeço a paceiencia de todos.

Estou usando HMG IDE 3.035
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Gravar dados grid em dbf

Mensagem por Pablo César »

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.
gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

Gravar dados grid em dbf

Mensagem por gilsonpaulo »

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

Código: Selecionar todos

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.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Gravar dados grid em dbf

Mensagem por Pablo César »

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.
gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

Gravar dados grid em dbf

Mensagem por gilsonpaulo »

Pablo, muito obrigado pela ajuda.

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

Código: Selecionar todos

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.

Código: Selecionar todos

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.
Avatar do usuário
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

Gravar dados grid em dbf

Mensagem por Amparo »

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?

Código: Selecionar todos

#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
gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

Gravar dados grid em dbf

Mensagem por gilsonpaulo »

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 277 vezes
Main.Prg
(993 Bytes) Baixado 385 vezes
Avatar do usuário
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

Gravar dados grid em dbf

Mensagem por Amparo »

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:

Código: Selecionar todos

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:

Código: Selecionar todos

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.

Código: Selecionar todos

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
gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

Gravar dados grid em dbf

Mensagem por gilsonpaulo »

Vc gerou esta lib do mysql? se sim vc talvez tenha que gerear com os do mariadb.
Avatar do usuário
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

Gravar dados grid em dbf

Mensagem por Amparo »

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
gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

Gravar dados grid em dbf

Mensagem por gilsonpaulo »

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 239 vezes
Responder