Conversão Base de Dados Sistema Legado
Moderador: Moderadores
Conversão Base de Dados Sistema Legado
Faço manutenção em sistema de mais de 30 anos!, fiz a conversão em 2010 de clipper para harbour e em 2017 comecei a outra conversão para 100% GUI,
mas a base de dados continua sendo a mesmo até agora, agora estou preparando a base para migrar para um SGBD já escolhi o MariaDb pela questão custo.
Essa base de dados ainda tem o "ranso" de nomes não amigáveis, não tem manual, por exemplo a base de sócios é APC01, a base de cobrança é APA01, APA41 e por ai vai. a base APC01 já modifiquei para CADASTROSOCIOS.DBF, APA01 para COBRANCAASAPREV.DBF, APA41 para COBRANCAUTI, tá dando um trabalho, em 2 dias modifiquei todas as chamadas no sistema para os nomes antigos, depois vou me agradecer. Eu entendo que esses nomes eram assim por conta da limitação do S.O da época o Ms-Dos que limitava a 8.3, mas se eu estou pensando em melhorar a segurança e integridade, então é hora de deixar os nomes das tabelas o mais claro possível, nome de campo ficará para depois, isso é mais complicado. Fica a dica.
mas a base de dados continua sendo a mesmo até agora, agora estou preparando a base para migrar para um SGBD já escolhi o MariaDb pela questão custo.
Essa base de dados ainda tem o "ranso" de nomes não amigáveis, não tem manual, por exemplo a base de sócios é APC01, a base de cobrança é APA01, APA41 e por ai vai. a base APC01 já modifiquei para CADASTROSOCIOS.DBF, APA01 para COBRANCAASAPREV.DBF, APA41 para COBRANCAUTI, tá dando um trabalho, em 2 dias modifiquei todas as chamadas no sistema para os nomes antigos, depois vou me agradecer. Eu entendo que esses nomes eram assim por conta da limitação do S.O da época o Ms-Dos que limitava a 8.3, mas se eu estou pensando em melhorar a segurança e integridade, então é hora de deixar os nomes das tabelas o mais claro possível, nome de campo ficará para depois, isso é mais complicado. Fica a dica.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
- susviela@bol.com.br
- Usuário Nível 3

