só tem pra 64 bits, é isso?d:\github\harbour32>win-make clean install
! Building Harbour 3.2.0dev from source - https://harbour.github.io
! MAKE: win-make 4.1 sh.exe clean install
! HB_INSTALL_PREFIX: d:\harbour
! HB_BUILD_DYN: no
! HB_BUILD_CONTRIB_DYN: no
! HB_BUILD_SHARED: no
! HB_BUILD_STRIP: all
! HB_HOST_PLAT: win (x86_64) HB_SHELL: nt
! HB_PLATFORM: win (x86) (auto-detected)
! HB_COMPILER: mingw
...
gcc -I. -I../../../../../../include -Wmissing-braces -Wreturn-type -Wformat -Wimplicit-int -Wimplicit-function-declaration -O3 -fomit-frame-pointer -march=i586 -mtune=pentiumpro -DUNICODE -Id:/github/harbour32/src/3rd/zlib -DPNG_NO_STDIO -DPNG_ARM_NEON_OPT=0 -opng.o -c ../../../png.c
cc1.exe: error: CPU you selected does not support x86-64 instruction set
Browse ADO/Array
Moderador: Moderadores
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Browse ADO/Array
Que p. é esta:
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
Browse ADO/Array
E não adianta pular.
SET HB_WITH_PNG=no
Depois dá erro em JPEG, e outras.
Harbour 3.2 só gera 64 bits.
SET HB_WITH_PNG=no
Depois dá erro em JPEG, e outras.
Harbour 3.2 só gera 64 bits.
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
Browse ADO/Array
Xi.... esquece....
Harbour nightly de hoje.
Mesmo problema.
Agora.... entendi direito isto?
Harbour nightly de hoje.
Mesmo problema.
Agora.... entendi direito isto?
Use o método GetRows para copiar registros de um conjunto de registros em uma matriz bidimensional. O primeiro subscrito identifica o campo e o segundo identifica o número do registro.
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
Browse ADO/Array
Não vai de um jeito, vai de outro.
Código: Selecionar todos
PROCEDURE Main
LOCAL oExcel, oRs, aRowList, aColList, xCol
SetMode(25,80)
CLS
oExcel := ExcelConnection( "d:\temp\test.xls" )
oExcel:Open()
oRs := oExcel:Execute( "SELECT * FROM [planilha1$]" )
aRowList := oRs:GetRows()
oRs:Close()
oExcel:Close()
aRowList := InverseArray( aRowList )
FOR EACH aColList IN aRowList
?
FOR EACH xCol IN aColList
?? xCol
?? Space(3)
NEXT
NEXT
?
? hb_Version()
Inkey(0)
RETURN
FUNCTION InverseArray( a )
LOCAL aNew, c, d
aNew := Array( Len( a[ 1 ] ), Len( a ) )
FOR EACH c IN a
FOR EACH d IN c
aNew[ d:__EnumIndex ][ c:__EnumIndex ] := d
NEXT
NEXT
RETURN aNew
FUNCTION ExcelConnection( cFileName, cVersion )
LOCAL oConexao
DO CASE
CASE ValType( cVersion ) == "C"
CASE ".xlsx" $ Lower( cFileName ); cVersion := "12.0" // XLSX
//CASE "t00" $ Lower( cFileName ) ; cVersion := "5.0" // 95
OTHERWISE ; cVersion := "8.0" // 97/2000/XP
ENDCASE
oConexao := win_OleCreateObject( "ADODB.Connection" )
oConexao:ConnectionString := ;
[Provider=Microsoft.ACE.OLEDB.12.0;Data Source=] + cFileName + ;
[;Extended Properties="Excel ] + cVersion + [;HDR=YES";]
RETURN oConexao
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
Browse ADO/Array
Desculpem a confusão.
A definição da Microsoft diz que no ADO vém em ordem inversa.
Sendo assim, não há o que mexer no Harbour, porque o comportamento do GetRows() do ADO é esse mesmo.
É que a correção foi para corrigir a ordem no Excel, e achei que estava relacionada.
Agora fica até a dúvida se no Excel também é invertido.
A definição da Microsoft diz que no ADO vém em ordem inversa.
Sendo assim, não há o que mexer no Harbour, porque o comportamento do GetRows() do ADO é esse mesmo.
É que a correção foi para corrigir a ordem no Excel, e achei que estava relacionada.
Agora fica até a dúvida se no Excel também é invertido.
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/
-
gilbertosilverio
- Usuário Nível 3

