MODULO - BANCO DE DADOS

USUARIO.EXCLUIDOS 29/05/2005 23:12:39
#85830
Olá para todos.

Eu estou com um probleminha aqui em um projeto que estou desenvolvendo em VB para gerenciamento de escolas, com o módulo. Como o sistema é um pouco grande, e possui diversas tabelas de banco de dados, tivemos que declarar o banco de dados através do módulo e do form load de cada formulário. Para isso, abrimos um arquivos .txt novo, colocamos o caminho para banco de dados nele, e o salvamos na mesma pasta onde se encontra os outros arquivos relativos ao sistema.
Nomeamos esse arquivo texto como "gestão.txt" e dentro dele colocamos:

C:\Documents and Settings\Carlos Strazzer\Desktop\Projeto Final\Bancos de Dados\banco30.mdb

Feito isso, abrimos um módulo dentro do projeto, e colocamos o seguinte:

Código:
Option Explicit
Public VBaseDados As String

Public Sub main()
Dim textline As String
If Dir(App.Path & "\gestao.txt") = "" Then
MsgBox "Arquivo de inacialização não encontrado.", vbInformation
End
End If
Open App.Path & "\gestao.txt" For Input As #1
Line Input #1, textline
Close #1
VBaseDados = textline
frmSplash.Show
End Sub


Feito isso, eu fui no "Form Load" de cada formulário e coloquei o seguinte:

Código:
Data1.DatabaseName = VBaseDados
Data1.Refresh


Para cada objeto Data pertencente ao formulário eu colocava isso. Supondo que em outro formulário eu tenha dois objetos "Data", eu coloco o seguinte:

Código:
Data1.DatabaseName = VBaseDados
Data1.Refresh
Data2.DatabaseName = VBaseDados
Data2.Refresh


O problema acontece quando rodo o programa e tento adicionar algo ao banco de dados, com a seguinte linha: "Data1.Recordset.Addnew", dá pau exibindo o erro "The action was cancelled by an associated object".

Alguém pode me dizer onde eu estou errando? Se é esse mesmo o procedimento para declaração do banco de dados? Pois isso facilitaria bastante a minha vida, porque é realmente trabalhoso ter que ir em todos os objetos Data e modificar o endereço da Banco de Dados, todas as vezes que modificações pequenas são efetuadas neste.

Agradeço desde já qualquer ajuda.

[ ]'s

WEBMASTER 29/05/2005 23:26:32
#85832
Eu não vi a seguinte instrução :


data1.recordsource = "select * from minhatabela "
USUARIO.EXCLUIDOS 29/05/2005 23:41:30
#85834
Eu estou fazendo tudo através das propriedades do próprio data e isto inclui o RecordSource.
Um amigo meu me mostrou um projeto dele, e ele fez exatamente assim e estava funcionando... Será que não tem algum procedimento a mais a ser feito?

FABIO.ALEXANDRE 29/05/2005 23:50:22
#85835
BOM ,
ADICIONA UM MODULO NO SEU PROJETO

CRIA UM SUB MAIN + OU - ASSIM

Public DB1 As Database 'VARIAVEL DO BANCO

Public Sub Main()
'FAB 26nov01

Set DB1 = OpenDatabase(App.Path & "\..\Banco\Controle.mdb", False,
False, ";PWD=" & glb_Senha)

END SUB



Public Function fcDB_OpenRecordSet(ByVal sSQL As String) As Recordset
'FAB 26nov01
On Error GoTo erro_

Set fcDB_OpenRecordSet = DB1.OpenRecordset(sSQL)

Exit Function
erro_:
MsgBox Err.Number & ", " & Err.Description, vbCritical, "fcDB_OpenRecordSet"
End Function

NO "Form Load" de cada formulário e coloquei o seguinte:

DIM RS AS RECORDSET

SET RS=fcDB_OpenRecordSet("SELECT * FROM TABELA " )
SET DATA1.RECORDSET=RS
END IF

ESPERO TER AJUDADO
USUARIO.EXCLUIDOS 05/06/2005 01:24:27
#87044

Valew pela ajuda cara, mais será que você poderia especificar mais? Por exemplo, essa linha
Public DB1 As Database 'VARIAVEL DO BANCO

vai no General Declarations do Módulo?

