• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

radamanto

Duvida com classes

10 mensagens neste tópico

A minha duvida é a seguinte: será que posso ter variaveis globais reconhecidas em todo o projecto inclusive em classes (dll) à semelhança do que acontece por exemplo entre as forms e os modulos???

A deia era por exemplo abrir,atraves de uma classe,uma ligacao obdc, criar recorsets (por exemplo) e depois numa qualquer form do projecto executar um movenext de um recordset global, ou seja, reconhecido em todas as forms.modulos e na classe deste??

Desde já agradeco ajuda

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

SIm eu uso modulos mas não estou a conseguir faze-lo com uma classe. Queria saber se era possivel faze-lo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

As classes obrigam a criar sempre uma nova instância da classe e desse modo é preciso recorrer sempre a modulos.

Não estou a ver solução para isso :)

EDIT: Resposta errada!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então todas as transacções efectuadas dentro de uma classe apenas podem ser feitas dentro da classe???, ou seja, começando na ligaçao à base de dados e tudo aquilo que se fizer com essa ligação (queries, executes, updates) até mesmo o fecho da mesma BD???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

podes ter variaveis publicas e privadas assim como as Funções podem ser publicas e privadas...

Sendo que desde que declares uma variavel publica ela é reconhecida e valida para TODO o projecto , assim como as funções.

Assim não entendo a pergunta, uma vez que desde que declares "ela" vai ser conhecida

Option Explicit

Public glngPublica As Long 'Variavel long publica

Uma das minhas aproximações foi:

Option Explicit

Public Enum DB_TYPE
DB_BaseDadosA = 1
DB_BaseDadosB = 2
DB_BaseDadosC = 3
DB_Facturacao = 4
DB_Funcionarios = 5
End Enum

Public cnBaseDadosA			As Connection
Public gBaseDadosAQueue		As Integer

Public cnBaseDadosB			As Connection
Public gBaseDadosBQueue		As Integer

Public cnBaseDadosC			As Connection
Public gBaseDadosCQueue		As Integer

Public cnFacturacao			As Connection
Public gFacturacaoQueue		As Integer

Public cnFuncionarios		As Connection
Public gFuncionariosQueue	As Integer

'Abre Base de dados
Public Sub OpenDB(dbname As DB_TYPE, Optional strPortNumber As String)

Select Case dbname
Case DB_BaseDadosA
	'Call cnBaseDadosA
Case DB_BaseDadosB
	'Call cnBaseDadosB
Case DB_BaseDadosC
	'Call cnBaseDadosC
Case DB_Facturacao
	If gFacturacaoQueue = 0 Then
		Set cndbFacturacao = New Connection
            sDBPath = gdbFacturacao
            cndbFacturacao.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                                              "Data Source=" & sDBPath & _
                                              ";Persist Security Info=False;"
            cndbFacturacao.Open
	End If
	gFacturacaoQueue = gFacturacaoQueue + 1
End Select

End Sub


Public Sub CloseDB(dbname As DB_TYPE)
Select Case dbname
	Case DB_BaseDadosA
		'Call cnBaseDadosA
	Case DB_BaseDadosB
		'Call cnBaseDadosB
	Case DB_BaseDadosC
		'Call cnBaseDadosC
	Case DB_Facturacao
		gFacturacaoQueue = gFacturacaoQueue - 1
		If gFacturacaoQueue <= 0 Then
			cndbFacturacao.Close
			Set cndbFacturacao = Nothing
			gFacturacaoQueue = 0
		End If
End Select

End Sub

Para abrir uma determinada base de dados dentro do projecto, num qualquer form é so fazer:

Private Sub subGetAccountData()
Dim rsRecordset	As New Recordset     ' Function: Recordsets
Dim strSql		As String            ' Function: SQL query

Call OpenDB(DB_Facturacao, strPortNumber)

strSql = "SELECT * FROM tblTabela WHERE fldCampo='bla'"
rsRecordset.CursorLocation = adUseClient
rsRecordset.Open strSql, cndbFacturacao, adOpenStatic, adLockReadOnly

Do While Not rsRecordset.EOF
code+code+code
rsRecordset.MoveNext
Loop

rsRecordset.close
set rsRecordset = nothing

Call CloseDB(DB_Facturacao)
End Sub

Espero nao ter complicado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

LOL,

@YoungCoder,

perguntei se era VB6 ou .NET e respondi para .NET.

Em .NET tens de declarar como Shared mas em VB6 não é preciso nada disso. No entanto a utilização de variáveis globais deve ser feito em modulos(é para isso que eles existem) e as classes são mais destinadas a oop.

Desculpa radamanto e obrigado YoungCoder pela correcção  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora