ADO ...

USUARIO.EXCLUIDOS 08/03/2005 10:05:09
#71657
Bom eu to querendo cadastrar mas nao vai...!!! ai vai o que to fazendo...

...................................................................................................................
Dim db As ADODB.Connection
Dim rs_banco As ADODB.Recordset

Sub Main() 'SubFunção Principal
Set db = New ADODB.Connection 'Dá valor á variável como nova Conexão ADO
db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\banco.mdb;Persist Security Info=False" 'Acessa Banco de Dados Pelas Palavras de Conexão.. o Jet do Office, o Caminho do banco de dados enfim
End Sub


Private Sub cmdcad_Click()
Set rs_banco = New ADODB.Recordset
rs_banco.LockType = adLockOptimistic
rs_banco.Open "Select * from nome", db, adOpenDynamic

rs_banco.AddNew

rs_banco!nome = txtnome
rs_banco!end = txtend
rs_banco!tel = txttel
rs_banco!sexo = txtsexo
rs_banco!cidade = txtcidade
rs_banco.Update
MsgBox "Fufou"

End Sub

.............................................................................................................

Isso é o que eu to fazendo e ele diz assim :

RUNTIME ERROR '3709'
THE CONNECTION CANNOT BE USED TO PERFORM THIS OPERATIONS. IT IS EITHER CLOSED OR INVALID IN THIS CONTEXT.


Se puderem me ajudar fico grato..!!!1 agradeço desde ja.!!! Obrigado...
THIAGO.CESAR 08/03/2005 10:21:07
#71662
Onde exatamente ocorre o erro. Parece ser no momento da conexão.
Você verificou se a conexão está ocorrendo normalmente? Faça o seguinte teste:

msgbox rs_banco.state
'0 - Não conectou
'1 - Conectou

E tente abrir o recordset de maneira estática:
rs.Open "Select...",db,adOpenStatic,adLockOptimistic
USUARIO.EXCLUIDOS 08/03/2005 11:59:23
#71695
o achologo aqui acha que ou você deveria setar o datafield dos textbox com o nome do campo e o datasource dos textbox com o rs e então addnew e depois update se não utilizar um insert
Private Sub Form_load_Click()
Public db as ADODB.Connection
Public RS_Banco as ADODB.Recordset

Set db = new ADODB.Connection
Set rs_banco = New ADODB.Recordset

db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\banco.mdb;Persist Security Info=False"

rs_banco.Open "Select * from nome", db, adOpenStatic, adOpenDynamic

Set txtnome.datasource = rs_banco
Set txtend.datasource = rs_banco
e assim vai ate colocar em todas as texts(se utilizar array com as texts fica mais facil)

depois
txtnome.datafield = "Nome"
txtend.datafield = "End"
e assim vai ate definir o field para todas as texts
End Sub

Private Sub Incluir_click()
rs_banco.addnew
End Sub

Private Sub Salvar_click
rs_banco.update
End Sub

Ou então como falei utilizar um insert
USUARIO.EXCLUIDOS 08/03/2005 15:33:59
#71750
bom pessoal muito obrigado pela ajuda mas, eu to fazendo em sql fica mais facil... mais isso aqui ta me dando um show que vcs nem imaginam.!!!!

Dim db As ADODB.Connection
Dim rs As ADODB.Recordset

Sub Main() 'SubFunção Principal
Set db = New ADODB.Connection 'Dá valor á variável como nova Conexão ADO
db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\banco.mdb;Persist Security Info=False" 'Acessa Banco de Dados Pelas Palavras de Conexão.. o Jet do Office, o Caminho do banco de dados enfim
End Sub


Private Sub cmdcad_Click()
'Set rs_banco = CreateObject("ADODB.Recordset")
'With rs_banco
Set rs = ADODB.Recordset <----- RECORD

db.Execute ("insert into nome (nome, end , tel , sexo , cidade)values =('" & txtnome.Text & "', '" & txtend.Text & "','" & txttel.Text & "','" & txtsexo.Text & "', '" & txtcidade.Text & "'")

MsgBox "Fufou"
'End With
End Sub

e ele fala que o RECORD é um metodo invalido ...!!!
se puderem me ajudar fico grato..!!!1
THIAGO.CESAR 08/03/2005 15:39:51
#71751
Você já tentou incluir por meio de um "Insert Into" ? Só pra gente saber se tá conectando...
USUARIO.EXCLUIDOS 08/03/2005 16:10:27
#71762
agenlus na sua rotina você colocou
Set rs = ADODB.Recordset
coloque
Set rs = New ADODB.recordset
não manjo muito do insert into, mas você colocou os nomes dos campos depois deu um espação e depois a virgula, coloque o nome do campo depois a virgula e depois o espaço do mesmo jeito para a descrição dos campos ( textcampo.text & ", ") (e não " , ")

