Tutorial de ADO
Moderador: Moderadores
Tutorial de ADO
Quintas,
Perguntas, subindo dados de um dbf para o mysql, e nesse dbf tem datas vazias ' / / ' como você trataria a carga nestes casos?
Perguntas, subindo dados de um dbf para o mysql, e nesse dbf tem datas vazias ' / / ' como você trataria a carga nestes casos?
►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)
Tutorial de ADO
Quintas,
Como não vejo uma solução, vou usar a forma tradicional, lembrando que com oracle funciona createparameter/bind
Como não vejo uma solução, vou usar a forma tradicional, lembrando que com oracle funciona createparameter/bind
Código: Selecionar todos
FOR EACH oElemento2 IN aTheDBF
lLast := oElemento2:__enumIsLast()
cNomeCampo:=Upper(oElemento2[1])
cTheValue := &( oElemento2[1] )
DO CASE
CASE oElemento2[2] = "N"
cQuery += Str(cTheValue)+IF(!lLast, ", ", "")
CASE oElemento2[2] = "D"
IF Empty(cTheValue)
cQuery +='null'+IF(!lLast, ", ", "")
ELSE
cQuery +="'"+Transform( Dtos( cTheValue ), "@R 9999-99-99" )+"'"+IF(!lLast, ", ", "")
ENDIF
CASE oElemento2[2] = "L"
cTheValue:="'"+IF(cTheValue, "T", "F")+"'"
cQuery +=cTheValue+IF(!lLast, ", ", "")
CASE oElemento2[2] = "C"
cTheValue:="'"+cTheValue+"'"
cQuery += cTheValue+IF(!lLast, ", ", "")
CASE oElemento2[2] = "M"
cTheValue:=Memoread( oElemento2[1] )
//cTheValue:="'"+cTheValue+"'"
cQuery += cTheValue+IF(!lLast, ", ", "")
ENDCASE
NEXT
►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
Tutorial de ADO
Já postei isso: NULL
Segue o que uso.
Simplificando: ValueSql(), ou uma função apropriada pra cada tipo.
E tenho funções equivalentes para fazer o processo contrário.
Segue o que uso.
Simplificando: ValueSql(), ou uma função apropriada pra cada tipo.
Código: Selecionar todos
cSql := "INSERT INTO ARQUIVO ( CODIGO, NOME, ENDERECO ) VALUES ( " + ValueSql( mcodigo ) + ", " + ValueSql( mnome ) + ", " + ValueSql( mendereco ) + ")"
cnMySql:Execute( cSql )
Código: Selecionar todos
FUNCTION StringSql( cString )
cString := Trim( cString )
cString := StrTran( cString, [\], [\\] )
cString := StrTran( cString, ['], [\'] )
cString := StrTran( cString, Chr(13), "\" + Chr(13) )
cString := StrTran( cString, Chr(10), "\" + Chr(10) )
cString := ['] + cString + [']
RETURN cString
FUNCTION DateSql( dDate )
LOCAL cString
cString := StrZero( Year( dDate ), 4 ) + "-" + StrZero( Month( dDate ), 2 ) + "-" + StrZero( Day( dDate ), 2 )
IF cString == "0000-00-00"
cString := "NULL"
ELSE
cString := StringSql( cString )
ENDIF
RETURN cString
FUNCTION NumberSql( xValue )
xValue := Ltrim( Str( xValue ) )
IF "." $ xValue
DO WHILE Right( xValue, 1 ) == "0"
xValue := Substr( xValue, 1, Len( xValue ) - 1 )
ENDDO
IF Right( xValue, 1 ) == "."
xValue := Substr( xValue, 1, Len( xValue ) - 1 )
ENDIF
ENDIF
RETURN xValue
FUNCTION ValueSql( xValue )
LOCAL cString
DO CASE
CASE ValType( xValue ) == "N"
cString := NumberSql( xValue )
CASE ValType( xValue ) == "D"
cString := DateSql( xValue )
OTHERWISE
cString := StringSql( xValue )
ENDCASE
RETURN cString
E tenho funções equivalentes para fazer o processo contrá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/
Tutorial de ADO
Quintas,
São tantos posts, desculpe-me, eu até fiz isso na minha rotina, depois que percebi.
São tantos posts, desculpe-me, eu até fiz isso na minha rotina, depois que percebi.
►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
Tutorial de ADO
Na sua função, isto está certo?
Não é campo do dbf?
Código: Selecionar todos
CASE oElemento2[2] = "M"
cTheValue:=Memoread( oElemento2[1] )
//cTheValue:="'"+cTheValue+"'"
cQuery += cTheValue+IF(!lLast, ", ", "")
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
Tutorial de ADO
Uma funçãozinha que criei que pode ser útil:
Código: Selecionar todos
USE CLIENTES
DO WHILE .NOT. Eof()
CopyRecordToMySql( "CLIENTES", clientes->Codigo )
SKIP
ENDDO
CLOSE DATABASES
FUNCTION CopyRecordToMySql( cDatabase, cChaveAcesso )
LOCAL nCont, xValue, lInsert := .T., oRs, cSql
IF cChaveAcesso != NIL
cSql := "SELECT COUNT(*) AS QTD FROM " + cDatabase + " WHERE " + cChaveAcesso
oRs := AppcnMySqlLocal():Execute( cSql )
IF oRs:Fields( "QTD" ):Value > 0
lInsert := .F.
ENDIF
oRs:Close()
ENDIF
IF lInsert
cSql := "INSERT INTO " + cDatabase + " ( "
FOR nCont = 1 TO FCount()
cSql += FieldName( nCont ) + iif( nCont == FCount(), "", ", " )
NEXT
cSql += ") VALUES ( "
ELSE
cSql := "UPDATE " + cDatabase + " SET "
ENDIF
FOR nCont = 1 TO FCount()
xValue := FieldGet( nCont )
IF ValType( xValue ) $ "NDC"
IF ValType( xValue ) == "C"
xValue := LimpaErro( xValue )
ENDIF
IF lInsert
cSql += ValueSql( xValue )
ELSE
cSql += FieldName( nCont ) + "=" + ValueSql( xValue )
ENDIF
ELSE
MsgExclamation( "Tipo desconhecido pra conversão " + ValType( xValue ) )
QUIT
ENDIF
cSql += iif( nCont == FCount(), "", ", " )
NEXT
IF lInsert
cSql += ")"
ELSE
cSql += "WHERE " + cChaveAcesso
ENDIF
AppcnMySqlLocal():Execute( cSql )
RETURN NIL
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
Tutorial de ADO
A função LimpaErro() foi a forma que encontrei pra eliminar caracteres inválidos que causavam, ou pareciam causar, erro.
Até Chr(0) apareceu no meio dos dbfs....rs
Até Chr(0) apareceu no meio dos dbfs....rs
Código: Selecionar todos
STATIC FUNCTION LimpaErro( xValue )
xValue := StrTran( xValue, Chr(91), " " )
xValue := StrTran( xValue, Chr(93), " " )
xValue := StrTran( xValue, Chr(167), " " )
xValue := StrTran( xValue, Chr(128), "C" )
xValue := StrTran( xValue, Chr(135), "C" )
xValue := StrTran( xValue, Chr(166), "A" )
xValue := StrTran( xValue, Chr(198), "A" )
xValue := StrTran( xValue, Chr(0), "" )
xValue := StrTran( xValue, Chr(95), "-" )
xValue := StrTran( xValue, Chr(229), "O" )
xValue := StrTran( xValue, Chr(124), " " )
xValue := StrTran( xValue, Chr(141), " " )
xValue := StrTran( xValue, Chr(181), " " )
xValue := StrTran( xValue, Chr(162), " " )
xValue := StrTran( xValue, Chr(224), " " )
xValue := StrTran( xValue, Chr(133), " " )
xValue := StrTran( xValue, Chr(144), "E" )
xValue := StrTran( xValue, Chr(160), " " )
RETURN xValue
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/
Tutorial de ADO
Quintas,
Na verdade eu aboli o campo memo do dbf, isso nem deveria estar no código.
Na verdade eu aboli o campo memo do dbf, isso nem deveria estar no código.
►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)
Tutorial de ADO
Quintas,
Só para atualizar, já estou usando o novo driver odbc 5.3
cConexao := "DRIVER={MySQL ODBC 5.3 Unicode Driver}"
cConexao += ";port=3306;"
cConexao += ";server=" + AllTrim(cServidor)
cConexao += ";database=" + AllTrim(cBanco)
cConexao += ";uid=" + AllTrim(cUsuario)
cConexao += ";pwd=" + AllTrim(cSenha)
Só para atualizar, já estou usando o novo driver odbc 5.3
cConexao := "DRIVER={MySQL ODBC 5.3 Unicode Driver}"
cConexao += ";port=3306;"
cConexao += ";server=" + AllTrim(cServidor)
cConexao += ";database=" + AllTrim(cBanco)
cConexao += ";uid=" + AllTrim(cUsuario)
cConexao += ";pwd=" + AllTrim(cSenha)
►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)
Tutorial de ADO
Pessoal,
Tem como verificar se uma instrução BeginTrans foi iniciada?
Tem como verificar se uma instrução BeginTrans foi iniciada?
►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
Tutorial de ADO
Acho que isso tem a ver com banco de dados.
Não entendo qual seria a utilidade disso.
Transação é para que uma determinada operação seja salva somente no final, pra ficar "no controle" de eventuais problemas.
Testar se tem transação em andamento, me parece algo sem controle.
Teria mais sentido verificar se tem processos em andamento.
Não entendo qual seria a utilidade disso.
Transação é para que uma determinada operação seja salva somente no final, pra ficar "no controle" de eventuais problemas.
Testar se tem transação em andamento, me parece algo sem controle.
Teria mais sentido verificar se tem processos em andamento.
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/
Tutorial de ADO
Quintas,
Eu já resolvi em parte, o método BeginTrans() retorna um número referente referente a transação, o meu problema é que no oracle não permite múltiplas transações aninhadas,
Tipo:
Eu já resolvi em parte, o método BeginTrans() retorna um número referente referente a transação, o meu problema é que no oracle não permite múltiplas transações aninhadas,
Tipo:
Código: Selecionar todos
oConnection:BeginTrans()
oConnection:Execute("INSERT INTO TABELA VALUES('TESTE')")
oConnection:BeginTrans()
oConnection:Execute("INSERT INTO TABELA2 VALUES('TESTE')")
oConnection:CommitTrans()
oConnection:CommitTrans()
►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)
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Tutorial de ADO
Olá!
Penso que todo este trabalho deveria ser executado por uma stored procedure que retornasse um status de sucesso ou falha e não pela aplicação em si. Dentro da SP você conseguirá fazer as transações aninhadas e tudo mais que for necessário processar no banco de dados...
Na verdade, Oracle permite transações aninhadas, inclusive com savepoints e rollback/commit aninhados. Tanto ODBC como ADO não são compatíveis com este comportamento do SGBD Oracle (leia o artigo How To Implement Nested Transactions with Oracle).asimoes escreveu:o meu problema é que no oracle não permite múltiplas transações aninhadas
Penso que todo este trabalho deveria ser executado por uma stored procedure que retornasse um status de sucesso ou falha e não pela aplicação em si. Dentro da SP você conseguirá fazer as transações aninhadas e tudo mais que for necessário processar no banco de dados...
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
Tutorial de ADO
O Viktor Szakats retirou o rddado.
Podemos a continuar a utilizar o mesmo sem problemas?
Podemos a continuar a utilizar o mesmo sem problemas?
2016-12-02 20:04 UTC+0100 Viktor Szakats (vszakats users.noreply.github.com)
- extras/gfspell/*
- extras/hbdroid/*
- extras/hbusb/*
- extras/hbvpdf/*
- extras/hbxlsxml/*
- extras/httpsrv/*
- extras/rddado/*
* package/mpkg_win.sh
- remove unfinished, unmaintaned and/or broken packages from the /extras
directory.
You can find the last revision of them archived here:
https://harbour.github.io/archive/gfspell.zip
https://harbour.github.io/archive/hbdroid.zip
https://harbour.github.io/archive/hbusb.zip
https://harbour.github.io/archive/hbvpdf.zip
https://harbour.github.io/archive/hbxlsxml.zip
https://harbour.github.io/archive/httpsrv.zip
https://harbour.github.io/archive/rddado.zip
(Note these contain several maintenance updates compared
to the latest version hosted as part of mainline 3.2 Harbour)
Or as part of the last repository archive that still contained them:
https://github.com/vszakats/harbour-cor ... 170812.zip
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Tutorial de ADO
ADO faz parte do Windows.
O que foi descrito neste tópico é sobre ADO, sem nenhuma LIB.
O que foi descrito neste tópico é sobre ADO, sem nenhuma LIB.
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/