- Mensagens: 339
- Registrado em: 18 Jan 2009 10:39
- Localização: Ribeirao Pires - SP
Browse ADO/Array
Ola amigos,
Baseado neste exemplo, criei uma rotina para importar arquivos xls para meu sistema, mais hoje estou com um problema quando as colunas veem com números e alfanuméricos.
Tentei pelo valtype para poder diferenciar, mais nao sei e se padrao do ADO, mais ele formata a coluna sempre pela primeira passagem.
Como exemplo separei as colunas para ver os retornos, no caso essa coluna 34 onde esta o NUM, e que ocorre o erro.
Quando no xls a coluna esta como GERAL, o ADO transforma ela em Numero. Ja tentei de tudo e nao consigo passar, somente manipulando a coluna para TEXTO, so que nao queria que o pessoal precisa-se fazer isso, pois sei que vao esquecer.
Alguma dica de como contornar este problema.
Grato.
Baseado neste exemplo, criei uma rotina para importar arquivos xls para meu sistema, mais hoje estou com um problema quando as colunas veem com números e alfanuméricos.
Tentei pelo valtype para poder diferenciar, mais nao sei e se padrao do ADO, mais ele formata a coluna sempre pela primeira passagem.
Como exemplo separei as colunas para ver os retornos, no caso essa coluna 34 onde esta o NUM, e que ocorre o erro.
Código: Selecionar todos
oQuery := "SELECT * FROM [" +ALLTRIM(cABA_PEDI)+"$]"
oExcel := ExcelConnection( @cFILE )
oExcel:Open()
oRs := oExcel:Execute( oQUERY )
aRowList := oRs:GetRows()
oRs:Close()
oExcel:Close()
aRowList := InverseArray( aRowList )
FOR EACH aColList IN aRowList
AADD (aTUDO, [ ])
C:=1
FOR EACH xCol IN aColList
IF C = 34
IF valtype(xCOL) = [N]
AADD( aTUDO, STR(xCol,10) )
ELSE
AADD( aTUDO, xCol )
ENDIF
ELSEIF valtype(xCOL) = [C]
IF C = 08
AADD( aTUDO, VAL(xCol) )
ELSEIF C = 42
AADD( aTUDO, VAL(RETIRAVIRGULA(xCol)) )
ELSE
AADD( aTUDO, xCol )
ENDIF
ELSEif valtype(xCOL) = [N]
IF C = 1
AADD( aTUDO, INT(xCol) )
ELSEIF C = 4
AADD( aTUDO, xCol )
ELSEIF C = 08
AADD( aTUDO, xCol )
ELSEIF C = 20
AADD( aTUDO, xCol )
ELSE
AADD( aTUDO, TRANSF(xCol, [@L]) )
ENDIF
ELSEIF valtype(xCOL) = [U]
AADD(aTUDO, [ ])
ELSE
AADD(aTUDO, [ ])
ENDIF
C++
NEXT
AADD( aPEDIDO, aTUDO )
aTUDO:={}
NEXT
Alguma dica de como contornar este problema.
Grato.
GilbertoSilverio
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Browse ADO/Array
Olá!
Coloque o SQL para te ajudar. Faça ele formatar o retorno da forma que você precisa. Exemplo:
Coloque o SQL para te ajudar. Faça ele formatar o retorno da forma que você precisa. Exemplo:
Código: Selecionar todos
oQuery := "SELECT cast(ie as char,20)), " + ;
" cast(desctinatario as char(50)), " + ;
" cast(endereco as char(50)), " + ;
" cast(num as char(5)), " + ;
" cast(cidade as char(50)), " + ;
" cast(estado as char(2)), " + ;
" cast(cep as char(15)) " + ;
" FROM " + ALLTRIM(cABA_PEDI)+"$]"[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Browse ADO/Array
É por isso que eu prefiro usar minha lib igual fazia com DBF, e definir o tipo de retorno.
Digo exatamente como quero a leitura e formatação.
Em GUI precisaria adicionar o alinhamento de números à direita também.
Só não sei como indicaria as colunas do Excel, mas uma pesquisa rápida no google deve resolver.
Código: Selecionar todos
METHOD GridSelection() CLASS JPTRANSACAOClass
LOCAL oTBrowse, cnSQL := ADOClass():New( AppConexao() )
WITH OBJECT cnSQL
:cSQL := "SELECT IDTRANSACAO, TRNOME, TRREACAO FROM JPTRANSACAO ORDER BY TRNOME"
:Execute()
oTBrowse := { ;
{ "ID", { || StrZero( :Number( "IDTRANSACAO" ), 6 ) } }, ;
{ "DESCRICAO", { || :String( "TRNOME", 25 ) } }, ;
{ "REACAO", { || :String( "TRREACAO", 25 ) } } }
BrowseADO( cnSQL, oTBrowse, "TRNOME", { || StrZero( :Number( "IDTRANSACAO" ), 6 ) } )
:CloseRecordset()
ENDWITH
RETURN NIL
Em GUI precisaria adicionar o alinhamento de números à direita também.
Só não sei como indicaria as colunas do Excel, mas uma pesquisa rápida no google deve resolver.
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/
-
gilbertosilverio
- Usuário Nível 3

- Mensagens: 339
- Registrado em: 18 Jan 2009 10:39
- Localização: Ribeirao Pires - SP
Browse ADO/Array
Alexandre,
Obrigado, vou testar...
Obrigado, vou testar...
GilbertoSilverio
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
Browse ADO/Array
No Excel, quando vc coloca uma Aspa simples antes do número força ele a ser interpretado como caractere e a Aspa não é exibida. É tipo um símbolo com significado especial.
-
gilbertosilverio
- Usuário Nível 3

- Mensagens: 339
- Registrado em: 18 Jan 2009 10:39
- Localização: Ribeirao Pires - SP
Browse ADO/Array
Alexandre,
Infelizmente, tentei de todas as maneiras, mais não funciona nem o cast nem o convert, da erro de execução...
Grato.
Infelizmente, tentei de todas as maneiras, mais não funciona nem o cast nem o convert, da erro de execução...
Grato.
GilbertoSilverio
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
-
gilbertosilverio
- Usuário Nível 3

- Mensagens: 339
- Registrado em: 18 Jan 2009 10:39
- Localização: Ribeirao Pires - SP
Browse ADO/Array
Ola amigos,
O segredo e aqui, deve-se usar IMEX=1 para dados mistos...
O segredo e aqui, deve-se usar IMEX=1 para dados mistos...
Código: Selecionar todos
oConexao := win_OleCreateObject( "ADODB.Connection" )
oConexao:ConnectionString := ;
[Provider=Microsoft.ACE.OLEDB.12.0;Data Source=] + cFileName + ;
[;Extended Properties="Excel ] + cVersion + [;HDR=YES;IMEX=1";]
GilbertoSilverio
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
-
gilbertosilverio
- Usuário Nível 3

- Mensagens: 339
- Registrado em: 18 Jan 2009 10:39
- Localização: Ribeirao Pires - SP
Browse ADO/Array
Ola amigos,
Como ficou a rotina:
Como ficou a rotina:
Código: Selecionar todos
FUNCTION ExcelConnection( cFileName, cVersion )
LOCAL oConexao
DO CASE
CASE ValType( cVersion ) == "C"
CASE ".xlsx" $ Lower( cFileName ); cVersion := "12.0" // XLSX
OTHERWISE ; cVersion := "8.0" // 97/2000/XP
ENDCASE
try
oConexao := win_OleCreateObject( "ADODB.Connection" )
oConexao:ConnectionString := ;
[Provider=Microsoft.ACE.OLEDB.12.0;Data Source=] + cFileName + ;
[;Extended Properties="Excel ] + cVersion + [;HDR=NO;IMEX=1";]
/* // sem cabecario
oConexao:ConnectionString := ;
[Provider=Microsoft.ACE.OLEDB.12.0;Data Source=] + cFileName + ;
[;Extended Properties="Excel ] + cVersion + [;HDR=YES";]
*/
catch
hwg_msgstop([Erro na abertura do arquivo, por favor verifique],[Aviso do sistema])
return nil
endtry
RETURN oConexao
Código: Selecionar todos
Function teste_cast(cFILE, cFILE1)
LOCAL oExcel, oRs, aRowList, aColList, xCol, aColLista, xColLis, xTAMA
Private aPEDIDO:={}, aTUDO:={}, oQuery, aITENS :={}, TITULO:={}
IF !EMPTY(aDESTINO)
oQuery := "SELECT * FROM [" +ALLTRIM(cABA_PEDI)+"$]"
oExcel := ExcelConnection( @cFILE )
oExcel:Open()
oRs := oExcel:Execute( oQUERY )
aRowList := oRs:GetRows()
oRs:Close()
oExcel:Close()
aRowList := InverseArray( aRowList )
FOR EACH aColList IN aRowList
FOR EACH xCol IN aColList
IF valtype(xCOL) = [C]
AADD( aTUDO, xCol )
ELSEif valtype(xCOL) = [N]
AADD( aTUDO, STR(xCol) )
ELSEIF valtype(xCOL) = [U]
AADD(aTUDO, [ ])
ELSE
AADD(aTUDO, [ ])
ENDIF
NEXT
AADD( aPEDIDO, aTUDO )
aTUDO:={}
NEXT
IF LEN(aPEDIDO) > 0
FOR EACH aColLista IN aPEDIDO
FOR EACH xCOLLIS IN aColLista
AADD( TITULO, xCOLLIS ) // MONTAR CABECARIO DO BROWSE
NEXT
NEXT
xTAMA:=LEN(aPEDIDO) // TIRAR O CABECARIO DA TABELA DEIXAR SOMENTE OS DADOS
ADEL ( aPEDIDO, 1 )
ASize( aPEDIDO, xTAMA-1 )
BROWSE_ARRAY_EXCEL( @aPEDIDO, @TITULO )
ELSE
HWG_MSGINFO([nada])
ENDIF
ENDIF
RETURN NIL
Código: Selecionar todos
FUNCTION BROWSE_ARRAY_EXCEL( aMATA, aTITULO )
LOCAL oDLG_MATRIZ, oPage1, aBr2, nI:=0
INIT DIALOG oDLG_MATRIZ TITLE "Tabela EXCEL " AT 0,0 SIZE 1000, 600 ;
FONT HFont():Add( 'tahoma', 0, -13, 400,,,) STYLE WS_CAPTION+DS_CENTER
@ 10,30 BROWSE aBr2 ARRAY SIZE oDLG_MATRIZ:nWidth-30, oDLG_MATRIZ:nHeight-100 ;
STYLE WS_TABSTOP+WS_HSCROLL FONT HFont():Add( 'tahoma', 0, -13, 400,,,)
aBr2:aArray := aMATA
Hwg_CreateArList( aBr2, aMATA )
aBr2:lESC := .T.
aBr2:lAdjRight := .T.
FOR nI := 1 TO Len(aBr2:aColumns)
aBr2:aColumns[nI]:heading := aTITULO[nI]
IF (aBr2:aColumns[nI]):Type == "C"
aBr2:aColumns[nI]:nJusHead := DT_LEFT
aBr2:aColumns[nI]:Length := LEN(aTITULO[nI])+10
ELSE
aBr2:aColumns[nI]:nJusHead := DT_LEFT
aBr2:aColumns[nI]:Length := 15
ENDIF
IF (aBr2:aColumns[nI]):Type == "C"
aBr2:aColumns[nI]:nJusLin := DT_LEFT
aBr2:aColumns[nI]:Picture := [@!]
ELSEIF (aBr2:aColumns[nI]):Type == "N"
aBr2:aColumns[nI]:nJusLin := DT_RIGHT
aBr2:aColumns[nI]:Picture := [@E 999,999,999.99]
ENDIF
NEXT
FOR nG := 1 TO Len(aBr2:aColumns)
aBr2:aColumns[nG]:bColorFoot := {|ng| {x_BLUE, x_YELLOW} }
NEXT
@ oDLG_MATRIZ:nWidth-130,oDLG_MATRIZ:nHeight-55 BUTTONEX "Sai&r" SIZE 120,38 STYLE WS_TABSTOP ;
ON CLICK {|| oDLG_MATRIZ:CLOSE() }
ACTIVATE DIALOG oDLG_MATRIZ
RETURN(.T.)
GilbertoSilverio
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