db.Execute ("insert into nome (nome, end, tel, sexo, cidade)values =('" & txtnome.Text & ", '" & txtend.Text & ",'" & txttel.Text & ",'" & txtsexo.Text & ", '" & txtcidade.Text & "'")

outro declaro Public e não DIm (para que as declarações estejam visiveis em qualquer comando do seu projeto).
Do jeito que passei não funcionou ou você não quer assim???
USUARIO.EXCLUIDOS 09/03/2005 10:06:55
#71859
Resposta escolhida
Nesta linha:

Set rs = ADODB.Recordset <----- RECORD

Você pretende que <----- RECORD seja um comentário ?

é que parece-me(não juro!) o vb não reconhece o "<" como tal mas sim o " ' ".

Bom, independentemente disso, aí vai um exemplo de como trabalhar:


ADO - Exemplo de como trabalhar com Dados

Public Function ConexaoDados() As Connection

base = PstrCamDados & "\mvdoctab.mdb"
Set dbDados = New ADODB.Connection
With dbDados
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Properties("Data Source") = base
.Properties("Jet OLEDB:Database Password") = "password"
.Open
End With

End Function

Public Function MostrarTodos() As ADODB.Recordset

Set rstMovimentos = New ADODB.Recordset

strSql = "SELECT * FROM tMovimentos"
rstMovimentos.CursorLocation = adUseClient
rstMovimentos.Open strSql, dbDados, adOpenKeyset, adLockReadOnly, adCmdText

Set MostrarTodos = rstMovimentos

Set rstMovimentos = Nothing

End Function


Public Sub Inserir()

On Error Resume Next

strSql = "INSERT INTO tMovimentos (id_movimento,"
strSql = strSql & " codigo,mov_tipo,mov_tipo2,mov_data,ent_num_contr,"
strSql = strSql & " ent_num_ei,ent_num,mov_docref,tipo_pag,not_venda,"
strSql = strSql & " data,cod_util,transfer)VALUES('" & id & "',"
strSql = strSql & " " & cod & " ,'" & movt & "','" & movd & "','" & dat & "'," & entidnc & ","
strSql = strSql & " " & entidne & ", " & entid & ",'" & ref & "','" & tp & "','" & nv & "',"
strSql = strSql & " '" & dat & "','" & ut & "', '" & transf & "')"

dbDados.Execute strSql

Select Case Err.Number
Case 0:

MsgBox "Registo incluído.", vbInformation, "Atenção"
Case -2147217864
MsgBox "Registo excluído por outro utilizador. As alterações feitas não serão salvas.", vbInformation, "Atenção"
Case -2147467259
MsgBox "Registo bloqueado por outro utilizador. O Registo não pode ser incluído. Tente mais tarde." & vbCr, vbExclamation, "Atenção"
Case Else
MsgBox "O Registo não pode ser incluído." + vbCrLf + Err.Description
End Select


End Sub




Public Function ObterCodigo() As String

Dim strCod As String, intMaxCod As Integer

Set rstMovimentos = New ADODB.Recordset

rstMovimentos.CursorLocation = adUseServer
rstMovimentos.Open "SELECT max(id_movimento)from tMovimentos where mid(tmovimentos.id_movimento,1,4)= '" & inicio & "'", dbDados, adOpenKeyset, adLockReadOnly, adCmdText

If IsNull(rstMovimentos.Fields(0)) Then
ant = inicio & "000000"
ObterCodigo = ant + 1
Else
ant = rstMovimentos.Fields(0).Value
ObterCodigo = ant + 1

End If

Set rstMovimentos = Nothing

End Function



Public Sub Alterar()


On Error Resume Next

strSql = "UPDATE tMovimentos SET tMovimentos.mov_tipo='" & movt & "',"
strSql = strSql & "tMovimentos.mov_tipo2='" & movd & "',"
strSql = strSql & "tMovimentos.mov_data = '" & CVDate(dat) & "',"
strSql = strSql & "tMovimentos.ent_num_contr=" & entidnc & ",tMovimentos.ent_num_ei=" & entidne & ","
strSql = strSql & "tMovimentos.ent_num=" & entid & ",tMovimentos.mov_docref ='" & ref & "',"
strSql = strSql & "tMovimentos.tipo_pag='" & tp & "',tMovimentos.not_venda=" & nv & ","
strSql = strSql & "tMovimentos.data= '" & CVDate(datr) & "',"
strSql = strSql & "tMovimentos.cod_util='" & ut & "',"
strSql = strSql & "tMovimentos.transfer='" & transf & "' "
strSql = strSql & "WHERE tMovimentos.id_movimento= '" & id & "' and tMovimentos.codigo=" & cod & " "

dbDados.Execute strSql

