Exemplos de sistemas xBase com MySql remoto - Integração WEB
Moderador: Moderadores
-
Stanis Luksys
- Colaborador

- Mensagens: 1329
- Registrado em: 18 Jun 2005 03:04
- Localização: São Paulo
- Contato:
Deletei os dados que postei aqui para evitar problemas...
Editado pela última vez por Stanis Luksys em 12 Nov 2006 03:02, em um total de 1 vez.
Stanis Luksys
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Amiguinhos
Na primeira fase de testes eu consegui os seguintes resultados.
Ferramentas utilizadas:
Fivewin for Harbour 2.7
Recursos do servidor na internet:
MySQL 4
ODBC 3.51
TCP-IP
Recursos do aplicativo para acesso:
OLE Automation
ADO OLEDB Engine
Possibilidades com estes recursos:
Remoto - acesso a bases de dados externas utilizando sintaxe bem simples com os recursos do proprio ADO.
Local - acesso a bases de dados diversas, sendo ODBC, OLE ou JET como Access, MySQL, XML permitindo ler, gravar e browsear.
Qual o intuito deste teste?
Avaliar a possibilidade de agregar ao sistema a facilidade de manipulação destes tipos de arquivo usando uma interface unica.
Refinamentos:
Os testes foram criados usando o básico de trabalho com tabelas, como incluir, alterar e excluir.
O aplicativo contém bugs, pois é algo insipido mas sendotrabalhado.
A documentação que estou usando é relacionada ao ADO com MySQL oriundo de informações sobre Visual Basic.
Com estes testes vi que é possivel abrir, manipular, gravar arquivos XML.
Com arquivos Access consigo também excluir.
Com arquivos MySQL ainda faltam alguns ajustes em relação a ponteiros.
Isto tudo no meu caso já é um grande avanço pis poderei integrar aos meus sistemas informações as quais tinha de usar programas externos.
No caso de voce será mais uma etapa no conhecimento de possibilidades antes inimaginadas com o xBase.
Codigo do arquivo Header ADODB.CH:
Codigo do programa teste ADOMYSQL.PRG:
Vejam que esta não é uma ferramenta profissional, ela é parte de um estudo para auxilio de desenvolvimento.
Para baixar o arquivo contendo o material:
DownloadLink: adomysql.zip
File-Size: 0,49 Mb
Uploaded: 10/11/2006, 05:04:35
Na primeira fase de testes eu consegui os seguintes resultados.
Ferramentas utilizadas:
Fivewin for Harbour 2.7
Recursos do servidor na internet:
MySQL 4
ODBC 3.51
TCP-IP
Recursos do aplicativo para acesso:
OLE Automation
ADO OLEDB Engine
Possibilidades com estes recursos:
Remoto - acesso a bases de dados externas utilizando sintaxe bem simples com os recursos do proprio ADO.
Local - acesso a bases de dados diversas, sendo ODBC, OLE ou JET como Access, MySQL, XML permitindo ler, gravar e browsear.
Qual o intuito deste teste?
Avaliar a possibilidade de agregar ao sistema a facilidade de manipulação destes tipos de arquivo usando uma interface unica.
Refinamentos:
Os testes foram criados usando o básico de trabalho com tabelas, como incluir, alterar e excluir.
O aplicativo contém bugs, pois é algo insipido mas sendotrabalhado.
A documentação que estou usando é relacionada ao ADO com MySQL oriundo de informações sobre Visual Basic.
Com estes testes vi que é possivel abrir, manipular, gravar arquivos XML.
Com arquivos Access consigo também excluir.
Com arquivos MySQL ainda faltam alguns ajustes em relação a ponteiros.
Isto tudo no meu caso já é um grande avanço pis poderei integrar aos meus sistemas informações as quais tinha de usar programas externos.
No caso de voce será mais uma etapa no conhecimento de possibilidades antes inimaginadas com o xBase.
Codigo do arquivo Header ADODB.CH:
Código: Selecionar todos
#command ADO APPEND BLANK => oRs:AddNew()
#command ADO EDIT => oRs:Edit()
#command ADO COMMIT => oRs:Update()
#command ADO SKIP => oRs:Move( oRs:AbsolutePosition )
#command ADO REGLOCK => dbNetRegLock( 0 ) ; dbCommitLog('M', PROCNAME())
#command ADO DELETE => oRs:Delete()
#command ADO REPLACE <f1> WITH <v1> => oRs:Fields( <(f1)> ):Value := <v1>
#command ADO GOTOP => oRs:MoveFirst()
#command ADO GOBOTTOM => oRs:MoveLast()
#command ADORECNO() => oRs:AbsolutePosition
#command ADORECCO() => oRs:RecordCount
#command ADOFILE(<tB>) => iif(oRs:Table(<tB>)==<tB>,.t.,.f.)
#command ADO USE => oRs:Close()
#command ADO CLOSE => oRs:Close()
#command ADO SAVE <CfILE> => oRs:Save( <CfILE>, adPersistXML )
#command ADO EXECUTE <Sql> => oRs:Open( <Sql>, StrConnection, 1, 3 )
#command ADO CONNECT ON <StrServer> ;
[PORT <StrPort>] ;
[DATABASE <StrDatabase>] ;
[USER <StrUserID>] ;
[PASSWORD <StrUserPWD>] ;
[OPTIONS <nFlags>] ;
DRIVER <StrDriver> => ;
StrConnection := "driver={"+<StrDriver>+"};database="+<StrDatabase>+";server="+<StrServer>+";uid="+<StrUserID>+";pwd="+<StrUserPWD>+";option=35" ;
; oRs := TOleAuto():New( "ADODB.Recordset" ) ;
; oRS:CursorType := adOpenStatic ;
; oRS:CursorLocation := adUseClient ;
; oRS:LockType := adLockPessimistic
/*---- CursorTypeEnum Values ----*/
#define adOpenForwardOnly 0
#define adOpenKeyset 1
#define adOpenDynamic 2
#define adOpenStatic 3
/*---- LockTypeEnum Values ----*/
#define adLockReadOnly 1
#define adLockPessimistic 2
#define adLockOptimistic 3
#define adLockBatchOptimistic 4
/*---- CursorLocationEnum Values ----*/
#define adUseServer 2
#define adUseClient 3
/*---- DataTypeEnum Values ----*/
#define adEmpty 0
#define adTinyInt 16
#define adSmallInt 2
#define adInteger 3
#define adBigInt 20
#define adUnsignedTinyInt 17
#define adUnsignedSmallInt 18
#define adUnsignedInt 19
#define adUnsignedBigInt 21
#define adSingle 4
#define adDouble 5
#define adCurrency 6
#define adDecimal 14
#define adNumeric 131
#define adBoolean 11
#define adError 10
#define adUserDefined 132
#define adVariant 12
#define adIDispatch 9
#define adIUnknown 13
#define adGUID 72
#define adDate 7
#define adDBDate 133
#define adDBTime 134
#define adDBTimeStamp 135
#define adBSTR 8
#define adChar 129
#define adVarChar 200
#define adLongVarChar 201
#define adWChar 130
#define adVarWChar 202
#define adLongVarWChar 203
#define adBinary 128
#define adVarBinary 204
#define adLongVarBinary 205
#define adChapter 136
#define adFileTime 64
#define adPropVariant 138
#define adVarNumeric 139
#define adArray &H2000
/*---- GetRowsOptionEnum Values ----*/
#define adGetRowsRest -1
/*---- PositionEnum Values ----*/
#define adPosUnknown -1
#define adPosBOF -2
#define adPosEOF -3
/*---- BookmarkEnum Values ----*/
#define adBookmarkCurrent 0
#define adBookmarkFirst 1
#define adBookmarkLast 2
/*---- MarshalOptionsEnum Values ----*/
#define adMarshalAll 0
#define adMarshalModifiedOnly 1
/*---- AffectEnum Values ----*/
#define adAffectCurrent 1
#define adAffectGroup 2
#define adAffectAllChapters 4
/*---- ResyncEnum Values ----*/
#define adResyncUnderlyingValues 1
#define adResyncAllValues 2
/*---- CompareEnum Values ----*/
#define adCompareLessThan 0
#define adCompareEqual 1
#define adCompareGreaterThan 2
#define adCompareNotEqual 3
#define adCompareNotComparable 4
/*---- FilterGroupEnum Values ----*/
#define adFilterNone 0
#define adFilterPendingRecords 1
#define adFilterAffectedRecords 2
#define adFilterFetchedRecords 3
#define adFilterConflictingRecords 5
/*---- SearchDirectionEnum Values ----*/
#define adSearchForward 1
#define adSearchBackward -1
/*---- PersistFormatEnum Values ----*/
#define adPersistADTG 0
#define adPersistXML 1
/*---- StringFormatEnum Values ----*/
#define adClipString 2
/*---- ConnectPromptEnum Values ----*/
#define adPromptAlways 1
#define adPromptComplete 2
#define adPromptCompleteRequired 3
#define adPromptNever 4
/*---- ConnectModeEnum Values ----*/
#define adModeUnknown 0
#define adModeRead 1
#define adModeWrite 2
#define adModeReadWrite 3
#define adModeShareDenyRead 4
#define adModeShareDenyWrite 8
/*---- EventReasonEnum Values ----*/
#define adRsnAddNew 1
#define adRsnDelete 2
#define adRsnUpdate 3
#define adRsnUndoUpdate 4
#define adRsnUndoAddNew 5
#define adRsnUndoDelete 6
#define adRsnRequery 7
#define adRsnResynch 8
#define adRsnClose 9
#define adRsnMove 10
#define adRsnFirstChange 11
#define adRsnMoveFirst 12
#define adRsnMoveNext 13
#define adRsnMovePrevious 14
#define adRsnMoveLast 15
/*---- SchemaEnum Values ----*/
#define adSchemaProviderSpecific -1
#define adSchemaAsserts 0
#define adSchemaCatalogs 1
#define adSchemaCharacterSets 2
#define adSchemaCollations 3
#define adSchemaColumns 4
#define adSchemaCheckConstraints 5
#define adSchemaConstraintColumnUsage 6
#define adSchemaConstraintTableUsage 7
#define adSchemaKeyColumnUsage 8
#define adSchemaReferentialConstraints 9
#define adSchemaTableConstraints 10
#define adSchemaColumnsDomainUsage 11
#define adSchemaIndexes 12
#define adSchemaColumnPrivileges 13
#define adSchemaTablePrivileges 14
#define adSchemaUsagePrivileges 15
#define adSchemaProcedures 16
#define adSchemaSchemata 17
#define adSchemaSQLLanguages 18
#define adSchemaStatistics 19
#define adSchemaTables 20
#define adSchemaTranslations 21
#define adSchemaProviderTypes 22
#define adSchemaViews 23
#define adSchemaViewColumnUsage 24
#define adSchemaViewTableUsage 25
#define adSchemaProcedureParameters 26
#define adSchemaForeignKeys 27
#define adSchemaPrimaryKeys 28
#define adSchemaProcedureColumns 29
#define adSchemaDBInfoKeywords 30
#define adSchemaDBInfoLiterals 31
#define adSchemaCubes 32
#define adSchemaDimensions 33
#define adSchemaHierarchies 34
#define adSchemaLevels 35
#define adSchemaMeasures 36
#define adSchemaProperties 37
#define adSchemaMembers 38
#define adSchemaTrustees 39
/*---- FieldStatusEnum Values ----*/
#define adFieldOK 0
#define adFieldCantConvertValue 2
#define adFieldIsNull 3
#define adFieldTruncated 4
#define adFieldSignMismatch 5
#define adFieldDataOverflow 6
#define adFieldCantCreate 7
#define adFieldUnavailable 8
#define adFieldPermissionDenied 9
#define adFieldIntegrityViolation 10
#define adFieldSchemaViolation 11
#define adFieldBadStatus 12
#define adFieldDefault 13
#define adFieldIgnore 15
#define adFieldDoesNotExist 16
#define adFieldInvalidURL 17
#define adFieldResourceLocked 18
#define adFieldResourceExists 19
#define adFieldCannotComplete 20
#define adFieldVolumeNotFound 21
#define adFieldOutOfSpace 22
#define adFieldCannotDeleteSource 23
#define adFieldReadOnly 24
#define adFieldResourceOutOfScope 25
#define adFieldAlreadyExists 26
#define adFieldPendingInsert &H10000
#define adFieldPendingDelete &H20000
#define adFieldPendingChange &H40000
#define adFieldPendingUnknown &H80000
#define adFieldPendingUnknownDelete &H100000
/*---- SeekEnum Values ----*/
#define adSeekFirstEQ &H1
#define adSeekLastEQ &H2
#define adSeekAfterEQ &H4
#define adSeekAfter &H8
#define adSeekBeforeEQ &H10
#define adSeekBefore &H20
/*---- ADCPROP_UPDATECRITERIA_ENUM Values ----*/
#define adCriteriaKey 0
#define adCriteriaAllCols 1
#define adCriteriaUpdCols 2
#define adCriteriaTimeStamp 3
/*---- ADCPROP_ASYNCTHREADPRIORITY_ENUM Values ----*/
#define adPriorityLowest 1
#define adPriorityBelowNormal 2
#define adPriorityNormal 3
#define adPriorityAboveNormal 4
#define adPriorityHighest 5
/*---- ADCPROP_AUTORECALC_ENUM Values ----*/
#define adRecalcUpFront 0
#define adRecalcAlways 1
/*---- ADCPROP_UPDATERESYNC_ENUM Values ----*/
/*---- ADCPROP_UPDATERESYNC_ENUM Values ----*/
/*---- MoveRecordOptionsEnum Values ----*/
#define adMoveUnspecified -1
#define adMoveOverWrite 1
#define adMoveDontUpdateLinks 2
#define adMoveAllowEmulation 4
/*---- CopyRecordOptionsEnum Values ----*/
#define adCopyUnspecified -1
#define adCopyOverWrite 1
#define adCopyAllowEmulation 4
#define adCopyNonRecursive 2
/*---- StreamTypeEnum Values ----*/
#define adTypeBinary 1
#define adTypeText 2
/*---- LineSeparatorEnum Values ----*/
#define adLF 10
#define adCR 13
#define adCRLF -1
/*---- StreamOpenOptionsEnum Values ----*/
#define adOpenStreamUnspecified -1
#define adOpenStreamAsync 1
#define adOpenStreamFromRecord 4
/*---- StreamWriteEnum Values ----*/
#define adWriteChar 0
#define adWriteLine 1
/*---- SaveOptionsEnum Values ----*/
#define adSaveCreateNotExist 1
#define adSaveCreateOverWrite 2
/*---- FieldEnum Values ----*/
#define adDefaultStream -1
#define adRecordURL -2
/*---- StreamReadEnum Values ----*/
#define adReadAll -1
#define adReadLine -2
/*---- RecordTypeEnum Values ----*/
#define adSimpleRecord 0
#define adCollectionRecord 1
#define adStructDoc 2
Código: Selecionar todos
/*
*
* Mais informacoes sobre ADO em
* http://www.microsoft.com/brasil/technet/Colunas/scriptcenter/resources/officetips/nov05/tips1103.mspx
*
*/
#include "Fivewin.ch"
#include "adodb.ch"
FUNCTION MAIN()
PUBLIC oRs // Mal necessario
StrDatabase := [adomysql]
StrServer := [mysql4.shoppmarketing.com]
StrPort := 3306
StrUserID := [adomysql_user]
StrUserPWD := [adomysql_pass]
StrDriver := "MySQL ODBC 3.51 Driver"
StrTable := [clientes]
StrField := [nome]
StrField2 := [email]
StrWhere := StrField+[="034"]
StrSqlCommand := [SELECT * FROM ] + StrTable // + [ WHERE ] + StrWhere
MsgRun( "Conectando..." )
ADO CONNECT ON StrServer ;
PORT StrPort ;
DATABASE StrDatabase ;
USER StrUserID ;
PASSWORD StrUserPWD ;
OPTIONS 35 ;
DRIVER StrDriver
MsgRun( "Executando..." )
ADO EXECUTE StrSqlCommand
//ADO GOTOP
//WBrowseRecordSet( oRs, StrField2 )
Browse( oRs )
ADO CLOSE
RETURN NIL
function WBrowseRecordSet( oRs, cStrField )
LOCAL oDlg, oBrw, nRec
DEFINE DIALOG oDlg SIZE 300, 300
@ 0, 0 LISTBOX oBrw FIELDS oRs:Fields( "nome" ):Value ;
HEADERS "Nome do Cliente" ;
FIELDSIZES 300 ;
ON RIGHT CLICK ( nRec := oRs:AbsolutePosition,;
oBrw:Report( "TWBrowse report", .T. ),;
oRs:MoveFirst(),;
oRs:Move( nRec - 1 ) )
oBrw:bLDblClick:= { |nRow,nCol| MsgStop( oRs:Fields( "email" ):Value ) }
oBrw:nHeaderStyle := 2
oBrw:nHeaderHeight := 20
oBrw:nLineHeight := 15
oBrw:bLogicLen := { || oRs:RecordCount }
oBrw:bGoTop := { || oRs:MoveFirst() }
oBrw:bGoBottom := { || oRs:MoveLast() }
oBrw:bSkip := { | nSkip | ADOSkipper( oRs, nSkip ) }
oBrw:cAlias := "ARRAY"
ACTIVATE DIALOG oDlg;
ON INIT oDlg:SetControl( oBrw );
CENTER
RETURN NIL
function browse(oRs, bPrc, bAdc, bAlt, bExc, bImp, bSai)
LOCAL oDlg, oBrw, nRec
LOCAL aData := {}
LOCAL nFor
LOCAL oLbx, cItem
LOCAL btnPrc, btnAdc, btnAlt, btnExc, btnImp, btnsai
DEFAULT bPrc := { || RecPrc( oLbx ) },;
bAdc := { || RecInc( oLbx ) },;
bAlt := { || RecAlt( oLbx ) },;
bExc := { || RecExc( oLbx ) },;
bImp := { || RecImp( oLbx ) },;
bSai := { || oDlg2:End() }
DEFINE DIALOG oDlg2 From 0,0 To 800,1020 Pixel TITLE " ListBox da Tabela "
@ 05,15 listbox oBrw Fields oRs:Fields( "nome" ):Value, oRs:Fields( "email" ):Value;
headers "Nome","email";
fieldsizes 250,100 ;
pixel size 400,300 of odlg2
//oBrw:bLDblClick:= { |nRow,nCol| MsgStop( oRs:Fields( "apelido" ):Value ) }
oBrw:nHeaderStyle := 2
oBrw:nHeaderHeight := 20
oBrw:nLineHeight := 15
oBrw:bLogicLen := { || oRs:RecordCount }
oBrw:bGoTop := { || oRs:MoveFirst() }
oBrw:bGoBottom := { || oRs:MoveLast() }
oBrw:bSkip := { | nSkip | ADOSkipper( oRs, nSkip ) }
oBrw:cAlias := "ARRAY"
@ 18.7 , 05 button btnprc prompt "&Procurar" of oDlg2 size 40,12 Action RecPrc(oBrw)
@ 18.7 , 15 button btnadc prompt "&Adicionar" of oDlg2 size 40,12 Action RecInc(oBrw)
@ 18.7 , 25 button btnalt prompt "A<erar" of oDlg2 size 40,12 Action RecAlt(oBrw)
@ 18.7 , 35 button btnexc prompt "&Excluir" of oDlg2 size 40,12 Action RecExc(oBrw)
@ 18.7 , 45 button btnimp prompt "&Imprimir" of oDlg2 size 40,12
@ 18.7 , 55 button btnsai prompt "&Sair" of oDlg2 size 40,12 Action oDlg2:End()
ACTIVATE DIALOG oDlg2 //;
//ON INIT oDlg2:SetControl( oBrw );
//CENTER
RETURN NIL
function ADOSkipper( oRs, nSkip )
LOCAL nRec := oRs:AbsolutePosition
oRs:Move( nSkip )
IF oRs:EOF; oRs:MoveLast(); ENDIF
IF oRs:BOF; oRs:MoveFirst(); ENDIF
RETURN oRs:AbsolutePosition - nRec
//-----------------------------------------------------------
static function RecPrc(oLbx)
Local odlg1
Local cCodigo:=0
Local cSair:=" "
Local sql
DEFINE DIALOG oDlg1 From 0,0 To 160,250 PIXEL;
TITLE " Procura na Tabela em Access "
DEFINE FONT oFont NAME "FIXEDSYS" SIZE 10, -10 && Use a Nonproportional font
SET FONT OF oDlg1 TO oFont && so characters line up in Says
@ 02,05 say "Codigo : " OF oDlg1
@ 02.2,10 get cCodigo OF oDlg1 picture "9999" size 20,10
@ 02.7 , 10 button "Procurar" of oDlg1 size 40,12 action (cSair:="*",oDlg1:End())
ACTIVATE DIALOG oDlg1 centered
if cSair="*"
//locate for (odbf:cAlias)->field_0001 = cCodigo
criterio = "idpessoa Like '" + cCodigo + "%'"
//oRs:MoveFirst()
//oRs:Find criterio, 0, adSearchFoward
if eof()
msgAlert("NÆo encontrado !!!")
go top
endif
oLbx:Refresh()
endif
return nil
//-----------------------------------------------------------
static function RecInc(oLbx)
LOCAL odlg3
LOCAL cNome := space(40)
LOCAL cTelefone := space(14)
LOCAL cEmail := space(45)
LOCAL cSair := " "
DEFINE DIALOG oDlg3 From 0,0 To 230,500 PIXEL TITLE " Inclusao na Tabela em Access "
DEFINE FONT oFont NAME "FIXEDSYS" SIZE 10, -10 && Use a Nonproportional font
SET FONT OF oDlg3 TO oFont && so characters line up in Says
@ 02,05 say "Nome_____: " OF oDlg3
@ 04,05 say "Email____: " OF oDlg3
//
@ 02.2,10 get cNome OF oDlg3 picture "@!" size 150,10
@ 04.4,10 get cEmail OF oDlg3 picture "@!" size 150,10
//
@ 04.7 , 15 button "Salvar" of oDlg3 size 40,12 action (cSair:="*",oDlg3:End())
ACTIVATE DIALOG oDlg3 centered
if cSair="*"
ADO APPEND BLANK
ADO REPLACE nome WITH cNome
ADO REPLACE email WITH cEmail
ADO COMMIT
oLbx:Refresh()
endif
return nil
//-----------------------------------------------------------
static function RecExc(oLbx)
if MsgYesNo( "Excluir este Registro ?", "Por Favor, confirme" )
ADO DELETE
ADO SKIP
oLbx:Refresh()
endif
return nil
//-----------------------------------------------------------
static function RecAlt(oLbx)
LOCAL odlg3
LOCAL cNome := oRs:Fields( "nome" ):Value
LOCAL cEmail := oRs:Fields( "email" ):Value
LOCAL cSair := " "
DEFINE DIALOG oDlg3 From 0,0 To 230,500 PIXEL TITLE " Inclusao na Tabela em Access "
DEFINE FONT oFont NAME "FIXEDSYS" SIZE 10, -10 && Use a Nonproportional font
SET FONT OF oDlg3 TO oFont && so characters line up in Says
//
@ 02,05 say "Nome_____: " OF oDlg3
@ 04,05 say "Email____: " OF oDlg3
//
@ 02.2,10 get cNome OF oDlg3 picture "@!" size 150,10
@ 04.4,10 get cEmail OF oDlg3 picture "@!" size 150,10
//
@ 04.7 , 15 button "Salvar" of oDlg3 size 40,12 action (cSair:="*",oDlg3:End())
ACTIVATE DIALOG oDlg3 centered
if cSair="*"
ADO APPEND BLANK
ADO REPLACE nome WITH cNome
ADO REPLACE email WITH cEmail
ADO COMMIT
oLbx:Refresh()
endif
return nil
//-----------------------------------------------------------
static function RecImp( oLbx )
/*
local oRpt
local n
local cAlias := If( oLbx != nil, oLbx:cAlias, Alias() )
REPORT oRpt TITLE "Report: " + cAlias ;
HEADER "Date: " + DToC( Date() ) + ", Time: " + Time() ;
FOOTER "Page: " + Str( oRpt:nPage, 3 ) ;
PREVIEW
if Empty( oRpt ) .or. oRpt:oDevice:hDC == 0
return nil
endif
for n = 1 to FCount()
oRpt:AddColumn( TrColumn():New( { FInfo1( cAlias, n ) },,;
{ FInfo2( cAlias, n ) },,,,,,,,,, oRpt ) )
next
ENDREPORT
ACTIVATE REPORT oRpt
GO TOP
*/
return nil
//--------------------------------------------
static function FInfo1( cAlias, n )
return { || ( cAlias )->( FieldName( n ) ) }
//-----------------------------------------------------------
static function FInfo2( cAlias, n )
return { || ( cAlias )->( FieldGet( n ) ) }
Function DbfDbt()
Return Nil
Para baixar o arquivo contendo o material:
DownloadLink: adomysql.zip
File-Size: 0,49 Mb
Uploaded: 10/11/2006, 05:04:35
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
-
Stanis Luksys
- Colaborador

