Página 2 de 5
Harbour maluco ????
Enviado: 07 Ago 2021 13:53
por JoséQuintas
Itamar M. Lins Jr. escreveu:Mas fica ai procurando, quem sabe é outra coisa mesmo. Quem tem tempo pra isso, é até interessante para todos nós, acharmos o problema em definitivo.
Simplesmente não faz sentido, um browse em array, dar erro por problema de rede.
Harbour maluco ????
Enviado: 07 Ago 2021 14:24
por Itamar M. Lins Jr.
Olá!
Tem um STOP ali... Olha direito, manda REFRESH...
Não tem nada a ver com Harbour isso.
Quando estava "lendo/esperando" alguma coisa que vinha da REDE deu erro.
Saudações,
Itamar M. Lins Jr.
Harbour maluco ????
Enviado: 07 Ago 2021 14:27
por Itamar M. Lins Jr.
Olá!
Mesma coisa aqui:
Error BASE/1302 Object destructor failure: Reference to freed block
Saudações,
Itamar M. Lins Jr.
Harbour maluco ????
Enviado: 07 Ago 2021 17:12
por Itamar M. Lins Jr.
Olá!
Faltou dizer: e não é DBF.... não tem acesso nem mesmo a disco durante o browse.
SQL vem do "CÉU, do espaço sideral" e DBF vem do DISCO voador.
Saudações,
Itamar M. Lins Jr.
Harbour maluco ????
Enviado: 07 Ago 2021 17:50
por JoséQuintas
Itamar M. Lins Jr. escreveu:SQL vem do "CÉU, do espaço sideral" e DBF vem do DISCO voador.
adOpenStatic = este cursor efetua uma copia do banco como se fosse uma foto (snapshot).
No tipo de conexão que eu uso, vém tudo de uma vez.
Durante o browse não há acesso à rede.
E mesmo assim, a rede é virtual, sem ligação física.
Harbour maluco ????
Enviado: 07 Ago 2021 20:33
por Itamar M. Lins Jr.
Olá!
No tipo de conexão que eu uso, vém tudo de uma vez.
Ainda preciso de mais informações p/ acreditar nisso. Até agora o que tenho lido não diz isso que vc está afirmando.
Código: Selecionar todos
adOpenStatic 3 Uses a static cursor. A static copy of a set of records that you can use to find data or generate reports. Additions, changes, or deletions by other users are not visible.
E mesmo assim, a rede é virtual, sem ligação física.
Que importa isso ? Falha é falha! Pode ser inclusive do ADO.
No meu entender, uma cópia estática, não significa que VIERAM do servidor p/ estação todos os REGISTROS, significa que SEPAROU em algum LUGAR os registros da sentença.
adOpenStatic 3, eu entendo que o RS é ESTATICO tudo que for alterado, copiado, não é refletido na BASE DE DADOS. Dai entender que veio tudo p/ a estação são outros 500. Porquê a cópia pode ser dentro da base do servidor, um arquivo TMP por exemplo "TEMPORARY" dentro do próprio servidor.
Saudações,
Itamar M. Lins Jr.
Harbour maluco ????
Enviado: 07 Ago 2021 20:39
por Itamar M. Lins Jr.
Olá!
Durante o browse não há acesso à rede.
Como você pode afirmar isso ? Nunca vi isso. Esta fechado a conexão ?
ADO pega...
ADO Close...
browse() é isso ?
Saudações,
Itamar M. Lins Jr.
Harbour maluco ????
Enviado: 07 Ago 2021 21:03
por Itamar M. Lins Jr.
Olá!
Lendo na internet sobre o assunto. -> adOpenStatic-vs-adOpenDynamic-vs-adOpenForwardOnly
Código: Selecionar todos
É uma propriedade específica do conjunto de registros. As opções são do lado do servidor e do cliente ... Cada uma delas tem algumas características exclusivas ... O que você pode considerar é ajustar seu CacheSize .. Que define o número de registros retornados no conjunto de registros em um determinado momento. A coisa boa sobre isso é que quando você atinge o limite do cache, o cursor busca o próximo lote de registros ...
ENTENDEU AI PAPUDO!
Saudações,
Itamar M. Lins Jr.
Harbour maluco ????
Enviado: 07 Ago 2021 21:11
por Itamar M. Lins Jr.
Olá!
Olha ai mais essa.
Código: Selecionar todos
Infelizmente, o problema é que, apesar do valor que defini para CacheSize, quando o conjunto de registros é aberto, ele não carrega todos os registros na memória. Isso é uma preocupação, pois algumas operações em cada registro no aplicativo cliente podem demorar um pouco ou até mesmo bloquear a espera pela entrada do usuário. Enquanto isso ocorre, isso mantém bloqueios nas tabelas do SQL Server até que leiamos todos os registros.
Tentei definir CacheSize para ver se carregaria tudo de uma vez, mas sem sucesso.
Como todas as peças parecem estar aqui, não entendo muito bem por que o cursor do lado do servidor não pode simplesmente carregar tudo na memória em segundo plano da mesma forma que o cursor do lado do cliente (estático) faz.
Tentei algumas das propriedades dinâmicas do conjunto de registros (como Máximo de registros abertos, que é somente leitura) sem sucesso.
https://social.msdn.microsoft.com/Forum ... ll-records
Saudações,
Itamar M. Lins Jr.
Harbour maluco ????
Enviado: 07 Ago 2021 22:09
por JoséQuintas
Itamar M. Lins Jr. escreveu:ENTENDEU AI PAPUDO!
Entendi.
Quem usa DIFERENTE DE MIM pode ter problema de rede.
Eu uso do lado do cliente
AdUseClient, e AdUseStatic
Assim sempre vém tudo, não tem nada disso de cache e afins pra dar problema.
retirado do texto que postou:
não entendo muito bem por que o cursor do lado do servidor não pode simplesmente carregar tudo na memória em segundo plano da mesma forma que o cursor do lado do cliente (estático) faz.
Harbour maluco ????
Enviado: 07 Ago 2021 22:33
por JoséQuintas
Ajudou a encontrar um método interessante
https://docs.microsoft.com/pt-br/sql/ad ... rver-ver15
Este exemplo demonstra como usar o método Ressync para atualizar dados em um conjunto de registros estático.
Com uma chamada do método Resync(), a consulta é atualizada.
Não sei se vou usar isso, mas é interessante.
E voltando ao anterior: o texto menciona sobre atualizar em segundo plano
NÃO sei dizer.... se o Harbour espera que tudo chegue ou se já sai usando antes de chegar toda informação.
Seria uma possibilidade, muito estranha, mas seria.
Harbour maluco ????
Enviado: 07 Ago 2021 22:58
por JoséQuintas
Aproveitando....
Como eu já disse por aqui, NÃO uso nada especial do ADO, NADA que deixe preso ao ADO, nem mesmo isso dele carregar aos poucos.
É comando SQL pra trazer as informações para o terminal, é comando SQL pra enviar informações para o servidor.
Nada disso de cache, de atualização em batch, etc.
Assim posso trocar de ADO pra qualquer outra coisa, caso seja necessário.
A única coisa "diferente" que uso dele, é o fato dele retornar as informações em formato de recordset ADO.
Poderia até trocar os DBFs restantes pra recordset ADO, salvos em disco, mas não quero isso.
Quero ficar preso somente a comandos SQL, e nada mais.
Mas se o browse é encima do formato desse recordset, nada impede de usar recursos do recordset.
Acaba sendo parecido com array, a diferença é que ele fica no Windows e não no aplicativo.
Harbour maluco ????
Enviado: 07 Ago 2021 23:11
por Itamar M. Lins Jr.
Olá!
Nada disso de cache,
Quer dizer que quando não faz referência ao CacheSize ele não assume o valor padrão e deixa de existir, rsrsrsrsrs tem doido pra tudo mesmo.
Leu e entendeu da sua CABEÇA, não é isso que diz o texto.
Diz que CARREGA TUDO DO LADO CLIENTE, RESPEITANDO O CACHESIZE!
E mais!
Código: Selecionar todos
using adAsyncFetch and adAsyncExecute to load things in the background when necessary.
Se não entendeu existem 2 PONTEIROS(CURSOR) síncrono ou assíncrono um do lado CLIENTE e outro do lado do SERVIDOR.
O texto diz mais ainda. A conexão está ATIVA a REDE está LIGADA. Existe um processo TCP ligando CLIENTE/SERVIDOR.
Não viu isso no texto não ?
Lê ai!
Código: Selecionar todos
Since all the pieces seem to be here, I don't quite understand why the server-side cursor can't simply load everything into memory in the background the same way the (static) client-side cursor does.
SERVER-SIDE e CLIENT-SIDE tá vendo ai ?
Saudações,
Itamar M. Lins Jr.
Harbour maluco ????
Enviado: 07 Ago 2021 23:22
por Itamar M. Lins Jr.
Olá!
Resumindo, só vai tá ai na estação se copiar tudo da sentença para algum lugar no HD/RAM e fechar a conexão.
Se a conexão está aberta, existe possibilidade de erro na REDE. Virtual ou não.
Saudações,
Itamar M. Lins Jr.
Harbour maluco ????
Enviado: 07 Ago 2021 23:50
por Itamar M. Lins Jr.
Olá!
Ai o cachesize que vc acreditava que vinha tudo p/ cliente, na verdade só vem 1.
The default value for this property is 1. This means that only one record is fetched and cached at a time. For large databases, this is not efficient. A larger value will speed up operations, but remember that cached records may not show recent changes made to the database. To avoid this you can call the Resync method regularly, which will update the cache.
E vc pensando que tinha vindo tudo.
Saudações,
Itamar M. Lins Jr.