Select Case Err.Number
Case 0
MsgBox "Alteração concluída.", vbInformation, "Atenção"
Case -2147217864
MsgBox "Registo excluído por outro utilizador. As alterações feitas não serão salvas.", vbInformation, "Atenção"
Case -2147467259
MsgBox "Registo bloqueado por outro utilizador. As alterações não foram salvas. Tente mais tarde." & vbCr, vbExclamation, "Atenção"
Case Else
MsgBox "O Registo não pode ser alterado." + vbCrLf + Err.Description
End Select


End Sub


Public Function Excluir()

strSql = "DELETE FROM tMovimentos "
strSql = strSql & "WHERE tMOVIMENTOS.id_movimento= '" & id & "' and tMovimentos.codigo=" & cod & ""

On Error Resume Next
dbDados.Execute strSql
Select Case Err.Number
Case 0:
MsgBox "Registo Excluído.", vbInformation, "Atenção"
Case -2147217864
MsgBox "Registo já excluído por outro utilizador.", vbInformation, "Atenção"
Case -2147467259
MsgBox "Registo bloqueado por outro utilizador. Exclusão não permitida. Tente mais tarde." & vbCr, vbExclamation, "Atenção"
Case Else
MsgBox "O Registo não pode ser excluído." + vbCrLf + Err.Description, "Atenção"
End Select

End Function


Public Function ConfirmarRegisto(ByVal strIdentificativo As String, ByVal strCodigo As Long) As Boolean


Set rstMovimentos = New ADODB.Recordset

strSql = "SELECT id_movimento, Codigo FROM tMovimentos"
strSql = strSql & " WHERE tMOVIMENTOS.id_movimento ='" & strIdentificativo & "'"
strSql = strSql & " and tMOVIMENTOS.Codigo = " & strCodigo & ""
rstMovimentos.CursorLocation = adUseClient
rstMovimentos.Open strSql, dbDados, adOpenKeyset, adLockReadOnly, adCmdText

If Not rstMovimentos.EOF Then
ConfirmarRegisto = True
Else
ConfirmarRegisto = False
End If

rstMovimentos.Close

Set rstMovimentos = Nothing

End Function


Public Function Consultar(ByVal strSql As String) As ADODB.Recordset

Set rstMovimentos = New ADODB.Recordset

If strSql = Null Then
strSql = ""
End If

rstMovimentos.CursorLocation = adUseClient
rstMovimentos.Open strSql, dbDados, adOpenKeyset, adLockReadOnly, adCmdText

Set Consultar = rstMovimentos

Set rstMovimentos = Nothing

End Function


Public Function MostrarTodosDetalhe() As Recordset

Set rstMovimentos = New ADODB.Recordset

strSqlD = "SELECT * FROM tMovimentosdet"
rstMovimentos.CursorLocation = adUseClient
rstMovimentos.Open strSqlD, dbDados, adOpenKeyset, adLockReadOnly, adCmdText

Set MostrarTodosDetalhe = rstMovimentos

Set rstMovimentos = Nothing

End Function





Public Sub ExcluirTodosDetalhe()

strSqlD = "DELETE FROM tMovimentosdet "
strSqlD = strSqlD & "WHERE tMOVIMENTOSdet.id_movimento= '" & id & "' and tMovimentosdet.codigo=" & cod & ""

On Error Resume Next
dbDados.Execute strSqlD
Select Case Err.Number
Case 0:
MsgBox "Registo Excluído.", vbInformation, "Atenção"
Case -2147217864
MsgBox "Registo já excluído por outro utilizador.", vbInformation, "Atenção"
Case -2147467259
MsgBox "Registo bloqueado por outro utilizador. Exclusão não permitstrIdentificativoa. Tente mais tarde." & vbCr, vbExclamation, "Atenção"
Case Else
MsgBox "O Registo não pode ser excluído." + vbCrLf + Err.Description, "Atenção"
End Select


End Sub


Public Sub ExcluirRegistoDetalhe()


On Error Resume Next

strSqlD = "DELETE FROM TMovimentosDet WHERE codigo = " & cod & " AND id_movimento = '" & id & "'"

dbDados.Execute strSqlD

Select Case Err.Number
Case 0:

Case -2147217864
MsgBox "Registo já excluído por outro utilizador.", vbInformation, "Atenção"
Case -2147467259
MsgBox "Registo bloqueado por outro utilizador. Exclusão não permitida. Tente mais tarde." & vbCr, vbExclamation, "Atenção"
Case Else
MsgBox "O registo não pode ser excluído." + vbCrLf + Err.Description, "Atenção"
End Select


End Sub



Public Sub InserirDetalhe()

On Error Resume Next

