VETORES ou MATRIZES
Moderador: Moderadores
VETORES ou MATRIZES
É Quintas,
Você sabe que o Try Catch funciona assim:
Try
atualizando a tabela nova
Deu Erro no meio da atualização, vai pro Catch
Catch o Erro
Trata o erro
Restauro a tabela original, sem perda de dados
End
Simplificando, no meio do append from, deu crash e ai? tabela com metade ou parte dos registros?
Quintas explica pra gente como você trata isso.
Você sabe que o Try Catch funciona assim:
Try
atualizando a tabela nova
Deu Erro no meio da atualização, vai pro Catch
Catch o Erro
Trata o erro
Restauro a tabela original, sem perda de dados
End
Simplificando, no meio do append from, deu crash e ai? tabela com metade ou parte dos registros?
Quintas explica pra gente como você trata isso.
►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
VETORES ou MATRIZES
Eu só mexo no final, só renomeio, porque não uso FPT.
Se chegou até lá, deu tudo certo.
Se chegou até lá, deu tudo certo.
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/
-
microvolution
- Usuário Nível 5

- Mensagens: 1231
- Registrado em: 02 Set 2011 22:17
- Contato:
VETORES ou MATRIZES
gente os Srs. são tão "ninjas" em tudo... que até agora não vi nada que os Srs. não resolvessem ou desse uma opinião certa!
até de "software de rádio" os srs. quase entendem... rsrsrs
por enquanto fiz o procedimento assim (até estudar melhor o do JQuintas ou asimoes):
*************** função para alterar/incluir um campo (tamanho, tipo, etc) 18/2/16w ***************
*************** função para alterar/incluir um campo (tamanho, tipo, etc) 18/2/16w ***************
esta é a função que cheguei até o presente momento... isso foi antes de ver as postagens dos srs.
aqui nesta função ela (pelo menos é o que entendi) faz 2 coisas:
1 - verifica se tem novos campos (se tiver toma as providências);
2 - verifica se algum campo foi alterado.
Estou testando, e, até agora não apresentou erros...
Por enquanto é só...
Nota: abro o arquivo em modo EXCLUSIVO.
O que acharam?
até de "software de rádio" os srs. quase entendem... rsrsrs
por enquanto fiz o procedimento assim (até estudar melhor o do JQuintas ou asimoes):
*************** função para alterar/incluir um campo (tamanho, tipo, etc) 18/2/16w ***************
Código: Selecionar todos
static function ALTERA_ARQUIVO ( MATRIZ , MATRIZA , MATRIZN )
local ARQUIVO := MATRIZ [ 1 , 1 , 1 ],;
NOME_EXTERNO := MATRIZ [ 1 , 1 , 3 ],;
NOME_INDICE := nil,;
CHAVE := nil,;
MATRIZ_AUX := aclone (MATRIZ),;
I := 0
local n_stru := 1 , a_stru := stru_antiga := stru_nova := {} // acrescentado em 7/2/16w (pctoledo)
local lATUALIZA := .t.
local lATUALIZA2 := .f.
local tela_anterior
static INICIO := .f.
private L := 3 // 1
lboxmessage( "Por favor, pressione [ENTER] ou clique em [OK] para uma verificação inicial e saber se o arquivo "+ARQUIVO+" precisa ou não ser atualizado!!!" )
if file (NOME_EXTERNO) .and. INICIO
return
endif
adel (MATRIZ_AUX,1)
asize (MATRIZ_AUX,len (MATRIZ_AUX) - 1)
if file (NOME_EXTERNO)
a_stru := dbstruct()
for n_stru = 1 to len(MATRIZN)
if ascan( a_stru , { |x| x[1] = MATRIZN [ n_stru , 1 ] } ) = 0
aadd ( a_stru , { MATRIZN [ n_stru , 1 ] , MATRIZN [ n_stru , 2 ], MATRIZN [ n_stru , 3 ] , MATRIZN [ n_stru , 4 ] } )
else
lATUALIZA := .f.
end
next
if lATUALIZA
lboxmessage( "A verificação inicial foi feita, e, realmente o arquivo "+ARQUIVO+" precisa ser atualizado. Pressione [ENTER] ou clique em [OK] para ele ser atualizado imediatamente!" , , 2 )
if lYesNo( "Arquivo de dados " + ARQUIVO + " existe ! Deseja alterar ?" )
&ARQUIVO.->(dbclosearea())
COPY FILE (NOME_EXTERNO) TO (NOME_EXTERNO) + "-BACK"
if frename(NOME_EXTERNO, NOME_EXTERNO+"2") = 0
dbcreate(NOME_EXTERNO, a_stru)
use (NOME_EXTERNO) exclusive new
append from (NOME_EXTERNO)+"2"
use
ferase(NOME_EXTERNO+"2")
lboxmessage( "Atualização do arquivo " + ARQUIVO + " efetuada com sucesso!!!" )
else
lboxmessage( "Não foi possível renomear o arquivo! Favor verificar se existe um arquivo com esse nome! A atualização não será possível. O DBatualiza será encerrado." , , 3 )
return
endif
else
lboxmessage( "Não foi alterado nada. A atualização não será realizada. Aplicativo será encerrado!" , , 3 )
return
endif
else
lboxmessage( "A verificação inicial foi feita, e, realmente o arquivo "+ARQUIVO+" não possui novos campos!" , , 2 )
lboxmessage( "ATENÇÃO! Agora verificaremos no arquivo " + ARQUIVO + " se algum campo foi modificado. Pressione [ENTER] ou clique em [OK] para iniciar a verificação!" , , 2 )
stru_antiga := dbstruct()
stru_nova := MATRIZN
tela_anterior := savescreen ( 03 , 19 , 21 , 69 )
// moldura ( 03 , 19 , 21 , 69 )
janela ( 03 , 19 , 21 , 69 , "w* /n" )
for n_stru = 1 to len(stru_antiga)
@ scrolMV( 04 , 20 , 20 , 68 ) , 20 say "valor atual : " + stru_antiga[n_stru,1] + stru_antiga[n_stru,2] + str( stru_antiga[n_stru,3] ) + str (stru_antiga[n_stru,4] )
@ scrolMV( 04 , 20 , 20 , 68 ) , 20 say "valor correto: " + stru_NOVA[n_stru,1] + stru_NOVA[n_stru,2] + str( stru_NOVA[n_stru,3] ) + str (stru_NOVA[n_stru,4] )
if stru_antiga [n_stru,1] <> stru_nova [n_stru,1]
lATUALIZA2 := .t.
elseif stru_antiga [n_stru,2] <> stru_nova [n_stru,2]
lATUALIZA2 := .t.
elseif stru_antiga [n_stru,3] <> stru_nova [n_stru,3]
lATUALIZA2 := .t.
elseif stru_antiga [n_stru,4] <> stru_nova [n_stru,4]
lATUALIZA2 := .t.
endif
next
if lATUALIZA2
lboxmessage( "A verificação foi feita, e, realmente o arquivo "+ARQUIVO+" precisa ter os campos corrigidos. Pressione [ENTER] ou clique em [OK] para ele ser atualizado imediatamente!" , , 2 )
if lYesNo( "Arquivo de dados "+ARQUIVO+" existe ! Deseja alterar?" )
&ARQUIVO.->(dbclosearea())
COPY FILE (NOME_EXTERNO) TO (NOME_EXTERNO) + "-BACK"
if frename(NOME_EXTERNO, NOME_EXTERNO+"2") = 0
// dbcreate(NOME_EXTERNO, a_stru)
dbcreate(NOME_EXTERNO, stru_nova)
use (NOME_EXTERNO) exclusive new
append from (NOME_EXTERNO) + "2"
use
ferase(NOME_EXTERNO+"2")
lboxmessage( "Atualização do arquivo "+ARQUIVO+" efetuada com sucesso!!!" )
else
lboxmessage( "Não foi possível renomear o arquivo! Favor verificar se existe um arquivo com esse nome! A atualização não será possível. O DBatualiza será encerrado." , , 3 )
return
endif
else
lboxmessage( "Não foi alterado nada. A atualização não será realizada. Aplicativo será encerrado!" , , 3 )
return
endif
else
lboxmessage( "ATENÇÃO! O arquivo "+ARQUIVO+" já estava atualizado. Isso significa que não precisa ser atualizado por este aplicato, ou este aplicativo já foi executado anteriormente!" , , 2 )
return
endif
endif
else
if lYesNo( "Arquivo "+ARQUIVO+" não encontrado. Será criado então um novo arquivo! Você Concorda ???" , , 2)
dbcreate (NOME_EXTERNO,MATRIZ_AUX)
else
lboxmessage( "Arquivo "+ARQUIVO+" não foi criado. Tudo continuará do jeito em que estava!" , , 3 )
endif
endif
use (NOME_EXTERNO) shared new
CHAVE := MATRIZ [1,2,2]
index on &CHAVE to (MATRIZ [1,2,3])
for I = 3 to len (MATRIZ [1])
CHAVE := MATRIZ [1,I,2]
index on &CHAVE to (MATRIZ [1,I,3])
next
restscreen ( 03 , 19 , 21 , 69 , tela_anterior )
returnesta é a função que cheguei até o presente momento... isso foi antes de ver as postagens dos srs.
aqui nesta função ela (pelo menos é o que entendi) faz 2 coisas:
1 - verifica se tem novos campos (se tiver toma as providências);
2 - verifica se algum campo foi alterado.
Estou testando, e, até agora não apresentou erros...
Por enquanto é só...
Nota: abro o arquivo em modo EXCLUSIVO.
O que acharam?
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!
Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
MICROVOLUTION - 16 anos Evoluindo Com Você!
Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
VETORES ou MATRIZES
Complicada pra entender, muito fonte, e com erros.
Nem quero saber porque 3 arrays.
Só olhei por cima, aonde achei que teria erro.
Nem quero saber porque 3 arrays.
Só olhei por cima, aonde achei que teria erro.
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
VETORES ou MATRIZES
É possível que seja criado um arquivo com extensão .dbf.dbf
Ou que falhe a cópia, sei lá o que passa como parâmetro.
Como usa o mesmo nome nos dois casos, um dos dois vai falhar.
Ou que falhe a cópia, sei lá o que passa como parâmetro.
Como usa o mesmo nome nos dois casos, um dos dois vai falhar.
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
VETORES ou MATRIZES
Olá!
Claro que não! Catch serve exatamente para se colocar o tratamento adequado para o erro encontrado. Tem gente que não coloca e deixa o programa seguir, como se nada errado houvesse ocorrido. Isto vem de longe... tempos onde o programador despreocupado fazia no VB:JoséQuintas escreveu: E com Try/catch?
Vai em frente, e os dados serão perdidos?
Código: Selecionar todos
Public Sub SubA()
On Error Goto ProcError
' código
End Sub
ProcError:
Resume NEXT ' <=========
End Sub[]´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
VETORES ou MATRIZES
Ou usando código Harbour, que pode ser considerado no estilo do VB:
Mas a rotina é de converter arquivos.
Uso a minha por 20 anos, nunca escondi erros.
Por isso pude ir acrescentando tudo que pode acontecer.
Se imaginar um fonte desses acima, com rotinas de erro, vai ser complicado.
Minha rotina roda SEMPRE, sempre que o sistema é carregado.
Dá pra dizer que já foi executada milhões de vezes.
Nunca precisei do TRY/CATCH nela.
TRY/CATCH é pra exceções, não pra virar regra.
E muito menos aonde tem a ver com os dados do cliente.
Se der erro, é porque não previu alguma coisa.
Código: Selecionar todos
lOk := .F.
BEGIN SEQUENCE WITH __ErrorBlock()
sdhsdfhdsd
lOk := .T.
END SEQUENCE
IF .NOT. lOk
? "Deu problema"
ENDIF
Uso a minha por 20 anos, nunca escondi erros.
Por isso pude ir acrescentando tudo que pode acontecer.
Se imaginar um fonte desses acima, com rotinas de erro, vai ser complicado.
Minha rotina roda SEMPRE, sempre que o sistema é carregado.
Dá pra dizer que já foi executada milhões de vezes.
Nunca precisei do TRY/CATCH nela.
TRY/CATCH é pra exceções, não pra virar regra.
E muito menos aonde tem a ver com os dados do cliente.
Se der erro, é porque não previu alguma coisa.
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
VETORES ou MATRIZES
Que erros podem acontecer?
não existir o arquivo. if .not. file()
não abrir o arquivo. neterr()
erro no append from: aborta. o temporário fica na pasta, mas não atrapalha nada
estourar capacidade do campo: checagem prévia
campo string pra número e vice-versa: comparar primeiro
erro no rename que já existe: File()
erro de HD: aborta, nem tem como contornar, é um problema de hardware a ser resolvido, nenhum aplicativo roda com erro no HD.
E o try/catch... não sei aonde.
Inventaram que isso é sofisticado, e saem usando em qualquer lugar.
Vai ficar demorado fazer tudo isso?
Se impedir problemas, ótimo, a demora é justificada.
Depois é agilizar rotina.
não existir o arquivo. if .not. file()
não abrir o arquivo. neterr()
erro no append from: aborta. o temporário fica na pasta, mas não atrapalha nada
estourar capacidade do campo: checagem prévia
campo string pra número e vice-versa: comparar primeiro
erro no rename que já existe: File()
erro de HD: aborta, nem tem como contornar, é um problema de hardware a ser resolvido, nenhum aplicativo roda com erro no HD.
E o try/catch... não sei aonde.
Inventaram que isso é sofisticado, e saem usando em qualquer lugar.
Vai ficar demorado fazer tudo isso?
Se impedir problemas, ótimo, a demora é justificada.
Depois é agilizar rotina.
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
VETORES ou MATRIZES
Try/catch pra erro no hd.
Só vai estar trocando a mensagem de erro padrão por outra.
De qualquer jeito, é abortar e resolver o HD.
E isso a mensagem de erro padrão já faz.
Só vai estar trocando a mensagem de erro padrão por outra.
De qualquer jeito, é abortar e resolver o HD.
E isso a mensagem de erro padrão já faz.
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
VETORES ou MATRIZES
Só pra voltar ao assunto do tópico:
Não faço isso, mas:
E pra vários arquivos?
Não precisa alterar a rotina pode criar uma nova, intermediária:
Não faço isso, mas:
E pra vários arquivos?
Não precisa alterar a rotina pode criar uma nova, intermediária:
Código: Selecionar todos
FUNCTION AlteraVarios( aArray )
LOCAL lOk := .T., oFile
FOR EACH oFile IN aArray
lOk := lOk .AND. AlteraUm( oFIle[ 1 ], oFile[ 2 ] ) // nome e estrutura
NEXT
RETURN lOk
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/