Página 1 de 1
ADO, atualizar o registro.
Enviado: 30 Abr 2020 22:58
por Itamar M. Lins Jr.
Ola!
Código: Selecionar todos
*-----------------------------------------------------------------------------*
METHOD Update() CLASS DBADO
*-----------------------------------------------------------------------------*
Local oErr, lRet := .T., OleError
TRY
IF ::oRs:LockType = adLockBatchOptimistic
If !::EOF
::oRs:UpdateBatch()
Endif
ELSE
::oRs:Update()
ENDIF
CATCH oErr
// lRet := MyDefError(oErr, .F., self) // Mi manejadr de errores
OleError := ::oRs:ActiveConnection:Errors[0]
MsgStop(oErr:Description+hb_OsNewLine()+"Native Error "+STR(OleError:NativeError),"Error al guardar")
lRet := .F.
END
Return lRet
O ADO cuida de tudo isso, se eu tiver um RecordSet armado com o comando oRs: = chave SELECT, nome, endereço FROM clientes se quiser alterar o nome, só preciso fazer oRs: Campos (1): Valor: = new_name ou usando ado .prg (acabei de compartilhar um link para download) Posso executar oRs: Nome: = new_name, então oRs: Update () e pronto, ele é atualizado no banco de dados.
Usando ADO, basta atualizar o field via x:value := "X..." depois oRS:update() que atualiza ?
Não precisamos usar comandos SQL "insert into..., UPDATE..." ? se for assim tá legal.
Saudações,
Itamar M. Lins Jr.
ADO, atualizar o registro.
Enviado: 30 Abr 2020 23:41
por JoséQuintas
Itamar M. Lins Jr. escreveu:Usando ADO, basta atualizar o field via x:value := "X..." depois oRS:update() que atualiza ?
Não precisamos usar comandos SQL "insert into..., UPDATE..." ?
se for assim tá legal.
Isso mesmo, mas depende do ODBC ser totalmente compatível.
Inclusive no VB fica mais integrado, pode-se usar RS!Codigo ao invés de RS.Fields( "código" ).Value
Mas depende do ODBC estar completo, do fabricante ter liberado tudo.
Na dúvida melhor SQL mesmo.
https://ns7.webmasters.com/caspdoc/html ... method.htm
Código: Selecionar todos
` Change data in edit buffer.
rstEmployees!fname = "Linda"
rstEmployees!lname = "Kobara"
` Show contents of buffer and get user input.
strMessage = "Edit in progress:" & vbCr & _
" Original data = " & strOldFirst & " " & _
strOldLast & vbCr & " Data in buffer = " & _
rstEmployees!fname & " " & rstEmployees!lname & vbCr & vbCr & _
"Use Update to replace the original data with " & _
"the buffered data in the Recordset?"
If MsgBox(strMessage, vbYesNo) = vbYes Then
rstEmployees.Update
Else
rstEmployees.CancelUpdate
End If
Nota: considerar rstEmployees!fname como rstEmployess:Fields( fname ):Value
ADO, atualizar o registro.
Enviado: 01 Mai 2020 13:41
por JoséQuintas
Tem mais que isso:
No Access existe a opção de VINCULAR DBF ao banco Access, através de ADO, ou qualquer outra base de dados.
Ou seja... o Harbour poderia trabalhar normalmente com o MDB, como um banco Access comum, mas estar atualizando qualquer outra base de dados.
O Harbour tem LIB pra trazer as coisas pra formato DBF ou formato array
O ADO trás pra formato ADO
O Access trás pra formato Access
E por aí vai.
No final expande as opções:
O programador precisa decidir se quer trabalhar com formato array, DBF, ADO, SQL, misto, etc.
Depois/durante a decisão, pode escolher o conector que vai usar e/ou LIB que vai usar.
Nada impede de testar várias opções até mesmo ao mesmo tempo.
ADO, atualizar o registro.
Enviado: 01 Mai 2020 18:50
por alxsts
Olá!
Depende de como o recordset foi criado (método Open).
Valor/Constante Tipo/Descrição
3 / adOpenStatic
Define um cursor do tipo Static. Um cursor deste tipo contém uma cópia estática dos registros. O conteúdo do RecordSet é definido no momento da criação do mesmo. Caso sejam feitas alterações no Banco de dados, estas alterações não serão visíveis para o RecordSet que utiliza um cursor do tipo Static. Somente recriando o RecordSet é que poderemos ter acesso as alterações efetuadas. Podemos movimentar o ponteiro de registro em ambas as direções, isto é, podemos utilizar os métodos MoveNext, MovePrevious e assim por diante.
0 / adOpenForwardOnly
Cria um cursor do tipo Forward Only. Este é o valor padrão que será utilizado caso não seja definido nenhum outro tipo. Somente podemos utilizar o método MoveNext. Se tentarmos utilizar um outro método de movimentação, será gerado um erro e a página não será carregada. Também é um cursor do tipo Static, com a diferença que somente podemos nos movimentar para a frente.
2 / adOpenDynamic
Cria um cursor do tipo Dynamic. Um cursor deste tipo não possui um conjunto fixo de registros. Quaisquer alterações, adições e exclusões feitas por outros usuários serão visíveis para o objeto RecordSet, sem que o mesmo tenha que ser eliminado e recriado. Podemos nos movimentar em ambas as direções dentro do RecordSet.
1 / adOpenKeyset
Cria um cursor do tipo Keyset. Um cursor deste tipo é parecido com um cursor Dynamic, com a exceção de que o conjunto de registros é fixo. O RecordSet enxerga as alterações feitas por outros usuários, porem a adição de novos registros não é visível para um RecordSet do tipo Keyset. Caso algum registro seja eliminado por outros usuários, o respectivo registro estará inacessível no RecordSet. Podemos nos movimentar em ambas as direções dentro do RecordSet.
Fonte:
Júlio Battisti
ADO, atualizar o registro.
Enviado: 02 Mai 2020 14:46
por Itamar M. Lins Jr.
Ola!
Vendo com calma, tem vantagens e desvantagens.
A vantagem principal que vejo é para quem está migrando do DBF, trabalhar de forma igual mas com BD relacional.
A desvantagem é ficar fora do padrão, totalmente preso sem saber usar os outros comandos, SQL, INSERT, UPDATE.
O SQLMIX obriga usar os comandos SQL, para gravar, incluir e ler.
Algumas pessoas acham isso um incomodo, pois não querem digitar as longas "QUERYES", ... INSERT INTO bla,bla,bla... mas isso lá na frente tem um ganho pq já fica pronto para qualquer linguagem "OFF WINDOWS". E um maior controle, sem as falhas "possíveis" desta técnica particular do ADO, conforme relato do José Quintas. Seria a mesma coisa de usar ADO igual a DBF, ai o sujeito trocou 6 por meia dúzia.
Saudações,
Itamar M. Lins Jr.
ADO, atualizar o registro.
Enviado: 02 Mai 2020 14:51
por Itamar M. Lins Jr.
Ola!
Depende de como o recordset foi criado (método Open).
Deve está desatualizado.
Código: Selecionar todos
rs.CursorLocation=adUseClient
rs.CursorType=adOpenStatic
rs.LockType=adLockBatchOptimistic
adUseClient 3 Uses a client-side cursor supplied by a local cursor library. For backward compatibility, the synonym adUseClientBatch is also supported
Código: Selecionar todos
oC := win_oleCreateObject( "ADODB.Connection" )
oC:CursorLocation := adUseClient
oC:ConnectionTimeout := 10
oC:CommandTimeOut := 15 //30
DO CASE
CASE Engine == "MARIADB"
nOption := 3+4194304+67108864 // dont know + auto_reconect + multiple_statementes_allowed
sconection := "Provider=MSDASQL;Driver={MariaDB ODBC 3.0 Driver};" + ;
"Server=" + Server + ;
";Database=" + Database + ;
";User=" + User + ;
";Password=" + Pass + ;
";Option="+str(INT(nOption))+if(Port <> NIL, ";Port="+Port ,";")
Essa é a forma que não precisa usar SQL, é tratado igual a DBF. oRS:Update() grava do bando de dados.
Saudações,
Itamar M. Lins Jr.