E o resto, basta copiar e colar no no corpo do Módulo:

Public Sub Main()
'FAB 26nov01

Set DB1 = OpenDatabase(App.Path & "\..\Banco\Controle.mdb", False,
False, ";PWD=" & glb_Senha)

END SUB



Public Function fcDB_OpenRecordSet(ByVal sSQL As String) As Recordset
'FAB 26nov01
On Error GoTo erro_

Set fcDB_OpenRecordSet = DB1.OpenRecordset(sSQL)

Exit Function
erro_:
MsgBox Err.Number & ", " & Err.Description, vbCritical, "fcDB_OpenRecordSet"
End Function

NO "Form Load" de cada formulário e coloquei o seguinte:

DIM RS AS RECORDSET

SET RS=fcDB_OpenRecordSet("SELECT * FROM TABELA " )
SET DATA1.RECORDSET=RS
END IF

Ou tenho que fazer algum outro procedimento?

Novamente agradeço e aguardo respostas.


FABIO.ALEXANDRE 05/06/2005 12:34:31
#87083
• ESSA VARIàVEL VC DECLARA NO MODULO PARA Q TODO O PROJETO ENNXERGUE ELA
é A VARIAVEL Q CARREGA A SUA DATA BASE
Public DB1 As Database

• TODAS AS FUNÇOES C DECLARA NUM MODULO

VEJA ESSE EXMPLO USANDO EM UM FORM COM GRID

PRIVATE SUB FORM_LOAD()

DIM RS AS RECORDSET

SET RS=fcDB_OpenRecordSet("SELECT * FROM TABELA " )
SET DATA1.RECORDSET=RS

END IF
TODA VE Q VC PRECISAR UM RECORDSET C PODE FAZER COM A FUNÇÃO ABAIXAO

DIM RS AS RECORDSET

SET RS=fcDB_OpenRecordSet("SELECT * FROM TABELA " )
USUARIO.EXCLUIDOS 05/06/2005 15:22:44
#87119

Ok, eu fiz o seguinte:

- No General Declarations do módulo, eu coloquei: Public DB1 As Database

- Abaixo do General Declarations eu coloquei:

Public Sub Main()
'FAB 26nov01

Set DB1 = OpenDatabase(App.Path & "banco30.mdb", False, False, ";PWD=" & glb_Senha)

End Sub

- E abaixo isso aqui:

Public Function fcDB_OpenRecordSet(ByVal sSQL As String) As Recordset
'FAB 26nov01
On Error GoTo erro_

Set fcDB_OpenRecordSet = DB1.OpenRecordset(sSQL)

Exit Function
erro_:
MsgBox Err.Number & ", " & Err.Description, vbCritical, "fcDB_OpenRecordSet"
End Function

- Fui no Form Load de um dos formulários para testar e coloquei o que você me falou:

Dim RS As Recordset
Set RS = fcDB_OpenRecordSet("SELECT * cadprofessores ")
Set Data1.Recordset = RS

Lembrando que tive que retirar um End If, porque da forma que você escreveu ficaria assim:

DIM RS AS RECORDSET

SET RS=fcDB_OpenRecordSet("SELECT * FROM TABELA " )
SET DATA1.RECORDSET=RS
END IF 'Dà ERRO NESSE ENDIF PORQUE NÃO TEM NENHUM IF ACIMA.

Bom feito isso, eu retirei o endereço do banco de dados no Data1 desse formulário no Database Name e tentei rodar o programa, porém, quando eu entro nesse formulário, é exibido o seguinte erro em forma de msgbox: "91, Object variable or with block variable not set" e o título dessa msgbox é "FcDB_OpenRecordset". Quando eu clico OK, o formulário aparece, mas quando eu vou dar um "Novo" que seria o comando "Data1.recordset.addnew" dá esse mesmo erro 91, só que agora com o título "Microsoft Visual Basic" (erro em tempo de execução).

Tem idéia do que possa ser?

Obrigado.

USUARIO.EXCLUIDOS 05/06/2005 18:38:23
#87154

Consegui resolver aqui o problema : ). Eu tinha esquecido de colocar para o projeto iniciar do Sub Main. Não riam!

Valew mesmo pela ajuda!
Tópico encerrado , respostas não são mais permitidas