90 Dicas de Visual Basic



Baixar 426,91 Kb.
Página13/14
Encontro03.05.2017
Tamanho426,91 Kb.
1   ...   6   7   8   9   10   11   12   13   14

71 - VB4 - Solução para bug no DBGrid


Há um sério bug (erro) em VB4, no controle Databoud Grid usado com forms modais. Por exemplo, crie três forms: form1, form2 e form3. Adicione um Command1 (botão) em cada form. No evento click do botão em form1, chame o form2 como modal. No evento click do botão em form2 chame o form3 como modal. Adicione um DBGrid no form3. No evento click do botão em form3, use unload form3.

Execute o form1 e aperte nos referidos botões. No clique do terceiro botão, ocorre um erro de pilha (stack error) com o Visual Basic (tanto em 16 como em 32 bits). Rodando em Windows 3.1x, o sistema trava completamente.

Solução: não use DBGrid com forms modais. Se, entretanto, você precisar de um form modal, simule-o. Basta alterar a propriedade do form2 (o que chamou) para false. Você poderá criar uma property para fazer referência ao form que chamou.

With FormModal

.propCaller = Me

.Show


End With

Agora altere Caller.Enabled = false no evento Load do form "modal". Volte para true no evento Unload.



Por Luis Miguel da Costa Pereira Ferreira*

72 - VB4 - Propriedade Count, de Control Array, não documentada


No VB4, cada control array (vetor de controles) é uma collection e possui uma propriedade Count. Isto não ocorre com o VB3. É possível, então, se criar um loop (laço de repetição) tendo o Count como valor máximo.

Esta característica não aparece nem nos manuais, nem no help do VB4. Talvez, pelo fato de que uma control array collection não possui todas as propriedades e métodos das demais collections. A propriedade Count e o método Item são suportados, enquanto os métodos Add e Remove não o são.

Este pequeno exemplo usa o Count para determinar qual elemento de um vetor de botões de opção foi selecionado.

Private Sub FindSelectedOption ( )

Dim ij As Integer As Integer

For ij = 0 to Option1.Count - 1

If Option(ij).Value Then

MsgBox str(ij),0, "Opção Selecionada"

End If

Next ij


End Sub

Esta rotina trabalha apenas com números contínuos. Se os elementos forem 0, 1, 3 e 4, ocorrerá um erro (run time error 340), ao se tentar fazer referência ao item 2.



Por Craig Everett*

73 - VB4 - Determinando se um objeto foi definido (Set)


VB4 providencia uma série de novas capacidades de uso de objetos. Porém, um objeto deve ser "setado" (definido) antes de ser referenciado. A única forma de verificar se um objeto já foi definido é através do código de erro (91).

Por exemplo:



Public Function IsSomething (ob As Object) As Long

Dim J as Long

Err.Clear

On Error Resume Next

If TypeOf ob Is TextBox Then

J = 1


End If

Select Case Err.Number

Case 91

'error 91 = object not set



IsSomethig = false

Case 0


IsSomething = true

Case Else

'... outro erro ocorreu

End Select

On Error GoTo 0

End Function

Por Evan Dickinson*

74 - VB3/VB4 - Criando Inner Joins (SQL) numa base Access (Jet)


A palavra reservada In, da linguagem SQL (estrutura Inner Join) funciona em bases externas (ODBC), mas causa problemas em bases do Access (MDB). A sintaxe correta é:

SELECT Authors.*

FROM C:\VB\Biblio1.Authors

INNER JOIN C:\VB\Biblio2.MDB.Titles

INNER JOIN C:\VB\Biblio3.MDB.Publishers

INNER JOIN C:\VB\Biblio4.MDB.[Publisher Comments]

ON Publishers.PubID = [Publisher Comments].PubID

ON Titles.PubID = Publishers.PubID

ON Authors.Au_ID = Titles.Au_ID

Os comandos de uso do SQL (como CreateDynaset) devem estar em uma só linha (ou _, no VB4). Usamos como exemplo, a base BIBLIO.MDB dividida em 4 bases, uma com cada tabela.

Ao usar ODBC, trabalhe com a cláusula IN. Veja no Help do VB detalhes sobre o SQL.

Por Mark P. Atwood*, texto revisado por Charles A. Müller

75 - VB4 - O desafio de criar Add-ins


Escrever add-ins (recursos adicionais) para o VB4 pode ser desafiador, recompensador e melindroso. Se você não tomar cuidado, o VB poderá "estranhar" algumas coisas e abortar. Podem aparecer várias mensagens, dependendo do sistema operacional. As mensagens são diversas, mas o resultado é o mesmo.

Por exemplo, no Windows 95, aparecem mensagens como "Este programa causou um erro e vai ser encerrado" ou "se o problema persistir, contate o fornecedor". No Windows 3.1x, podem ser causados GPFs.

Este erros ocorrem quando a IDE está sendo descarregada (unloaded) e será executada numa posterior abertura do VB com o aviso "xxxxx add-in could not be loaded, do you want to remove it from the list of add-ins?"

Após isto, você terá que executar novamente o add-in para registrá-lo como relacionado ao VB. Vejamos dois casos destes erros:



  1. Referenciando uma propriedade da VBIDE Instance Object, como AcitveProject.FileName no evento ConnectAddin da Conector Class.

  2. Conectando mais menus ou submenus que você desconectou.

Programação é, predominantemente, uma ciência exata e muitas "regras não documentadas" são uma real necessidade ao se criar um add-in.

Por Les Smith*

76 - VB4 - Evitando Erros de Atualização em Bases Access


Evite o erro de acesso 3260 ("Couldn't update; currently record is locked by user '' on machine ''"), que ocorre quando duas ou mais aplicações acessam a mesma tabela de uma base de dados Access (Jet). O acesso é realizado por objetos recordset (como table ou dynaset), sobre uma tabela que contenha uma chave (primária ou não).

Se uma das aplicações está ociosa (apenas abriu o registro e ainda não o alterou) e outra aplicação tenta alterar ou adicionar dados, o erro citado ocorre. Para evitar este problema, inclua o método Idle dbFreeLOcks após o recordset ser aberto. Se for um table recordset, inclua-o após ter definido a propriedade Index. Veja um exemplo:

Set db = Workspaces(0).Opendatabase("Test.mdb")

Set TB = Db.OpenRecordSet("Customer_Master", dbOpenTable)

TB.Index = "PrimaryKey"

DB.Engine.Idle (dbFreeLocks)



Por Rajesh Patil*


1   ...   6   7   8   9   10   11   12   13   14


©livred.info 2017
enviar mensagem

    Página principal