Ajuda com Minigui + SQL SERVER 2012
Moderador: Moderadores
-
luiz antonio da silva
- Usuário Nível 3

- Mensagens: 161
- Registrado em: 21 Nov 2006 22:12
- Localização: serrana-sp
Ajuda com Minigui + SQL SERVER 2012
Boa noite pessoal !
Alguém teria um exemplo de conexão com MSSQL + minigui (ou hmg) com os dados para conexão e leitura dos dados ?
Estou trabalhando atualmente com MINIGUI EXT + ADODB + ORACLE 11g sem problemas, mas acredito que a empresa vá migrar
para SQL SERVER 2012, ví vários exemplos no forum e na net mas não consegui conexão nos testes.
** Pode ser que seja a string de conexão, tentei mudar...mas sinceramente não sei o que usar.
Se alguém puder dar-me uma luz (FAROL na verdade né...rs) ficarei grato.
Paz para todos.
Luiz.
Alguém teria um exemplo de conexão com MSSQL + minigui (ou hmg) com os dados para conexão e leitura dos dados ?
Estou trabalhando atualmente com MINIGUI EXT + ADODB + ORACLE 11g sem problemas, mas acredito que a empresa vá migrar
para SQL SERVER 2012, ví vários exemplos no forum e na net mas não consegui conexão nos testes.
** Pode ser que seja a string de conexão, tentei mudar...mas sinceramente não sei o que usar.
Se alguém puder dar-me uma luz (FAROL na verdade né...rs) ficarei grato.
Paz para todos.
Luiz.
HMG 3.4.4 - SQL SERVER - ORACLE
-
luiz antonio da silva
- Usuário Nível 3

