-
Posts
180 -
Joined
-
Last visited
-
Days Won
16
Posts posted by Rogerio Figueira
-
-
Boa tarde
Uso uma dica que foi postada aqui no fórum faz tempo, o sndmail.dll
Mas não uso contas de gmail como origem, crio contas para os usuários em nosso servidor num domínio próprio para isso.
Gmail é zica. -
9 horas atrás, Breno disse:
Grato Rogério. Pedi pro Kabiaba as classes da versão dele para decifrar o mistério. Mas de qualquer forma já resolveu meu problema urgente com o primeiro exemplo dele ( Com buttonbar). Mas se vc puder me mandar essas duas classes que funcionaram com vc, agradeceria.
Abçs
Breno, eu já não lembro mais qual era o bug da classe da versão em uso, mas teve comentários lá no fórum e eu passei a utilizar esta que funcionou e funciona até hoje. Tbm uso BUTTONBAR sem problemas.
Segue a classe. -
Breno, se a sua versão do FW é a 13.07 provavelmente é bug da classe combobox, na época quando atualizei o meu FW (ainda estou no 14.02) tive que passar a usar a classe combobox anterior e até hoje continuo assim, infelizmente não deu ainda para atualizar o FW.
Saludos. -
Boa tarde.
O Pelles salva o .rc
O arquivo .res é criado automaticamente no processo de compilação.
Uso um arquivo .mak como o exemplo a seguir:
# ---------------------------------------------------------------------------
VERSION = BCB.01
# ---------------------------------------------------------------------------
!ifndef BCB
BCB = $(MAKEDIR)\..
!endif
!ifndef BHC
BHC = E:\xHarbour
!endif
!ifndef FWH
FWH=E:\FWH
!endif
# ---------------------------------------------------------------------------
PROJECT = 3189001.EXE
OBJFILES = 3189001.objCFILES = 3189001.c
RESFILES = faz.RES
RESDEPEN = $(RESFILES)
LIBFILES = E:\FWH\lib\FiveHX.lib \
E:\FWH\lib\FiveHC.lib \
E:\xHarbour\lib\rtl.lib \
E:\xHarbour\lib\vm.lib \
E:\xHarbour\lib\gtgui.lib \
E:\xHarbour\lib\lang.lib \
E:\xHarbour\lib\macro.lib \
E:\xHarbour\lib\rdd.lib \
E:\xHarbour\lib\dbfntx.lib \
E:\xHarbour\lib\dbfcdx.lib \
E:\XHARBOUR\LIB\HBSIX.LIB \
E:\XHARBOUR\LIB\DBFFPT.LIB \
E:\XHARBOUR\LIB\PCREPOS.LIB \
E:\XHARBOUR13\LIB\DBFFPT.LIB \
E:\xHarbour\lib\common.lib \
E:\xHarbour\lib\pp.lib \
E:\BORLAND\bcc55\lib\cw32.lib \
E:\BORLAND\bcc55\lib\import32.lib \
E:\BORLAND\bcc55\lib\PSDK\odbc32.lib \
E:\BORLAND\bcc55\lib\wininet.libDEFFILE =
# ---------------------------------------------------------------------------
CFLAG1 = -O2 $(CFLAGS) -d -L$(BHC)\lib\b32 -c -M
CFLAG2 = -I$(BHC)\include;$(FWH)\include;$(BCB)\include;$(BCB)\include\vcl
PFLAGS =
RFLAGS =
LFLAGS = -L$(BCB)\lib\obj;$(BCB)\lib;$(BHC)\lib;$(BHC)\lib\b32 -Gn -aa -Tpe -s
IFLAGS =
LINKER = ilink32
# ---------------------------------------------------------------------------
ALLOBJ = c0w32.obj $(OBJFILES)
ALLRES = $(RESFILES)
ALLLIB = $(LIBFILES)
# ---------------------------------------------------------------------------
.autodepend$(PROJECT): $(CFILES) $(OBJFILES) $(RESDEPEN) $(DEFFILE)
$(BCB)\BIN\$(LINKER) @&&!
$(LFLAGS) +
$(ALLOBJ), +
$(PROJECT),, +
$(ALLLIB), +
$(DEFFILE), +
$(ALLRES)
!.cpp.obj:
$(BCB)\BIN\bcc32 $(CFLAG1) $(CFLAG2) -o$* $*.c.obj:
$(BCB)\BIN\bcc32 -I$(BHC)\include $(CFLAG1) $(CFLAG2) -o$* $**.prg.c:
$(BHC)\bin\harbour /m/n/a/q -I$(FWH)\include;$(BHC)\include -o$* $**.rc.res:
$(BCB)\BIN\brcc32 -w32 $(RFLAGS) $<
#-----------------------------------------------------------------------------
-
Bom dia.
Salve o XML e outros arquivos da nfe em um campo do SQL no servidor. Campo do tipo mediumblob é suficiente.Sds.
-
Boa tarde.
Você deve instalar o pacote da Flexdocs e REGISTRAR a DLL.
O aviso deve ser por falta do registro da DLL.
-
CitarCitar
Bom dia.
Se você tem um painel cPanel, acesse MySQL remoto e entre o IP que você quer permitir o acesso ou %.%.%.% para todos.
Caso não tenha o cPanel, use um terminal para acessar e editar o arquivo my.cnf que pode estar em/etc/mysql/my.cnf ou
/etc/my.cnf ou /usr/local/etc/my.cnf
Comente o comando bind-address = 127.0.0.1 e adicione bind-address = 0.0.0.0 para todos ou especifique um IP.
[]´s
-
Bom dia.
Uso o campo DTPICKER definido no RCCONTROL "", 4002, "SysDateTimePick32", WS_TABSTOP, 40, 56, 60, 14
e no PRG:
REDEFINE DTPicker oPmatriz[7] VAR Pmatriz[7] ID 4002 of oT270 UPDATE //emissao[]´s
-
21 horas atrás, Wellington Vieira disse:
Esqueci de mencionar que o sumiço da RADIO só ocorre quando uso no meu ".RC" o WindowsXP.Manifest.
Buenas!
Tente com o Windows10.Manifest .
[]´s -
Boa tarde.
Não sei se é o caso, mas eu já tive problemas com botões radio definidos como BS_AUTORADIOBUTTON no arquivo .RCAlterei para BS_RADIOBUTTON e funcionou normal.
Sds.
-
20 horas atrás, Theotokos disse:
boa tarde poderia explicar melhor sobre tDolphin, como usar o que instalar.... etc....
Boa tarde.
Se você tem o Fivewin atualizado, melhor seria usar o FWMaria nativo dele. Tem gente que já migrou do tDolphin para o FWMaria, dizem compensar.
Eu ainda não fiz isso por motivo de custos, vou esperar passar a pandemia e os negócios melhorarem.
Usar o tDolphin é simples, para mim a migração foi muito fácil.
Você precisa baixar as libs e fazer uns testes . Depois disso mãos a obra.
https://bitbucket.org/danielgarciagil/tdolphin/downloads/
Na pasta samples tem vários exemplos.
Qualquer dúvida, pode perguntar. -
Bom dia Edu.
Eu não sei se existe vantagem em usar o SQLRDD. Eu fiz minha migração usando o tDolphin, estou contente com a solução mas agora existe uma opção melhor que é a solução nativa do FiveWin nas últimas versões.
No caso dos pedidos: pode continuar usando dbf local e depois salvar a partir dele no SqL, mas pode ser diferente:
Eu faço assim: quando salva o pedido, já cria o registro no SQL e depois vai inserindo os itens do pedido direto no sql a cada inclusão de item.
Uso matrizes para guardar os dados de cada item. Quando o usuário clica Salvar o item, o sistema monta o comando SQL a partir dos valores da matriz.
No caso, existe uma tabela para os dados gerais do pedido e uma tabela com todos os itens de todos os pedidos.
Exemplo parcial:cQry := 'INSERT INTO `itpedi` SET '
cQry += 'codite = "'+ xi+'",'
cQry += 'codped = "'+ matriz[1]+'",'
cQry += 'codped_id = "'+ alltrim(str(matriz[45]))+'",'
cQry += 'produt_id = "'+ alltrim(str(matriz[43]))+'",'
cQry += 'fornec_id = "'+ alltrim(str(matriz[44]))+'",'
cQry += 'qtd_ped = "'+ alltrim(str(matriz[2]))+'",'
cQry += 'qtd_ent = "'+ alltrim(str(matriz[18]))+'",'
cQry += 'aentre = "'+ alltrim(str(matriz[19]))+'",'
cQry += 'codpro = "'+ matriz[3]+'",'
cQry += 'codfor = "'+ matriz[6]+'",'
cQry += 'preco_unit = "'+ alltrim(str(matriz[4]))+'",'
cQry += 'preco_tot = "'+ alltrim(str(matriz[8]))+'",'
cQry += 'status = "'+ matriz[5]+'",'
cQry += 'pdesc = "'+ alltrim(str(matriz[9]))+'"'sysrefresh()
oQry2 := oServer:sqlQuery( cQry)
sysrefresh()
[]´s -
Olá Colegas
Procuro parceria para desenvolvimento de solução para Frente de Caixa .Preferencialmente quem já tenha sistema desenvolvido e pronto em funcionamento.
Necessário que seja utilizado banco de dados MariaDB/mySQL .
Contatos por e-mail rogerio@softservice.com ou whats 11 999 060 075
-
Olá Edu,
Eu já fiz alguns estudos de implantação de coletores para clientes, mas meus clientes são tão miseráveis que nunca quiseram investir em coletores, que são caros.
O que eu vi sobre eles, é que geram um arquivo TXT delimitado. A sua aplicação só precisa ler esse TXT e processar conforme a necessidade.
É bem simples a implantação. Veja com seu cliente se ele já tem o coletor e veja com o fornecedor como é a geração dos dados.
[]´s -
-
Valdir,
Os arquivos .rc são txt puro, muito fáceis de editar com o editor de texto, posso copiar colar qualquer diálogo de um sistema para outro.
Acho que os .res não dão essa facilidade, ou estou errado? -
Pessoal,
eu uso faz tempo o Pelles 8.00.
Tem funcionado bem, exceto por dois pequenos problemas que não consegui resolver até agora .
Se em algum diálogo eu tiver uma pergunta com ? quando salvo pelo Pelles ele acrescenta uma barra invertida \ , ficando então \? que gera erro na compilação.
11: Invalid escape sequence
O que tenho feito é abrir o arquivo .rc e substituir os \? por ? , mas tenho que fazer sempre que salvo algo no Pelles.
Outro erro:
Tenho este diálogo para o uso do calendário auxiliar:CALENDAR DIALOGEX DISCARDABLE 6, 18, 138, 122
STYLE DS_SHELLFONT|WS_POPUP|DS_3DLOOK|WS_CAPTION|WS_SYSMENU|WS_VISIBLE
FONT 9, "Arial"
{
CONTROL "", 2001, "SysMonthCal32", WS_TABSTOP, 4, 4, 132, 100
CONTROL "OK", 103, "Button", WS_TABSTOP, 51, 104, 35, 14
}Sempre que salvo o arquivo .rc com o Pelles ele altera esse diálogo alterando a linha
FONT 9, "Arial", 0, 0, 1
e então na compilação é gerado o erro 24: Expecting BEGIN
Nesse caso também tenho que editar o código e remover o , 0, 0, 1
Pergunto aos colegas: alguém já passou por isso usando o Pelles? Tem alguma idéia do motivo dessas substituições e como resolver?
[]´s -
Desde o velho Clipper (RIP) como constava no manual, o uso de variáveis definidas como matrizes consome menos memória.
Então eu sempre que possível uso matrizes para todas as variáveis.
Também facilita bastante a programação.IF oQry:nRecCount >0
cmatriz[10] := oQry:cheques
cmatriz[11] := oQry:autcartao1
cmatriz[12] := oQry:valorcartao1
cmatriz[13] := oQry:venc_cartao1
cmatriz[14] := oQry:autcartao2
cmatriz[15] := oQry:valorcartao2
cmatriz[16] := oQry:venc_cartao2
cmatriz[17] := oQry:autdebito
cmatriz[18] := oQry:valordebito
cmatriz[19] := oQry:dinheiro
cmatriz[20] := oQry:data
for xx=10 to 20
ocmatriz[xx]:refresh()
nextEND
[]´s
-
Augusto,
Sabendo de problemas que podem ocorrer pelo uso de aspas simples ou duplas no conteúdo de campos, eu adotei uma solução radical.
Sempre antes de qualquer INSERT ou UPDATE, eu limpo o conteúdo digitado pelo cliente, assim:cQry += 'endereco = "'+ ClearChar(cmatriz[4], {"'",'"'} )+'",'
Function ClearChar(cString,aChar)
Aeval(aChar, {|cChar| cString:=StrTran(cString,cChar,"")})
Return(cString)[]´s
-
Bom dia Luiz,
O que faço é o seguinte:
Quando é gerado um error.log o programa sempre aborta.
Então tenho uma rotina que na inicialização do programa, ele verifica se existe um arquivo error.log . Existindo o arquivo é enviado por e-mail para mim, para uma conta exclusiva para receber os erros. Em seguida o error.log é excluido.
Isso ajuda na correção de erros, no suporte e no pega-pirata.
Sds. -
Como o Marcio falou acima, no seu caso o Terminal Server seria a solução imediata.
É a solução que tenho recomendado aos clientes que querem continuar com o sistema antigo.
Funciona bem, inclusive permite rodar nossos aplicativos em tablets Android.
Mas a solução definitiva é mudares para SQL. Parece um bixo complicado, mas assim que começares vais ver que é muiiiiito mais fácil de trabalhar com SQL do que com DBFs. -
Aguiar, faz tempo que não lido com isso. O último ajuste foi em 2015, estava funcionando ao menos até 2017.
Segue o código que tenho aqui:
//*----------------------------------------------------------------------------* // // M., Ronaldo: Boleto Bancario em Harbour // // Method Banco_033() Class MR_Boleto // //*----------------------------------------------------------------------------* Method Banco_033() Class MR_Boleto ::Banco_Dv_____ := "7" ::Banco_Nome___ := "Banco Santander" IF EMPTY( ::Prefixo______ ) ::Prefixo______ := ::Conta________ ::Conta________ := '' ::Prefixo_DV___ := ::Conta_DV_____ ::Conta_DV_____ := '' ENDIF ::Prefixo______ := PADL( ALLTRIM( Left( ::Prefixo______, 6 ) ), 6, '0' ) ::Prefixo_DV___ := PADL( ALLTRIM( Left( ::Prefixo_DV___, 1 ) ), 1, '0' ) ::NossoNumero__ := PADL( ALLTRIM( Left( ::NossoNumero__, 12 ) ), 12, '0' ) ::NossoNumer_DV := ::DC_Mod11( ::Banco________, 9, .F., ::NossoNumero__, .F. ) digNossoNumero := ::DC_Mod11( ::Banco________, 9, .F., ::NossoNumero__, .F. ) ::NossoNumero_z := ::NossoNumero__ + " " + ::NossoNumer_DV ::Ag_Cod_Cedent := TRAN( ::Banco_Agencia + '/' + ::Prefixo______ + '-' + ::Prefixo_DV___, "@!") ::Campo_Livre__ := '9' + ::Prefixo______ + ::Prefixo_DV___ + ::NossoNumero__ + + ::NossoNumer_DV + '0'+ ::Carteira_____ Return NIL
Sds.
-
Edu,
provavelmente o e-mail vai formatado em html.
Nesse caso, basta inserir a imagem relativa ao endereço onde ela está no dominio/site do cliente.
Se o cliente não tem dominio/site, crie uma pasta no seu próprio dominio para armazenar os logos dos clientes, que é o que eu faço.
No caso o comando a ser usado no corpo da msg seria este:
<IMG SRC="'+logo+'" ALT="Logotipo" BORDER=0>
no caso, logo carrega o endereço do logo do cliente, p. ex.
logo := "http://servidor.net/pasta/logo.jpg"
[]´s -
Pessoal, quero agradecer a colaboração de todos e postar aqui a solução baseada na dica do Rochinha e outra que descobri na documentação do MySQL.
Desta forma eu pego o IP do cliente da última conexão ao banco MySQL, isto é, conecto ao banco de dados e logo a seguir executo esta verificação:
TRY
CONNECT bServer HOST alltrim(host) ;
USER alltrim(usuario) ;
PASSWORD alltrim(senha) ;
PORT nPort ;
FLAGS nFlags;
DATABASE "information_schema"
CATCH oErr
MsgInfo( oErr:Description )RETURN NIL
END
oQry:= bServer:Query("SELECT host FROM information_schema.processlist WHERE ID = connection_id( ) LIMIT 0 , 10")
userIP := oQry:hostbServer:end()
//=========================================
Aqui usando a dica do Rochinha a partir do código do PINGA:
#include "dll.ch"static xdll
CLASS TdWebServiceDATA hOpen
DATA sbuffer HIDDEN
DATA xDLL HIDDEN
METHOD New(buffersize) CONSTRUCTOR
METHOD OpenWS(url)
METHOD End()
ENDCLASS
METHOD New(conexion,buffersize) CLASS TdWebServiceDEFAULT buffersize:=64000
::sbuffer:=buffersize
xDll:=LoadLib32("wininet.dll")
::hOpen = InternetOpen("TdWebService", 1,,, 0)
RETURN Self
METHOD OpenWS(url) CLASS TdWebServicelocal hFile,ret,xml
hFile = InternetOpenUrl(::hOpen, url,"",0,,0)
xml:=space(::sbuffer)
InternetReadFile(hFile, @xml, ::sbuffer, @Ret)
return alltrim(xml)
//return subst(alltrim(xml),1,len(alltrim(xml))-5)
METHOD End() CLASS TdWebServiceFreeLib32(xDll)
return nil
Dll32 FUNCTION InternetOpenUrl(hInternetSession As 7, lpszUrl As 8, lpszHeaders As 8, dwHeadersLength As 7, dwFlags As 7, dwContext As 7) As 7 FROM "InternetOpenUrlA" PASCAL Lib xDll
Dll32 FUNCTION InternetReadFile(hFile As 7, @sBuffer As 8, lNumBytesToRead As 7, @lNumberOfBytesRead As 7) As 7 PASCAL Lib xDll//==========================
function getIPExtern( _site_ )
local _IPExtern_
ws:=TdWebService():new()
_IPExtern_ := ws:OpenWS(_site_)
ws:end()
msginfo(_IPExtern_)
return
//===========================
getIPExtern("http://representantes.info/meuip.php")//=========================
Conforme a dica do Sistem acima, o código do arquivo meuip.php é este:
<?php $ip = getenv("REMOTE_ADDR");echo "$ip" ?>//=============================
Sds.
Aposentadoria... Parar ou Não Parar ?
in Programação
Posted
Salve a todos!
Eu completo 67 daqui a 2 meses, trabalho nessa área desde 1990, nunca fui empregado, preferi ganhar menos mas ser independente.
Ainda nem penso em parar.
Em 1998 vim para o interior, morar num sítio, no começo foi pauleira tinha que ir em Sampa vários dias por semana, depois com o avanço da internet fui deixando de ir.
Hoje faço todo atendimento via whatsapp a internet está bem distribuida no BR.
Ano passado viajei por 4 meses por boa parte do BR, trabalhando on-line, eu minha esposa e duas cachorrinhas.
Aposentar para que ? Esta atividade eu gosto, mantenho os neurônios em dia.
Atualmente estou convertendo um sistema para PHP para rodar na web, o banco de dados já é MariaDB, então me sinto motivado a continuar trabalhando.
Meu projeto para os próximos anos, terminar um carro mais apropriado, instalar uma StarLink e viajar mais, trabalhando todo dia um pouco.
Saludos!