strSqlD = "INSERT INTO TMovimentosDet (mov_tipo, art_codig, serie_id, serie_ini, serie_fim, codigo, id_movimento, serie_contad,"
strSqlD = strSqlD & "art_quant, art_valunit, valor ) VALUES ("
strSqlD = strSqlD & "'" & movt & "', '" & art & "','" & ser
strSqlD = strSqlD & "', " & ini & ", " & fim & ", " & cod
strSqlD = strSqlD & " , '" & id & "', " & contad
strSqlD = strSqlD & ", " & quant & ", " & valunit & ", " & val & ")"
dbDados.Execute strSqlD

Select Case Err.Number

Case 0
Exit Sub
Case -2147217864
MsgBox "Registo excluído por outro utilizador. As alterações feitas não serão salvas.", vbInformation, "Atenção"
Case -2147467259
MsgBox "Registo bloqueado por outro utilizador. O registo não pode ser incluído. Tente mais tarde." & vbCr, vbExclamation, "Atenção"
Case Else
MsgBox "O registo não pode ser incluído." + vbCrLf + Err.Description
End Select


End Sub



Public Function ConsultarDetalhe(ByVal strSqlD As String) As Recordset

Set rstMovimentos = New ADODB.Recordset

If strSql = Null Then
strSql = ""
End If


rstMovimentos.CursorLocation = adUseClient
rstMovimentos.Open strSql & strSql, dbDados, adOpenKeyset, adLockReadOnly, adCmdText

Set ConsultarDetalhe = rstMovimentos

Set rstMovimentos = Nothing

End Function





USUARIO.EXCLUIDOS 09/03/2005 13:45:40
#71927
bom pessoal valeu pela ajuda.. vou ver aqui se copnsego..!! william... me desculpe.!1 mais eu tava fazendo errado..!!1...!!! ... mas muito obrigado assim mesmo.. me ajudou muito..!!!! e valeu joão..!!!! ... a cara quando eu coloquei o "<" la foi indicando o prolbre que tava dando.!1 ele mantia selecionado... nao era comentario nao... heheheheh .... mas obrigado do memso jeito ........bom depois eu posto mais aqui se eu tiver alguma duvida..!!!! ,... obrigadao.!!1 fui
USUARIO.EXCLUIDOS 11/03/2005 09:15:55
#72272
Bom Pessoal Olha eu qui anovamente.!!!! João gostaria de saber como vc definiu as declarações se foi no form ou em um modulo.!!! gostaria que vc desse um exenplo .. dependendo de como vc fez..!!!! ... do exeplo que vc postou aqui...!!! bom se alguem souber .. e poder me ajudar.... agradeço... muito obrigado..!!!! .... Fui;...
USUARIO.EXCLUIDOS 11/03/2005 10:43:26
#72294
Todas as minhas declarações sobre variáveis a utilizar durante todo o programa são feitas num módulo .bas por acaso chamado sempre "VARIAVEIS_GLOBAIS".

O caso que lhe dei foi um exemplo que elaborei, por acaso baseado numa antiga aplicação onde trabalhava com classes, mas aqui vai um outro exemplo de descrição de varáveis, por acaso em DAO, que ainda hoje utlizo em access, mas que serve perfeitamente como exemplo:

Option Explicit

'Variáveis Globais

'Local dos Ficheiros
Public PstrCamDados As String
Public PstrCamFotos As String

'Caminho para a(s) Base(s) de Dados
Public strdb As Variant

'Caminho para o(s) Ficheiro(s) de Texto
Public strfich As Variant
'Base(s) de Dados
Public dbs As Database

'Areas de trabalho
Public wsp As Workspace

'Recordsets
Public rst As Recordset
Public rst1 As Recordset

'Tabelas

Public tdf As TableDef

'Querys
Public q As QueryDef

'SQLs
Public strSQL As String
Public strSQL1 As String

'Relatórios
Public rep As Report
Public stDocName As String

'Diversas
Public compa As String
Public recib As String
Public assoc As Long
Public agr As Byte
Public pag As Byte
Public nid As Long
Public strArquivo As String
Public strLinha As String
Public datai As Date
Public dataf As Date
Public I As Integer
Public inic As Variant
Public nome As Integer
Public num As Integer
Public cwhere As String
Public cwhere1 As String
Public cwhere0 As String
Public lmax As Long
Public lok As Long
Public ant As Long
Public act As Long
Public nor As String
Public sel As String
Public stLinkCriteria As String

USUARIO.EXCLUIDOS 11/03/2005 11:33:11
#72308
Obrigadao João Mateus... eu consegui fazer rodar uma aprte do programa...!!! bom agora eu to em duvida a uma coisa..!!!! em dao pra pular a linha de uma msgbox é "" .. & Chr(13) & .."" ... certo?..... eu gostaria de saber como faço isso em ADO..!!! obrigadao fui..!!!!
Página 1 de 2 [20 registro(s)]
Tópico encerrado , respostas não são mais permitidas