Página 1 de 1
Gravar dados grid em dbf
Enviado: 15 Jul 2011 19:00
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.:
Desde ja agradeço a paceiencia de todos.
Estou usando HMG IDE 3.035
Gravar dados grid em dbf
Enviado: 26 Fev 2012 21:38
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...
Gravar dados grid em dbf
Enviado: 02 Mar 2012 08:04
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.
Gravar dados grid em dbf
Enviado: 02 Mar 2012 08:46
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
Gravar dados grid em dbf
Enviado: 02 Mar 2012 09:57
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.
Gravar dados grid em dbf
Enviado: 04 Abr 2014 17:14
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
Gravar dados grid em dbf
Enviado: 04 Abr 2014 18:39
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.
Gravar dados grid em dbf
Enviado: 05 Abr 2014 08:25
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
Gravar dados grid em dbf
Enviado: 05 Abr 2014 09:13
por gilsonpaulo
Vc gerou esta lib do mysql? se sim vc talvez tenha que gerear com os do mariadb.
Gravar dados grid em dbf
Enviado: 05 Abr 2014 09:46
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
Gravar dados grid em dbf
Enviado: 10 Abr 2014 11:06
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.