- Mensagens: 1329
- Registrado em: 18 Jun 2005 03:04
- Localização: São Paulo
- Contato:
Opaaa,
Gostei muito hein!
Isso vem a demonstrar e acrescentar o valor do xBase nos dias de hoje. Como podemos ver, apenas neste tópico já temos três maneiras diferentes de acessar MySQL remoto!!
Muito legal mesmo, quanto mais opções mais claro fica pra quem precisa passar por este desafio, quais os métodos/ferramentas escolher.
Sugiro que que se mais alguém, como por exemplo o colega náufel, já tenha passado por isso, demonstrasse num exemplo de poucas linhas como foi possível.
A comunidade inteira pode se beneficiar disso. Se MySQL já é bom comparado com DBF, com integração WEB então, é show de bola!!!!!
Valeu Rochinha e todo mundo!
:{
Gostei muito hein!
Isso vem a demonstrar e acrescentar o valor do xBase nos dias de hoje. Como podemos ver, apenas neste tópico já temos três maneiras diferentes de acessar MySQL remoto!!
Muito legal mesmo, quanto mais opções mais claro fica pra quem precisa passar por este desafio, quais os métodos/ferramentas escolher.
Sugiro que que se mais alguém, como por exemplo o colega náufel, já tenha passado por isso, demonstrasse num exemplo de poucas linhas como foi possível.
A comunidade inteira pode se beneficiar disso. Se MySQL já é bom comparado com DBF, com integração WEB então, é show de bola!!!!!
Valeu Rochinha e todo mundo!
:{
Stanis Luksys
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Amiguinhos
Fiz uma correção no teste remoto em relação a um erro que ocorria.
Quando se usa recordset em ADO e voce tenta armazenar um dado de tamanho maior que o tamanho do campo ele retorna o erro:
"...Operação de várias etapas gerou erros. Verifique cada valor de status..."
Portanto se forem usar o meu método para trabalho com MySQL ou Access criem a estrutura, verifiquem-na antes de fazer inclusões ou alterações e procedam com ALLTRIM() nos REPLACEs.
As mensagens de erro relacionados a isto podem ser visualizadas em
Guia da solução de problemas para as mensagens de erro 80004005 no Active Server Pages e no Microsoft Data Access Components
Outra coisa:
Pelo fato de estar usando OLE Automation isto não implica a obrigatoriedade de se usar Fivewin ou Harbour, desde que exista suporte das GUIs existentes a este recurso.
Com Fivewin para Clipper usa-se o CreateOLEObject(), no Harbour podemos encontrar o TAutoOLE().
Façam o update:
ADOMySQL.ZIP
Fiz uma correção no teste remoto em relação a um erro que ocorria.
Quando se usa recordset em ADO e voce tenta armazenar um dado de tamanho maior que o tamanho do campo ele retorna o erro:
"...Operação de várias etapas gerou erros. Verifique cada valor de status..."
Portanto se forem usar o meu método para trabalho com MySQL ou Access criem a estrutura, verifiquem-na antes de fazer inclusões ou alterações e procedam com ALLTRIM() nos REPLACEs.
As mensagens de erro relacionados a isto podem ser visualizadas em
Guia da solução de problemas para as mensagens de erro 80004005 no Active Server Pages e no Microsoft Data Access Components
Outra coisa:
Pelo fato de estar usando OLE Automation isto não implica a obrigatoriedade de se usar Fivewin ou Harbour, desde que exista suporte das GUIs existentes a este recurso.
Com Fivewin para Clipper usa-se o CreateOLEObject(), no Harbour podemos encontrar o TAutoOLE().
Façam o update:
ADOMySQL.ZIP
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.