- Mensagens: 161
- Registrado em: 21 Nov 2006 22:12
- Localização: serrana-sp
Ajuda com Minigui + SQL SERVER 2012
Boa noite Novamente !
Buscando novas informações na net encontrei a solução com meu velho e bom companheiro...o ADODB...rs
ADODB.CH que uso com Oracle, firebird, MYSQL....e agora com SQL SERVER...rs
adodb.ch
Programa exemplo, conecta e le registros na tabela Role do banco ReportServer do SQL SERVER 2012 EXPRESS
sql.prg
do mais, foi instalar o DRIVER ODBC (No meu caso o de 32b) encontrado no seguinte link
http://www.microsoft.com/pt-br/download ... x?id=36434
e é isso...blz?
Luiz.
Buscando novas informações na net encontrei a solução com meu velho e bom companheiro...o ADODB...rs
ADODB.CH que uso com Oracle, firebird, MYSQL....e agora com SQL SERVER...rs
adodb.ch
Código: Selecionar todos
*
* Adodb.CH - Arquivo de Definição de Constantes do Sistema
*
//Tipo do Cursor
#Define adOpenForwardOnly 0 //adOpenForwardOnly = 0 # permite somente que você avance aos registros posteriores,perdendo-se os anteriores
#Define adOpenKeyset 1 //adOpenKeyset = 1 # leitura e escrita (não permite ver alterações ou exclusões feitas por outros usuários)
#Define adOpenDynamic 2 //adOpenDynamic = 2 # leitura e escrita (permite ver alterações ou exclusões feitas por outros usuários)
#Define adOpenStatic 3 //adOpenStatic = 3 # permite somente leitura
//Tipo de travamento de Registros - LockType
#Define adLockReadOnly 1 //adLockReadOnly = 1 somente leitura
#Define adLockPessimistic 2 //adLockPessimistic = 2 Impede que outras sessões alterem o registro que estiver alocado pelo usuário
#Define adLockOptimistic 3 //adLockOptimistic = 3 Todos podem alterar o mesmo registro
#Define adLockBatchOptimistic 4 //adLockBatchOptimistic = 4 Impede que outras sessões quando estiver em modo update batch
//Localização do Cursor - CursorLocation
#Define adUseServer 2
#Define adUseClient 3
//Estados dos RecordSets
#Define adEditNone 0
#Define adEditInProgress 1
#Define adEditAdd 2
#Define adEditDelete 4
//Tipos de dados retornados pelo DB
#Define RS_Empty 0 //Padrao Dbase C
#Define RS_TinyInt 16 //Padrao Dbase N
#Define RS_SmallInt 2 //Padrao Dbase N
#Define RS_integer 3 //Padrao Dbase N
#Define RS_BigInt 20 //Padrao Dbase N
#Define RS_UnsignedTinyInt 17 //Padrao Dbase N
#Define RS_UnsignedSmallInt 18 //Padrao Dbase N
#Define RS_UnsignedInt 19 //Padrao Dbase N
#Define RS_UnsignedBigInt 21 //Padrao Dbase N
#Define RS_Single 4 //Padrao Dbase N
#Define RS_Double 5 //Padrao Dbase N
#Define RS_currency 6 //Padrao Dbase N
#Define RS_Decimal 14 //Padrao Dbase N
#Define RS_Numeric 131 //Padrao Dbase N
#Define RS_Boolean 11 //Padrao Dbase N
#Define RS_Error 10 //Padrao Dbase C
#Define RS_UserDefined 132 //Padrao Dbase C
#Define RS_Variant 12 //Padrao Dbase C
#Define RS_IDispatch 9 //Padrao Dbase C
#Define RS_IUnknown 13 //Padrao Dbase C
#Define RS_GUID 72 //Padrao Dbase C
#Define RS_Date 7 //Padrao Dbase D
#Define RS_DBDate 133 //Padrao Dbase D
#Define RS_DBTime 134 //Padrao Dbase D
#Define RS_DBTimeStamp 135 //Padrao Dbase D
#Define RS_BSTR 8 //Padrao Dbase C
#Define RS_Char 129 //Padrao Dbase C
#Define RS_VarChar 200 //Padrao Dbase C
#Define RS_LongVarChar 201 //Padrao Dbase C
#Define RS_WChar 130 //Padrao Dbase C
#Define RS_VarWChar 202 //Padrao Dbase C
#Define RS_LongVarWChar 203 //Padrao Dbase C
#Define RS_Binary 128 //Padrao Dbase C
#Define RS_VarBinary 204 //Padrao Dbase C
#Define RS_LongVarBinary 205 //Padrao Dbase C
#Define RS_Chapter 136 //Padrao Dbase C
#Define RS_FileTime 64 //Padrao Dbase C
#Define RS_DBFileTime 137 //Padrao Dbase C
#Define RS_PropVariant 138 //Padrao Dbase C
#Define RS_VarNumeric 139 //Padrao Dbase C
#xcommand DECLARE CONNECTION <w> ;
=>;
#xtranslate <w>.\<p:BeginTrans,RollbackTrans,CommitTrans,close,execute\> => <w>:\<p\>;;
#xcommand DECLARE RECORDSET <w> ;
=>;
#xtranslate <w>.\<p:MoveNext,MovePrevious,MoveFirst,MoveLast,Find,AddNew,Update,Eof,Bof,close,CancelUpdate,Delete,Requery\> => <w>:\<p\>;;
#xtranslate <w>->\<c>\.\<p:Value,Name,type\> => <w>:Fields\[\<(c)\>]:\<p\>;;
#xtranslate <w>.\<c\>.\<p:Value,Name,type\> => YKKRETVALUE <w> \<(c)\> \<p\>
#xtranslate YKKRETVALUE <a> <b> <c> => <a>:Fields\[\<b>]:<c>
#xTranslate NEW RECORDSET <a> => <a>:=CreateObject("ADODB.Recordset")
#xTranslate NEW CONNECTION <a> => <a>:=CreateObject("ADODB.Connection")
#command CLOSE CONNECTION <a> => <a>:close()
#command CLOSE RECORDSET <a> => <a>:close()
#xtranslate OPEN CONNECTION <b> STRING <(a)> => <b>:Open(<(a)>)
#command OPEN RECORDSET <a> CONNECTION <b> CURSORTYPE <d> LOCKTYPE <e> SQL <f> => <a>:Open(<f>,<b>,<d>,<e>)
#command ERROR CONNECTION <a> => if(<a>:Errors:Count>0,MsgStop("Erro Nativo: "+alltrim(Str(<a>:Errors\[0\]:NativeError))+chr(13)+chr(10)+"Descrição..: "+<a>:Errors\[0\]:Description),Nil)
/********************** Com estas linhas funciona com Harbour
*********************/
#ifdef __HARBOUR__
//ANNOUNCE HB_GTSYS
ANNOUNCE HB_GTSYS
REQUEST HB_GT_GUI_DEFAULT
#xcommand TRY => BEGIN SEQUENCE WITH s_bBreak
#xcommand CATCH [<!oErr!>] => RECOVER [USING <oErr>] <-oErr->
#xcommand FINALLY => ALWAYS
static s_bBreak := { |oErr| break( oErr ) }
#endif
/********************* Com estas linhas funciona com Harbour
*********************/
sql.prg
Código: Selecionar todos
#include <minigui.ch>
#include <adodb.ch>
*-------------------------------------------------------------------------*
Function Main
*-------------------------------------------------------------------------*
set date brit
set century on
// CONEXÃO COM SQL SERVER 2012 EXPRESS
CON:="S"
Try
MSQL:=CreateObject("ADODB.Connection")
MSQL:Open("Driver={SQL Server};Server=localhost;Trusted_Connection=Yes;Database=ReportServer;")
Catch err
Msginfo("Erro de conexão com SQL Server: "+err:description)
Close(MSQL)
End
*************************************************************************************************
MSGINFO("CONECTADO")
CMDSQL:="select count(*) as regs from Roles"
Try
Retorno:=MSQL:EXECUTE(CMDSQL)
Catch erro
msginfo("erro: "+err:description)
return
end
Msginfo(str(Retorno:fields["REGS"]:VALUE))
RETU
http://www.microsoft.com/pt-br/download ... x?id=36434
e é isso...blz?
Luiz.
HMG 3.4.4 - SQL SERVER - ORACLE
Ajuda com Minigui + SQL SERVER 2012
CMDSQL:="SELECT ID_LANCAMENTO" + ;
", ID_NOTA" + ;
", ID_PRODUTO" + ;
", VALOR" + ;
", QUANTIDADE_PADRAO" + ;
", QUANTIDADE" + ;
", ALIQUOTA" + ;
", PERCENTUAL_DESCONTO" + ;
", VALOR_DESCONTO" + ;
", CODIGO_FISCAL" + ;
", DATA_LANCAMENTO" + ;
" FROM sgc_dpop_xv.dbo.PDV_NOTA_FISCAL_DETALHES"
Retorno:=MSQL:EXECUTE(CMDSQL)
COMO PEGAR OS DADOS DESTE SELECT
O (Retorno) NAO SEI COMO LER OS DADOS DESTE OETO
", ID_NOTA" + ;
", ID_PRODUTO" + ;
", VALOR" + ;
", QUANTIDADE_PADRAO" + ;
", QUANTIDADE" + ;
", ALIQUOTA" + ;
", PERCENTUAL_DESCONTO" + ;
", VALOR_DESCONTO" + ;
", CODIGO_FISCAL" + ;
", DATA_LANCAMENTO" + ;
" FROM sgc_dpop_xv.dbo.PDV_NOTA_FISCAL_DETALHES"
Retorno:=MSQL:EXECUTE(CMDSQL)
COMO PEGAR OS DADOS DESTE SELECT
O (Retorno) NAO SEI COMO LER OS DADOS DESTE OETO
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Ajuda com Minigui + SQL SERVER 2012
Olá!
Se preferir ADO veja o exemplo abaixo, em SQL Server. Abre uma conexão, executa uma stored procedure e exibe o record set resultante através de um TBrowseDB() no próprio objeto retornado ( note as funções ADORecordSetSkipper() e ADORecordSetFieldBlock() ). Fiz uma alteração nesta última mas no momento estou sem SQL Server e não testei. Qualquer coisa ajustamos.
Nota: Caso necessite carregar o Record set para um array, use o método getRows() do ADO. Exemplo:
SQLMix ADO TBrowse
Se preferir ADO veja o exemplo abaixo, em SQL Server. Abre uma conexão, executa uma stored procedure e exibe o record set resultante através de um TBrowseDB() no próprio objeto retornado ( note as funções ADORecordSetSkipper() e ADORecordSetFieldBlock() ). Fiz uma alteração nesta última mas no momento estou sem SQL Server e não testei. Qualquer coisa ajustamos.
Código: Selecionar todos
/*
Exibição das linhas de um Record set ADO usando TBrowseDB()
Alexandre Santos
Compilar: Hbmk2 tbado hbwin.hbc
*/
#include "tbrowse.ch"
#include "inkey.ch"
#include "setcurs.ch"
#include "box.ch"
#include "set.ch"
#include "ado.ch"
FUNCTION Teste()
LOCAL oCn, oCmd, oRs, oTbr As Object
LOCAL i, nLen, nKey, nRecno As Numeric
LOCAL cCnString as Character
LOCAL bErr := ErrorBlock( __BreakBlock() ), oErr
Set( _SET_DATEFORMAT, "dd/mm/yyyy" )
BEGIN SEQUENCE
/*
Ajuste aqui a connection string conforme o banco
Ou pequise aqui...: https://www.connectionstrings.com/]
*/
// SQL Server 2008 R2
cCnString := "Provider=SQLNCLI10;Server=172.16.40.5;Database=NomeBanco;Uid=usuario;Pwd=senha;"
oCn := win_OleCreateObject("ADODB.Connection")
oCn:ConnectionString := cCnString
oCn:CursorLocation := adUseClient
oCn:Mode := adModeReadWrite
oCn:open()
oCmd := win_OleCreateObject("ADODB.Command")
oCmd:ActiveConnection := oCn
// Prepare the stored procedure
oCmd:CommandText := "spCountryGetAllRows"
oCmd:CommandType := adCmdStoredProc
DispOutAt( MaxRow(), 3, " Obtendo registros... ", "N/W" )
// Execute the stored procedure
// This returns a recordset
oRs := oCmd:Execute()
DispOutAt( MaxRow(), 3, Space(22), "W/W" )
oCmd := NIL
IF oRs != NIL
oTbr := TBrowseDB():new( 04, 3, MaxRow() - 7, MaxCol() - 3 )
// Separators
oTbr:headSep := DEF_HSEP
oTbr:colSep := DEF_CSEP
oTbr:footSep := DEF_FSEP
oTbr:cargo := oRs:bookMark
// Navigation code blocks for Record Set
oTbr:goTopBlock := { || oRs:moveFirst() }
oTbr:goBottomBlock := { || oRs:moveLast() }
oTbr:skipBlock := { |n| ADORecordSetSkipper( oRs,n ) }
// Colors
oTbr:colorSpec := "N/W, W+/BG,N/W*"
// create TBColumn objects and add them to TBrowse object - zero based
nLen := oRs:fields():count() - 1
FOR i := 0 TO nLen
// add code block for individual columns of the record set
oColumn := TBColumnNew( oRs:fields(i):name(), ADORecordSetFieldBlock( oRs, i ) )
// Column widths. For some data types, definedSize returns -1...
oColumn:width := Max( Min( oRs:Fields(i):definedSize,50), Len( oRs:fields(i):name ) )
/// TODO: set Column pictures
// Add new column to TBrowse
oTbr:addColumn( oColumn )
NEXT
// border
DispBox( oTbr:nBottom, oTbr:nLeft - 1, oTbr:nBottom + 4, oTbr:nRight + 1, B_SINGLE + " " )
DispBox( oTbr:nTop - 1, oTbr:nLeft - 1, oTbr:nBottom, oTbr:nRight + 1, B_SINGLE )
DispBox( oTbr:nBottom, oTbr:nLeft - 1, oTbr:nBottom + 4, oTbr:nRight + 1, B_SINGLE + " " )
nOldCursor := SetCursor( SC_NONE )
IF ( oRs:eof() )
DispOutAt( Int( ( oTbr:nBottom - oTbr:nTop ) / 2 ), oTbr:nLeft + 2, ;
PadC( "Não há dados disponíveis para exibição.", Int( oTbr:nRight - oTbr:nLeft ) - 2 ), "W+/RB" )
ELSE
DispOutAt( MaxRow(), 1, PadR( " Registro " + Ltrim( Str( oRs:AbsolutePosition ) ) + " de " + Ltrim( Str( oRs:recordCount ) ) + " ", 20 ), "N/W" )
ENDIF
DO WHILE .T.
DispBegin()
oTbr:forceStable()
// Paint TBrowse current line...
oTbr:ColorRect( { oTbr:RowPos, oTbr:LeftVisible, oTbr:RowPos, oTbr:RightVisible }, { 2, 1 } )
// ... and current cell in different colors
oTbr:ColorRect( { oTbr:rowPos, oTbr:colPos, oTbr:rowPos, oTbr:colPos }, { 3, 2 } )
oTbr:refreshCurrent()
DispEnd()
IF ( oRs:eof() )
DispOutAt( Int( ( oTbr:nBottom - oTbr:nTop ) / 2 ), oTbr:nLeft + 2, ;
PadC( "Não há dados disponíveis para exibição.", Int( oTbr:nRight - oTbr:nLeft ) - 2 ), "W+/RB" )
ELSE
DispOutAt( MaxRow(), 1, PadR( " Registro " + Ltrim( Str( oRs:AbsolutePosition ) ) + " de " + Ltrim( Str( oRs:recordCount ) ) + " ", 20 ), "N/W" )
ENDIF
nKey := Inkey(0)
IF oTbr:applyKey( nKey ) == TBR_EXIT
EXIT
//ELSEIF nKey == K_ENTER
// nRecno := oRs:bookMark
// DispRow( oRs:getRows( 1, adBookmarkCurrent ) )
// oRs:bookMark := nRecno
ENDIF
ENDDO
ENDIF
RECOVER USING oErr
HB_Alert( { "Ocorreu o erro : ;" + oErr:Description, "", "Operação: " + oErr:Operation }, ;
{ ' Fechar ' },"W+/B", 15 )
ALWAYS
IF oRs != NIL .And. oRs:state() = adStateOpen
oRs:close()
ENDIF
IF oCn != NIL .And. oCn:state() = adStateOpen
oCn:close()
ENDIF
oCn := NIL
oRs := NIL
SetCursor( nOldCursor )
END SEQUENC
CLS
ErrorBlock( cbErr )
RETURN NIL
//------------------------------------------------------------------------------
FUNCTION ADORecordSetFieldBlock( oRs, i, xVal )
/*
RETURN { || If( oRs:eof(),Space(Max(oRs:Fields(i):DefinedSize,Len(oRs:Fields(i):name))), ;
oRs:fields(i):Value() ) }
*/
LOCAL bRet
IF xVal == NIL
If oRs:eof()
bRet := { || Space( Max( oRs:Fields( i ):DefinedSize , Len( oRs:Fields( i ):name ) ) ) }
Else
bRet := { || oRs:Fields( i ):value }
Endif
Else
bRet := { |xVal| oRs:Fields( i ):Value := xVal }
ENDIF
RETURN bRet
//------------------------------------------------------------------------------
STATIC FUNCTION ADORecordSetSkipper(oRecordSet,nSkip)
LOCAL nRec := oRecordSet:AbsolutePosition
IF ! ( oRecordSet:eof )
oRecordSet:Move( nSkip )
IF oRecordSet:eof
oRecordSet:moveLast()
ENDIF
IF oRecordSet:bof
oRecordSet:moveFirst()
ENDIF
ENDIF
RETURN (oRecordSet:AbsolutePosition - nRec)
//------------------------------------------------------------------------------ Nota: Caso necessite carregar o Record set para um array, use o método getRows() do ADO. Exemplo:
Código: Selecionar todos
LOCAL aArray, oRs, etc...
// ...
// Recuperação das kinhas do banco
// ...
aArray := oRs:getRows()- Anexos
-
Ado.ch- Arquivo de cabeçalho Ado.ch
- (14.89 KiB) Baixado 512 vezes
[]´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
Ajuda com Minigui + SQL SERVER 2012
Não o que significa exatamente ADODB.luiz antonio da silva escreveu:Alguém teria um exemplo de conexão com MSSQL...
atualmente com MINIGUI EXT + ADODB + ORACLE 11g...
Pode ser que seja a string de conexão
Mas basta procurar no google "connection strings" e vai ter site que contém string pra tudo.
https://www.google.com.br/search?q=conn ... gs&ie=&oe=
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/
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Ajuda com Minigui + SQL SERVER 2012
Olá!
Creio que o Luiz Antonio tenha resolvido o problema dele há quatro anos.
Um fragmento de código que exemplifica como percorrer todo o record set:
Creio que o Luiz Antonio tenha resolvido o problema dele há quatro anos.
O problema atual é este acima.mmatos566 escreveu:COMO PEGAR OS DADOS DESTE SELECT
O (Retorno) NAO SEI COMO LER OS DADOS DESTE OETO
Um fragmento de código que exemplifica como percorrer todo o record set:
Código: Selecionar todos
oCn := win_OleCreateObject("ADODB.Connection")
// Oracle XE
//oCn:ConnectionString := "Provider=OraOLEDB.Oracle;Data Source=XE;User ID=system;Password=abc100;FetchSize=100;CacheType=Memory;"
// SQL Server 2008 R2
oCn:ConnectionString := "Provider=SQLNCLI10;Server=999.16.40.5;Database=Harbour;Uid=usuario;Pwd=senha;"
oCn:Open()
If ! (oCn:state = adStateOpen)
Break( Throw( ErrorNew() ) )
Endif
oRs := win_OleCreateObject( "ADODB.RecordSet")
cSql := "SELECT idOrder, Convert(Char(10), dtOrder,103) dtOrder, vlTotalOrder / 100 vlTotalOrder "
cSql += " FROM dbo.tbOrder (NOLOCK) "
cSql += " WHERE Convert(Char(10), dtOrder,103) = '27/03/2013'"
With Object oRs
:cursorType := adOpenStatic //adOpenForwardOnly //adOpenForward //adOpenDynamic adOpenStatic //
:activeConnection( oCn )
:cursorLocation = adUseClient //adUseServer
:maxRecords = 100000
:cacheSize = 100
:source := cSql
:open()
:moveFirst()
While ! :eof()
QOut( :Fields( "idOrder" ):value, "-", ;
:Fields( "dtOrder" ):Value, "-", ;
Transform( :Fields( "vlTotalOrder" ):Value, "@E 999,999.99" ) )
:MoveNext()
Enddo
? LTrim( Str( oRs:recordCount ), " Records"
End With
IF oRs != NIL .And. oRs:state() = adStateOpen
oRs:close()
ENDIF
IF oCn != NIL .And. oCn:state() = adStateOpen
oCn:close()
ENDIF
oCn := NIL
oRs := NIL
Foi o que coloquei comentado no fonte do tópico acima.JoséQuintas escreveu: e vai ter site que contém string pra tudo.
[]´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
Ajuda com Minigui + SQL SERVER 2012
Realmente.
Fui voltando mensagens, e a partir de alguma deixei de olhar o ano.
Fui voltando mensagens, e a partir de alguma deixei de olhar o ano.
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
Ajuda com Minigui + SQL SERVER 2012
Coisa esquisita.
O primeiro campo é incremental, chave primária, começa no 1 e vai em frente.
No browse mostra número até repetido, o que não existe na tabela.
Código: Selecionar todos
#include "inkey.ch"
PROCEDURE PTESADOBROW
LOCAL oBrowse, oColumn, nCont, nKey
LOCAL cnMySql := ADOClass():New( AppConexao() )
CLS
cnMySql:cSql := "SELECT * FROM JPANPAGE"
cnMySql:Execute()
oBrowse := TBrowseDb():New( 2, 2, MaxRow() - 2, MaxCol() - 2 )
oBrowse:HeadSep := Chr(196)
oBrowse:ColSep := Chr(179)
oBrowse:FrameColor := "3/1"
oBrowse:GoTopBlock := { || cnMySql:Rs:MoveFirst() }
oBrowse:GoBottomBlock := { || cnMySql:Rs:MoveLast() }
oBrowse:SkipBlock := { | n | ADOSkipper( cnMySql:Rs, n ) }
FOR nCont = 0 TO cnMySql:Rs:Fields():Count() - 1
oColumn := TBColumnNew( cnMySql:Rs:Fields( nCont ):Name(), RsBlock( cnMySql:Rs, nCont ) )
oColumn:Width := Max( Min( cnMySql:Rs:Fields( nCont ):DefinedSize, 50 ), Len( cnMySql:Rs:Fields( nCont ):Name() ) )
oBrowse:AddColumn( oColumn )
NEXT
DO WHILE .T.
oBrowse:RefreshCurrent()
nKey := 0
DO WHILE nKey == 0 .AND. ! oBrowse:Stable
oBrowse:Stabilize()
nKey := Inkey()
ENDDO
IF nKey == 0
oBrowse:RefreshCurrent()
DO WHILE ! oBrowse:Stabilize()
ENDDO
nKey := Inkey(0)
ENDIF
DO CASE
CASE nKey == K_UP; oBrowse:Up()
CASE nKey == K_DOWN; oBrowse:Down()
CASE nKey == K_PGUP; oBrowse:PageUp()
CASE nKey == K_PGDN; oBrowse:PageDown()
CASE nKey == K_HOME; oBrowse:GoTop()
CASE nKey == K_END; oBrowse:GoBottom()
CASE nKey == K_ESC; EXIT
ENDCASE
ENDDO
cnMySql:Close()
RETURN
FUNCTION RsBlock( Rs, nCont )
RETURN { || Rs:Fields( nCont ):Value }
FUNCTION ADOSkipper( Rs, nSkip )
LOCAL nRec := Rs:AbsolutePosition
IF ! Rs:Eof()
Rs:Move( nSkip )
IF Rs:Eof()
Rs:MoveLast()
ENDIF
IF Rs:Bof()
Rs:MoveFirst()
ENDIF
ENDIF
RETURN Rs:AbsolutePosition - nRec
No browse mostra número até repetido, o que não existe na tabela.
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
Ajuda com Minigui + SQL SERVER 2012
Assim mostrou direito.
Ao que parece, no primeiro fonte mostrou cortado, talvez definir tamanho maior.
Ao que parece, no primeiro fonte mostrou cortado, talvez definir tamanho maior.
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
Ajuda com Minigui + SQL SERVER 2012
Ao enviar minha resposta, entrou a sua primeiro, mas não se trata apenas disso, não é um problema só do tbrowse.hazael escreveu:Esse é o problema com tbrowse que define o tamanho de todos baseado no primeiro a menos que você defina isso manualmente mas daí tem que saber previamente, não funciona de modo automático
Pequena correção:JoséQuintas escreveu:Ao que parece, no primeiro fonte mostrou cortado, talvez definir tamanho maior.
Na prática, melhor definir Picture e/ou outra alternativa que deixe tamanho fixo e sem dúvida sobre qual vai ser o conteúdo mostrado.
Porque o modo automático não dá certo:
Se um campo numérico de 4 dígitos vém do DBF, ele continua com 4 dígitos, compatível com Clipper
Se um campo numérico vém de outro lugar... é tratado como 10 posições (não sei ao certo o tamanho).
Ao deixar a coluna com o tamanho definido na estrutura, 4 posições por exemplo, não cabe o número.
Nem se trata de pegar o tamanho correto, mas de diferença no tratamento de números por parte do Harbour/Clipper.
Esse mesmo problema ocorre com quem está acostumado a não definir tamanho pra números.
Por exemplo: index on Str( numero )
O resultado vai ser diferente, dependendo de onde veio esse número.
Então... não é um problema do ADO/SQL, é um comportamento esperado do Harbour.
Certo? errado?
Str( variável ) retornar tamanho diferente, conforme a origem do número, é errado?
Tá assim há mais de 30 anos e ninguém nunca reclamou, ou talvez nunca percebeu.
Sair do mundo xbase é interessante.... tem que trabalhar igual a qualquer programador de qualquer linguagem de programaçã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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Ajuda com Minigui + SQL SERVER 2012
No meu estilo, pra minha classe de ADO, mas como é parecida com o recordset, tá fácil ajustar pro ADO comum.
Ainda em desenvolvimento, é praticamente a rotina anterior com modificação.
O uso prático
A montagem genérica
A navegação tradicional
O posicionamento conforme digita - em fase de teste, inclusive NÃO genérico ainda.
E a movimentação, igual já postaram
Testei usar :Filter() e :Sort(), mas eles criam um segundo recordset.
O :Filter acaba sendo desvantagem, porque uma vez aplicado o filtro, não tem como retornar ao conteúdo anterior.
Ainda em desenvolvimento, é praticamente a rotina anterior com modificação.
O uso prático
A montagem genérica
A navegação tradicional
O posicionamento conforme digita - em fase de teste, inclusive NÃO genérico ainda.
E a movimentação, igual já postaram
Testei usar :Filter() e :Sort(), mas eles criam um segundo recordset.
O :Filter acaba sendo desvantagem, porque uma vez aplicado o filtro, não tem como retornar ao conteúdo anterior.
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
Ajuda com Minigui + SQL SERVER 2012
Só pra curiosidade:
Minha classe tem a variável com o recordset.
Em boa parte dos casos, trata-se apenas de repasse para o recordset, com validações extras.
Por exemplo, o Eof() acaba funcionando até mesmo se o recordset não tiver conteúdo "usável".
Acabo tendo as vantagens do ADO, mas eliminando algumas diferenças do que estamos acostumados.
Minha classe tem a variável com o recordset.
Em boa parte dos casos, trata-se apenas de repasse para o recordset, com validações extras.
Por exemplo, o Eof() acaba funcionando até mesmo se o recordset não tiver conteúdo "usável".
Acabo tendo as vantagens do ADO, mas eliminando algumas diferenças do que estamos acostumados.
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
Ajuda com Minigui + SQL SERVER 2012
O manual que olhei na primeira vez ensinava errado.JoséQuintas escreveu:Testei usar :Filter() e :Sort(), mas eles criam um segundo recordset.
O :Filter acaba sendo desvantagem, porque uma vez aplicado o filtro, não tem como retornar ao conteúdo anterior.
O filter está funcionando muito bem.
Isso e mais o ADS Local grátis.... talvez seja interessante até pra quem usa DBF !!!!
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
Ajuda com Minigui + SQL SERVER 2012
Aplicando filtro PET
Só que agora preso a minha classe de ADO, classe de janelas, GTWVG, etc.
Só que agora preso a minha classe de ADO, classe de janelas, GTWVG, etc.
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
Ajuda com Minigui + SQL SERVER 2012
Alexandre Santos
Agradeço muito o fonte que postou no ano passado.
Junto com minha classe, são o par perfeito !!!
DBF agora... acho que nem pra arquivo temporário....
Agradeço muito o fonte que postou no ano passado.
Junto com minha classe, são o par perfeito !!!
DBF agora... acho que nem pra arquivo temporário....
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/
