MODULO - BANCO DE DADOS
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
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
Eu não vi a seguinte instrução :
data1.recordsource = "select * from minhatabela "
data1.recordsource = "select * from minhatabela "
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?
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?
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
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
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.
• 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 " )
é 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 " )
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.
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