- Mensagens: 236
- Registrado em: 30 Jun 2017 11:17
- Localização: São José / SC
- Contato:
Conversão Base de Dados Sistema Legado
Excelente escolha o MariaDB.
Pois é, essa parte de converter sistemas legados, dá uma "cosquinha" de fazer tudo que a nosso ver, poderia ser melhorado, mas precisamos mesmo fazer uma seleção de prioridades para evitar sobrecarga de trabalho.
E vamos tocar a vida em frente.
Pois é, essa parte de converter sistemas legados, dá uma "cosquinha" de fazer tudo que a nosso ver, poderia ser melhorado, mas precisamos mesmo fazer uma seleção de prioridades para evitar sobrecarga de trabalho.
E vamos tocar a vida em frente.
.
.
"E quando você perder o controle, colherá o que plantou."
=========================================
Carlos Alberto Nunes #Susviela
Site: https://www.PowerInformatica.com.br
=========================================
Blog xBase: https://programandoxbase.wordpress.com/
Blog TI: https://susviela.wordpress.com
( #ProgramandoxBase #AllxBase )
.
"E quando você perder o controle, colherá o que plantou."
=========================================
Carlos Alberto Nunes #Susviela
Site: https://www.PowerInformatica.com.br
=========================================
Blog xBase: https://programandoxbase.wordpress.com/
Blog TI: https://susviela.wordpress.com
( #ProgramandoxBase #AllxBase )
- Nascimento
- Usuário Nível 4

- Mensagens: 763
- Registrado em: 19 Jul 2008 12:11
- Localização: OLINDA-PE
Conversão Base de Dados Sistema Legado
imagino que cada um a seu tempo vai ter que fazer isso, por hora optei pelo letodbf , mais sei que em um futuro proximo posso optar para algum sgdb
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina
clipper 5.3 /harbour/minigui
-
Fernando queiroz
- Usuário Nível 4

- Mensagens: 779
- Registrado em: 13 Nov 2014 00:41
- Localização: Porto Alegre/RS
Conversão Base de Dados Sistema Legado
Hoje uso o LETODBF mas já iniciei as conversões de dados para o MARIADB e agora chegou a parte complicada, estou querendo fazer um BROWSE pegando os dados do MARIADB mas to mais perdido que tudo , alguém que já tenha uma experiência no assunto pode me dar uma mão
Segue abaixo o código para entendimento
Não sei como pegar os dados do retorno do MARIADB , já tentei como DATABASE e ARRAY mas não deu certo
preciso adicionar alguma .DLL
Segue abaixo o código para entendimento
Não sei como pegar os dados do retorno do MARIADB , já tentei como DATABASE e ARRAY mas não deu certo
preciso adicionar alguma .DLL
Código: Selecionar todos
/*
TITULO : SISTEMA DE GEST¦O DE COMERCIO
DATA : 14/03/2020
PROGRAMA : CONSULTALOGGERAL.PRG
COMENTARIO : CONSULTA LOG GERAL COM MARIADB
*/
#pragma -w0
#pragma -es0
#include "hwgui.ch"
******************************************
FUNCTION LOGGERALMARIADB( )
******************************************
LOCAL oDlg;
, oLabel1, oLabel2, oLabel3;
, obusca, oBrowse1 ;
, oToolbar1;
, oToolbutton1, oToolbutton2, oToolbutton3, oToolbutton4;
, oDatepicker1 , oDatepicker2 ;
, oColuna, bColorBlock ;
, vBusca := "";
, cQuery
PRIVATE cProgressKey:="" ,dDatepicker1:=(m->dat_hoje - 30), dDatepicker2:=m->dat_hoje, lFiltro:=.T., nCODPRO:=0;
, oLabel5 :="", oLabel7 :="", oLabel10 :="", oLabel11 :="", oLabel6 :="", oLabel9 :="", oLabel12 :="", oLabel18 :=""
BEGIN SEQUENCE
oCn := MySqlConnection( "192.168.15.200", "", "sgcroot", "20r13uqse" )
oCn:Open()
cQuery:="USE AMADEU"
oCn:EXECUTE(cQuery)
RECOVER
hwg_MsgInfo('Erro na Conecção do Banco de Dados')
Return nil
End
BEGIN SEQUENCE
cQuery:= "SELECT LOGGERAL_NUMNOT, LOGGERAL_CODPRO, LOGGERAL_DATMOV, LOGGERAL_TIPMOV, LOGGERAL_CODVEN, LOGGERAL_CLIFOR, LOGGERAL_QUANT, LOGGERAL_VALUNI, LOGGERAL_OPERADOR from loggeral"
Retorno := oCn:EXECUTE(cQuery)
RECOVER
hwg_MsgInfo('Erro no SELECT do Banco de Dados')
oCn:Close()
Return nil
End
INIT DIALOG oDlg TITLE "Log Geral - Consulta" ;
ICON MEMVAR->SGC_ICON ;
AT 0, 0 SIZE 1167,600 CLIPPER NOEXIT
ThisBRW := oDlg
// hwg_CREATEARLIST( oBrowse1, Retorno )
@ 4,70 BROWSE oBrowse1 ARRAY OF oDlg SIZE 1160,460 STYLE WS_BORDER + WS_VSCROLL +WS_HSCROLL ;
ON SIZE ANCHOR_TOPABS + ANCHOR_LEFTABS + ANCHOR_RIGHTABS + ANCHOR_BOTTOMABS
oBrowse1:oStyleHead := HStyle():New( { 0xffffff, 0xbbbbbb }, 1,, 0.4, 16759929 )
oBrowse1:oFont := HFont():Add( '',0,-15,700,,,)
oBrowse1:AddColumn( HColumn():New( "Nr.Nota",Retorno:fields["LOGGERAL_NUMNOT"]:VALUE,"C",10,00) )
oBrowse1:AddColumn( HColumn():New( "Codigo",Retorno:fields["LOGGERAL_CODPRO"]:VALUE,"C",10,00,) )
// oBrowse1:AddColumn( HColumn():New( "Movimento",{|v,o|o:aArray[o:nCurrent,3]},"D",12,0,.F., ) )
// oBrowse1:AddColumn( HColumn():New( "Tipo",{|v,o|o:aArray[o:nCurrent,4]},"N",1,0,.F., ) )
// oBrowse1:AddColumn( HColumn():New( "Vendedor",{|v,o|o:aArray[o:nCurrent,5]},"N",4,0,.F., ) )
// oBrowse1:AddColumn( HColumn():New( "Cli/For",{|v,o|o:aArray[o:nCurrent,6]},"C",10,0,.F., ) )
// oBrowse1:AddColumn( HColumn():New( "Quantidade",{|v,o|o:aArray[o:nCurrent,7]},"N",14,2,.F., ) )
// oBrowse1:AddColumn( HColumn():New( "Valor Unit.",{|v,o|o:aArray[o:nCurrent,8]},"N",14,2,.F., ) )
// oBrowse1:AddColumn( HColumn():New( "Operador",{|v,o|o:aArray[o:nCurrent,9]},"C",20,0,.F., ) )
@ 8,-1 TOOLBAR oToolbar1 SIZE 1160,40 ;
// oToolbar1:AddButton("BRW_FIL", , 4, 16, "Aplica" ,{||FILTROLOGGERAL( ),obrowse1:REFRESH()},'Aplica Filtro no Arquivo de Log Geral','', "oToolbutton1")
// oToolbar1:AddButton("BRW_DFIL", , 4, 16, "Remove" ,{||REMOVEFILTROLOGGERAL( ),obrowse1:REFRESH()},'Remover Filtro do Arquivo de Log Geral','', "oToolbutton2")
oToolbar1:AddButton("EXIT16BMP", , 4, 16, "Sair" ,{|| DBCLOSEALL(), oDlg:Close() },'Sair da rotina','', "oToolbutton14")
oToolbar1:CreateTool()
ADD STATUS PANEL TO oDlg HEIGHT 30 PARTS 200,120,300
// @ 4,43 SAY oLabel1 CAPTION "Codigo" SIZE 138,25 ;
// STYLE SS_CENTER +WS_DLGFRAME
//
// @ 150,43 GET oEdit1 VAR nCODPRO SIZE 90,25 STYLE ES_RIGHT PICTURE '@R 999999-9' MAXLENGTH 9
//
// @ 245,43 OWNERBUTTON oOwnerbutton1 SIZE 24,24 ;
// TEXT '' ;
// COORDINATES 0, 0, 0, 0 ;
// BITMAP 'FINDBMP' FROM RESOURCE ;
// COORDINATES 2, 0, 0, 0 ;
// ON CLICK {|| ThisBRW:oEdit1:SETFOCUS(), CONSULTA_PRODUTOS( ), nCODPRO := VAL(PRODUTOS->CODPRO), ThisBRW:oEdit1:REFRESH() }
//
// @ 283,47 SAY oLabel2 CAPTION "Periodo:" SIZE 56,18
// @ 349,43 GET DATEPICKER oDatepicker1 VAR dDatepicker1 SIZE 125,24 VALID {|| (dDatepicker1 < dDatepicker2) }
// @ 482,47 SAY oLabel3 CAPTION "A" SIZE 10,18
// @ 499,43 GET DATEPICKER oDatepicker2 VAR dDatepicker2 SIZE 125,24
ACTIVATE DIALOG oDlg CENTER
oCn:Close()
RETURN NIL
STATIC FUNCTION MySqlConnection( cServer, cDatabase, cUser, cPassword, nPort )
LOCAL cnConnection
hb_Default( @nPort, 3306 )
cnConnection:= win_OleCreateObject( "ADODB.Connection" )
cnConnection:ConnectionString := iif( win_OsIs10(), "Provider=MSDASQL;", "" )
cnConnection:ConnectionString += "Driver={MariaDB ODBC 3.1 Driver};"
cnConnection:ConnectionString += ;
"Server=" + cServer + ";" + ;
"Port=" + Ltrim( Str( nPort ) ) + ";" + ;
"Stmt=;" + ;
"Database=" + cDatabase + ";" + ;
"User=" + cUser + ";" + ;
"Password=" + cPassword + ";" + ;
"Collation=utf8_general_ci;" + ;
"AUTO_RECONNECT=1;" + ;
"COMPRESSED_PROTO=0;" + ;
"PAD_SPACE=1"
cnConnection:CursorLocation := 3
cnConnection:CommandTimeOut := 600 // seconds
cnConnection:ConnectionTimeOut := 600 // seconds
RETURN cnConnection
STATIC FUNCTION win_OsIs10(); RETURN .T.
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Conversão Base de Dados Sistema Legado
Olá,
Você vai ter que usar vetor, como eu faço.
Você vai ter que usar vetor, como eu faço.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Conversão Base de Dados Sistema Legado
Mas a HWGUI não tinha um browse igual o TBrowse?asimoes escreveu:Você vai ter que usar vetor, como eu faço.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
Fernando queiroz
- Usuário Nível 4

- Mensagens: 779
- Registrado em: 13 Nov 2014 00:41
- Localização: Porto Alegre/RS
Conversão Base de Dados Sistema Legado
asimoes eu to tentando mas nao saiu nada ate agoraJoséQuintas escreveu:Mas a HWGUI não tinha um browse igual o TBrowse?asimoes escreveu:Você vai ter que usar vetor, como eu faço.
tentei assim
DO WHILE ! oQuery:Eof()
oRow := oQuery:GetRow()
aArray := { oRow:FieldGet( oRow:FieldPos( "LOGGERAL_NUMNOT" )), oRow:FieldGet( oRow:FieldPos( "LOGGERAL_CODPRO" )) }
oQuery:SKIP( )
ENDD
e depois
hwg_CREATEARLIST( oBrowse1, aArray )
@ 4,70 BROWSE oBrowse1 ARRAY OF oDlg SIZE 1160,460 STYLE WS_BORDER + WS_VSCROLL +WS_HSCROLL ;
ON SIZE ANCHOR_TOPABS + ANCHOR_LEFTABS + ANCHOR_RIGHTABS + ANCHOR_BOTTOMABS
mas nao rolou , to perdido
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Conversão Base de Dados Sistema Legado
Código: Selecionar todos
rs := conexão:Execute( "SELECT ...." )
aArray := rs:GetRows()
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
AutomoSistema
- Usuário Nível 2

- Mensagens: 87
- Registrado em: 27 Nov 2015 22:09
- Localização: Jardim-MS
Conversão Base de Dados Sistema Legado
Boa tarde, depois de um select eu faço assim
::MemoryTableVenda:Zap()
xRegistro := Len( ::xPegaDados )
For xConta = 1 to xRegistro
::MemoryTableVenda:Append()
With Object ::MemoryTableVenda:Fields
:Codigo := ::xPegaDados[xConta,1]
:Nome := ::xPegaDados[xConta,2]
:Custo := ::xPegaDados[xConta,3]
:Venda := ::xPegaDados[xConta,4]
:Total := ::xPegaDados[xConta,4] * :Quantidade
End
Next
adicionando dados de uma array em uma tabela temporária fica muito rápido depois de um simples select
::MemoryTableVenda:Zap()
xRegistro := Len( ::xPegaDados )
For xConta = 1 to xRegistro
::MemoryTableVenda:Append()
With Object ::MemoryTableVenda:Fields
:Codigo := ::xPegaDados[xConta,1]
:Nome := ::xPegaDados[xConta,2]
:Custo := ::xPegaDados[xConta,3]
:Venda := ::xPegaDados[xConta,4]
:Total := ::xPegaDados[xConta,4] * :Quantidade
End
Next
adicionando dados de uma array em uma tabela temporária fica muito rápido depois de um simples select
-
Fernando queiroz
- Usuário Nível 4

- Mensagens: 779
- Registrado em: 13 Nov 2014 00:41
- Localização: Porto Alegre/RS
Conversão Base de Dados Sistema Legado
Ainda esta meio estranho mas já deu uma luz
fiz assim
oServer := MySqlConnection( "192.168.15.200", "", "sgcroot", "20r13uqse" )
oServer:Open()
oServer:Execute( "USE AMADEU")
oQuery := oServer:Execute( "SELECT LOGGERAL_NUMNOT, LOGGERAL_CODPRO from loggeral LIMIT 50" )
aArray := oQuery:GetRows()
INIT DIALOG oDlg TITLE "Log Geral - Consulta" ;
ICON MEMVAR->SGC_ICON ;
AT 0, 0 SIZE 1167,600 CLIPPER NOEXIT
ThisBRW := oDlg
@ 4,70 BROWSE oBrowse1 ARRAY OF oDlg SIZE 1160,460 STYLE WS_BORDER + WS_VSCROLL +WS_HSCROLL ;
ON SIZE ANCHOR_TOPABS + ANCHOR_LEFTABS + ANCHOR_RIGHTABS + ANCHOR_BOTTOMABS
oBrowse1:oStyleHead := HStyle():New( { 0xffffff, 0xbbbbbb }, 1,, 0.4, 16759929 )
oBrowse1:oFont := HFont():Add( '',0,-15,700,,,)
hwg_CREATEARLIST( oBrowse1, aArray )
oBrowse1:aColumns[1]:heading := "Nr.Nota"
oBrowse1:aColumns[2]:heading := "Codigo"
so que pelo visto ele ta pegando o array como uma coluna somente
fiz assim
oServer := MySqlConnection( "192.168.15.200", "", "sgcroot", "20r13uqse" )
oServer:Open()
oServer:Execute( "USE AMADEU")
oQuery := oServer:Execute( "SELECT LOGGERAL_NUMNOT, LOGGERAL_CODPRO from loggeral LIMIT 50" )
aArray := oQuery:GetRows()
INIT DIALOG oDlg TITLE "Log Geral - Consulta" ;
ICON MEMVAR->SGC_ICON ;
AT 0, 0 SIZE 1167,600 CLIPPER NOEXIT
ThisBRW := oDlg
@ 4,70 BROWSE oBrowse1 ARRAY OF oDlg SIZE 1160,460 STYLE WS_BORDER + WS_VSCROLL +WS_HSCROLL ;
ON SIZE ANCHOR_TOPABS + ANCHOR_LEFTABS + ANCHOR_RIGHTABS + ANCHOR_BOTTOMABS
oBrowse1:oStyleHead := HStyle():New( { 0xffffff, 0xbbbbbb }, 1,, 0.4, 16759929 )
oBrowse1:oFont := HFont():Add( '',0,-15,700,,,)
hwg_CREATEARLIST( oBrowse1, aArray )
oBrowse1:aColumns[1]:heading := "Nr.Nota"
oBrowse1:aColumns[2]:heading := "Codigo"
so que pelo visto ele ta pegando o array como uma coluna somente
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Conversão Base de Dados Sistema Legado
A impressão que tenho é que está ao contrário: linhas são colunas, e colunas são linhas.
A primeira linha são as notas, e a segunda linha são os códigos
A primeira linha são as notas, e a segunda linha são os códigos
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Conversão Base de Dados Sistema Legado
Olhando os fontes:
HBROWSE tem as propriedades bSkip, bGoto, bGoTop, bGoBot, bEof, bBof - acredito que sejam os codeblocks de movimentação
HCOLUMN tem a propriedade block, heading - acredito que seja o equivalente das colunas do tbrowse
Como se usa isso não sei, mas seria o equivalente do tbrowse, e seria adaptar aquele tbrowse console pra esse controle.
Talvez olhar os arquivos CH, pra ver como usar isso via comando.
HBROWSE tem as propriedades bSkip, bGoto, bGoTop, bGoBot, bEof, bBof - acredito que sejam os codeblocks de movimentação
HCOLUMN tem a propriedade block, heading - acredito que seja o equivalente das colunas do tbrowse
Como se usa isso não sei, mas seria o equivalente do tbrowse, e seria adaptar aquele tbrowse console pra esse controle.
Talvez olhar os arquivos CH, pra ver como usar isso via comando.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Conversão Base de Dados Sistema Legado
Array para o BROWSE ARRAY da HwGui é assim:
aResult := { { COL1, COL2, COL3 } }
Então usando FOR .. EACH
aResult := { { COL1, COL2, COL3 } }
Então usando FOR .. EACH
Código: Selecionar todos
For Each oElemento IN aResult
aAdd( aResult, { oElemento[1], oElemento[2], oElemento[3] } ) //até o limite de elementos do resultset
Next
ThisForm:GridTeste:aArray := aResult
ThisForm:GridTeste:Refresh()
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Conversão Base de Dados Sistema Legado
Somente como exemplo como eu faço:
Código: Selecionar todos
@ 0005,0144 BROWSE GridProcessos ;
ARRAY ;
SIZE 1296,455 ;
STYLE WS_TABSTOP + ES_AUTOHSCROLL + WS_HSCROLL ;
FONT HFont():Add( 'Tahoma', 0, -13, 550 ) ;
ON CLICK {|| ::MPegaNumeroProcesso("C") }
With Object GridProcessos
:aArray := {}
:HighlightStyle := 1
:sepColor := 16711680
:tcolorSel := Hwg_Rgb(0, 0, 0)
:bcolorSel := N_CLEANBLUE
:headColor := Hwg_Rgb(0, 0, 0)
:freeze := 1
:lAdjRight := .T.
:nColumns := 7
:AutoFit()
:oHeadFont := HFont():Add( 'Tahoma', 0, -13, 700 )
:nHeadHeight := 24
:SetRowHeight( :nHeadHeight )
:ShowMark(.T.) // Seta da grid
:AddColumn( HColumn():New('Data;Preferência', hwg_ColumnArBlock(), 'D', 10, 00, lEditable, DT_CENTER, DT_CENTER,,,,,,{|| ::Ordena(1)},,,,))
:AddColumn( HColumn():New('Data;Entrada', hwg_ColumnArBlock(), 'D', 10, 00, lEditable, DT_CENTER, DT_CENTER,,,,,,,,,,))
:AddColumn( HColumn():New(';Processo', hwg_ColumnArBlock(), 'C', 25, 00, lEditable, DT_CENTER, DT_CENTER, '@R 9999999-99.9999.9.99.9999',,,,,,,,,))
:AddColumn( HColumn():New(';Reclamante', hwg_ColumnArBlock(), 'C', 60, 00, lEditable, DT_CENTER, DT_LEFT,,,,,,,,,,))
:AddColumn( HColumn():New(';Valor', hwg_ColumnArBlock(), 'N', 14, 02, lEditable, DT_CENTER, DT_RIGHT, '@E 99,999,999.99',,,,,,,,,))
:AddColumn( HColumn():New(';Status', hwg_ColumnArBlock(), 'C', 10, 00, lEditable, DT_CENTER, DT_CENTER,,,,,,,,,,))
:AddColumn( HColumn():New('Banco;Judicial', hwg_ColumnArBlock(), 'C', 10, 00, lEditable, DT_CENTER, DT_CENTER, '@R 999-9',,,,,,,,,))
:bOther := {|this,m,wp,lp| ::MGridProcessosChange( this, m, wp, lp ) }
For iColuna:=1 to 7
:aColumns[iColuna]:bColorBlock := {|| ::MColorBlock() }
DoEvents()
Next
End
METHOD MColorBlock()
LOCAL bColor, cStatusProcesso
cTipoBloqueio := Thisform:GridProcessos:aArray[ Thisform:GridProcessos:nCurrent, 8]
cEnviadoFinCon := Thisform:GridProcessos:aArray[ Thisform:GridProcessos:nCurrent, 9]
cStatusProcesso := Thisform:GridProcessos:aArray[ Thisform:GridProcessos:nCurrent, 10]
If cStatusProcesso $ "CQS"
bColor := {8334079, N_WHITE, 8334079, N_CLEANBLUE}
Else
If cEnviadoFinCon = "1"
bColor := {33023, N_WHITE, 33023, N_CLEANBLUE}
Else
bColor := {N_BLACK, N_WHITE , N_BLACK, N_CLEANBLUE}
If ! Empty( cTipoBloqueio )
bColor := {N_RED, N_WHITE, N_RED, N_CLEANBLUE}
Else
bColor := {N_BLACK, N_WHITE , N_BLACK, N_CLEANBLUE}
Endif
Endif
Endif
RETURN bColor
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Conversão Base de Dados Sistema Legado
A grid é populada com algum resultset, depois que faz uma depois é somente copy/cola e alguns ajustes
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
