Ir para conteúdo
Fórum Script Brasil
  • 0

Duvida com consulta


new_rayderss

Pergunta

Essa ta sinistra... :wacko: Tentei vários exemplos que vi por aí. mas não consegui adaptar para o meu projeto e pior não consegui nem entender como funciona essa estória de consulta direito, por isso estou aqui para pedir ajuda.

Bom eu estou usando um DBGrid para mostrar os resultados e um controle Data para conectar o banco de dados.

Pois bem, a busca funcionara através do código do cliente, que pode ter diversos animais. Na busca como padrão vem marcado Todos mas pode marcar o clubinho ou simples, que são relacionados aos animais. Então se marco clubinho só ira aparecer os animais que pertencem a categoria clubinho.

Bom o meu pedido de ajuda, é que como posso fazer a seleção de resultados para cada opção.

ex: Marquei Todos aí aparece o(s) animais do cliente cujo código digitei.

ex2: Marquei Clubinho aí aparece o(s) animais do cliente cujo código digitei. Sendo que só pode ser o da categoria clubinho, ou seja, caso o cliente tenha outro animal no simples esse não aparece.

ex3: Marquei Simples a mesma idéia acima só que só terão os animais da categoria simples.

Espero ter explicado direitinho e clamo pela ajuda de vocês amigos!! ^^

Amostra do formulário de busca:

consul-1.png

Editado por new_rayderss
Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

ai a gente costuma usar o filter ou refazer todo o select.

tipo, o RecordSet tem uma propriedade Filter q você pode passar o filtro por string, q seria como a clausula Where de uma query.

ex2: Marquei Clubinho aí aparece o(s) animais do cliente cujo código digitei. Sendo que só pode ser o da categoria clubinho, ou seja, caso o cliente tenha outro animal no simples esse não aparece.

exemplo, esse aqui seleciona td q for clubinho:

Data1.RecordSet.Filter = "Tipo = 'Clubinho'"
e esse aqui seleciona com a os dois filtros, ou seja vai procurar esse codigo desde q esteja no clubinho:
Data1.RecordSet.Filter = "Tipo = 'Clubinho' And Codigo = 9999"
note q Tipo e Codigo são os nomes do campo q eu passei de exemplo, você tem q mudar pros nomes da sua tabela de verdade.
ex3: Marquei Simples a mesma idéia acima só que só terão os animais da categoria simples.
mesma coisa de cima, mas ai você pega so o q for simples. exemplo:
Data1.RecordSet.Filter = "Tipo = 'Simples' And Codigo = 9999"
ex: Marquei Todos aí aparece o(s) animais do cliente cujo código digitei.
como não tem diferenca a categoria, você pega só pelo codigo, exemplo:
Data1.RecordSet.Filter = "Codigo = 9999"
e se não me engano pra limpar o filtro (mostrar todos os registros do data), você passa uma string em branco:
Data1.RecordSet.Filter = ""

ai o esquema é so você montar a string de acordo com as opcoes q o cara escolher.

Link para o comentário
Compartilhar em outros sites

  • 0

aaaa é esse datacontrol, joga fora esse negocio q é muito ruim!!!

zuera hahah mas tipo posta o codigo como você ta fazendo pra carregar os dados no grid, pra ver se eu descubro o problema.

mas tipo os nomes dos campos tem q ser igual ta no banco. exemplo, o seu campo codigo chama "Código do Cliente". mas a query não aceita campo com espacos, você tem q por entre [ ] pra ele identificar. exemplo:

Data1.RecordSet.Filter = "[Código do Cliente] = 9999"
tenta fazer assim e veja se o erro para. se não posta o codigo do grid.
Bom não entendi a idéia da string. :P
string é uma sequencia de caracter, td q tiver entre aspa na linguagme é uma string. no caso eu quis dizer pra você montar a string de filtro de acordo com as opcoes. exemplo:
Dim sql As String

sql = "Codigo = " & txtCodigo.Text 'Faz o filtro por código
If optClubinho.Value = True Then
    sql = sql & " And Tipo = 'Clubinho'" 'Se tiver selecionado clubinho, adiciona no filtro
ElseIf optSimples.Value = True Then
    sql = sql & " And Tipo = 'Simples'" 'Se tiver selecionado simples, adiciona no filtro
End If

Data1.Recordset.Filter = sql 'Aqui seta o filtro[/code]

Link para o comentário
Compartilhar em outros sites

  • 0

programação do form é isso só

Private Sub Form_Load()
Data1.DatabaseName = App.Path & "\BD\db2.mdb"
Data1.RecordSource = "Animais"
Data1.RecordsetType = 0
centraliza Me
End Sub

Private Sub OptClub_Click()
Data1.Recordset.Filter = "Grupo = 'Clubinho'"
End Sub

Private Sub optSimp_Click()
Data1.Recordset.Filter = "Grupo = 'Simples'"
End Sub

Private Sub OptTodos_Click()
Data1.Recordset.Filter = ""
End Sub

Private Sub SairCon_Click()
Unload Me
End Sub

e usei as propriedades do dbgrid para aparecer os valores.

E quanto ao código do cliente eu nem tinha add ainda e eu estou usando assim o 'CodigoDoCliente' no banco de dados.

E em relação esse codigo é para add aonde? e para o código do cliente tem que fazer uma variável para receber o valor?

Edit: http://www.4shared.com/file/68536079/a0e15...Final_-_RD.html << caso queira ver qualquer coisa, atualizei.

Editado por new_rayderss
Link para o comentário
Compartilhar em outros sites

  • 0

então, descobri aqui, pra poder dar filter no data1, você tem q abrir o recordset com tipo 1 e não 0. aqui:

Data1.RecordsetType = 1
e então, você teria q atualizar o recordset a cada vez. a ultima linha aqui:
Data1.Recordset.Filter = "Grupo = 'Simples'"
Set Data1.Recordset = Data1.Recordset.OpenRecordset[/code] só o problema é q o filtro é cumulativo (exemplo, você filtra no simples e depois quando for filtrar por clubinho, ele vai fazer o filtro por cima do filtro do ), não sei se, abrindo o data assim, você tem como driblar isso. veja se você descobre alguma coisa ai, senao o otro jeito q eu sei q você faria seria abrir o recordset passando a query sql. ai isso é meio diferente do q você tem feito, mas funciona. assim: você declara separado os objetos database e recordset tipo assim:
[code]Dim db As Database
Dim rs As Recordset
e ai depois você carrega o recordset no data:
Private Sub Form_Load()
    Set db = OpenDatabase(App.Path & "\BD\db2.mdb")
    Set rs = db.OpenRecordset("Select * From Animais")
    Set Data1.Recordset = rs

    centraliza Me
End Sub[/code] e ai em cada filtro, você reabre o botao passando o filtro. exemplo:
[code]Private Sub OptClub_Click()
    Set rs = db.OpenRecordset("Select * From Animais Where Grupo = 'Clubinho'")
    Set Data1.Recordset = rs
End Sub

a chave no codigo de cima é o Where. ele vai fazer o filtro.

E em relação esse codigo é para add aonde? e para o código do cliente tem que fazer uma variável para receber o valor?

então, acho q o melhor é em vez de fazer o filtro em cada evento clique, você faz uma sub separada só para o filtro. e no clique dos options, ou na alteracao do codigo do cliente você chama essa mesma sub. ai a sub testaria cada opcao e monta a string do select.

não tem q fazer necessariamente a variavel, mas fica muito mais facil, veja se você entendeu o codigo, qualquer coisa pergunta.

Link para o comentário
Compartilhar em outros sites

  • 0

kuroi consegui fazer a seleção usando as opções.. veja como fiz

Private Sub Form_Load()
Data1.DatabaseName = App.Path & "\BD\db2.mdb"
Data1.RecordSource = "Animais"
Data1.RecordsetType = 1
centraliza Me
End Sub

Private Sub txtCodCli_Change()
Data1.Refresh
If OptTodos = True Then
Data1.Recordset.Filter = "CodigoDoCliente = '"
Set Data1.Recordset = Data1.Recordset.OpenRecordset
ElseIf OptClub = True Then
Data1.Recordset.Filter = "Grupo = 'Clubinho'" And "CodigoDoCliente = '"
Set Data1.Recordset = Data1.Recordset.OpenRecordset
ElseIf OptSimp = True Then
Data1.Recordset.Filter = "Grupo = 'Simples'" And "CodigoDoCliente = '"
Set Data1.Recordset = Data1.Recordset.OpenRecordset
Else
Data1.Recordset.Close
End If
End Sub

Private Sub OptClub_Click()
Data1.Refresh
If OptClub = True Then
Data1.Recordset.Filter = "Grupo = 'Clubinho'"
Set Data1.Recordset = Data1.Recordset.OpenRecordset
Else
Data1.Recordset.Close
End If
End Sub

Private Sub optSimp_Click()
Data1.Refresh
If OptSimp = True Then
Data1.Recordset.Filter = "Grupo = 'Simples'"
Set Data1.Recordset = Data1.Recordset.OpenRecordset
Else
Data1.Recordset.Close
End If
End Sub

Private Sub OptTodos_Click()
Data1.Refresh
If OptTodos = True Then
Data1.Recordset.Filter = ""
Set Data1.Recordset = Data1.Recordset.OpenRecordset
Else
Data1.Recordset.Close
End If
End Sub

Private Sub SairCon_Click()
Unload Me
End Sub

Public Sub centraliza(f As Form)
   Dim TopX, TopY As Integer
   TopX = ((MDIForm1.Width - f.Width) / 2) + MDIForm1.Top
   TopY = ((MDIForm1.Height - f.Height) / 2) + MDIForm1.Left
   f.Move TopX, TopY
End Sub

Porém como nada é perfeito :P o filtro por cliente não funciono ainda. Dando esse erro \/

'3075'

"Syntax error in string in query expression 'CodigoDoCliente = ';'.

e não entendi, eu to escrevendo a sintaxe errado né? Ps: o CodigoDoCliente esta determinado no banco de dados como número.

Editado por new_rayderss
Link para o comentário
Compartilhar em outros sites

  • 0
kuroi consegui fazer a seleção usando as opções.. veja como fiz

legal.

Porém como nada é perfeito :P o filtro por cliente não funciono ainda. Dando esse erro \/

'3075'

"Syntax error in string in query expression 'CodigoDoCliente = ';'.

e não entendi, eu to escrevendo a sintaxe errado né? Ps: o CodigoDoCliente esta determinado no banco de dados como número.

ou primero olha como você ta juntando a string. o and tem q fazer parte da string, não é pra ser o operador and do visual basic. assim ó:

Data1.Recordset.Filter = "Grupo = 'Clubinho' And CodigoDoCliente = '"
agora, olha como você ta fazendo com o codigo. o q é pra ser aquele '?? se você for abri a aspa tem q fechar. mas se o codigo é numero você não pode passar aspa em branco. normalmente os bancos nem aceitam com aspa mesmo q for numero, não tenho certeza quanto ao access. você tem q passa algum valor aqui, exemplo:
Data1.Recordset.Filter = "Grupo = 'Clubinho' And CodigoDoCliente = 1"
ou seja, acho q seria tipo isso:
Data1.Recordset.Filter = "Grupo = 'Clubinho' And CodigoDoCliente = " & txtCodCli.Text

mas tem q toma cuidado, caso o cara não digite numero. se vier algum texto vai dar erro, então você tem q validar. pode usar a funcao IsNumeric().

uma dica, não é bom fazer isso no change. tudo bem q o seu banco é pequeno, mas imagina q eu tenho 15000 registro, onde a consulta deve demorar mais, e quero achar o codigo 1234, ai eu digito 1 e tenho q espera ele filtra tudo pra depois poder digitar o 2 e esperar ele fazer toda a selecao de novo e assim por diante.

o legal é você por um botao de busca e podia chamar o clique do botao tb quando apertasse enter, ou pode por tb no validate do txtCodCli.

Link para o comentário
Compartilhar em outros sites

  • 0

Funciono!! Mas fiquei curioso como funcionaria como validate, usaria o cancel? E tipo quando preencho funciono direito, mas caso eu apague para colocar outro nome ele da erro, o validate resolveria ?

Eu usei como lost focus e tb não fico ruim quanto a ter 15000 :P

E obrigado pela força amigo!!

Link para o comentário
Compartilhar em outros sites

  • 0
Funciono!! Mas fiquei curioso como funcionaria como validate, usaria o cancel? E tipo quando preencho funciono direito, mas caso eu apague para colocar outro nome ele da erro, o validate resolveria ?

a você pode usar o cancel só se quiser. tipo, custumo fazer a validacao sempre no validate em vez de no lostfocus, mesmo q não for usar o cancel, porque o validate server pra isso mesmo, por isso tem esse nome. e se um dia eu mudar de ideia e resolver por o cancel, já to dentro do validate e é so simplesmente adicionar uma linha.

mas não entendi essa parte do erro q você falou.

Editado por kuroi
Link para o comentário
Compartilhar em outros sites

  • 0

Fala kuroi, desculpa a demora.

Consegui resolver esse problema..

Private Sub txtCodCli_Validate(cancel As Boolean)
Data1.Refresh
If OptTodos = True Then
Data1.Recordset.Filter = "CodigoDoCliente = " & txtCodCli.Text
    If Not txtCodCli = Empty Then
    Set Data1.Recordset = Data1.Recordset.OpenRecordset
    Else
    End If
ElseIf OptClub = True Then
Data1.Recordset.Filter = "Grupo = 'Clubinho' And CodigoDoCliente = " & txtCodCli.Text
    If Not txtCodCli = Empty Then
    Set Data1.Recordset = Data1.Recordset.OpenRecordset
    Else
    End If
ElseIf optSimp = True Then
Data1.Recordset.Filter = "Grupo = 'Simples' And CodigoDoCliente = " & txtCodCli.Text
    If Not txtCodCli = Empty Then
    Set Data1.Recordset = Data1.Recordset.OpenRecordset
    Else
    End If
Else
Data1.Recordset.Close
End If
End Sub
Agora deixa explicar.. o cara pesquiso tal cliente acho legal, aí quis pesquisar outro, logo o cara tem que apagar o campo ou selecionar tudo e colocar tal valor, certo. Bom usando validate fico certinho e não deu erro quando o cara apagava o campo (txtCodCli) para colocar outro valor. Porém um outro erro aconteceu quando o campo perdia o foco ele dava esse erro mesmo que mostrei, aí eu fiz esses if aí para abrir só quando tiver algo digitado e foi certinho. E em relação a digitação só de números eu fiz um módulo para isso.
Private Sub txtCodCli_KeyPress(KeyAscii As Integer)
SoNumeros KeyAscii
End Sub
Então resumindo quando o campo fica vazio aparece os cadastros de determinada opção, esse não estava permitindo isso. Agradeço por ter me ajudado, e espero que as minhas dúvidas sejam úteis não só para mim mas para outras pessoas também. == E para não perder a viagem, eu quero que quando o usuario clicar no Enter ele passe para um outro objeto, porém não está funcionando.
Private Sub Form_KeyPress(KeyAscii As Integer)
 If KeyAscii = vbKeyReturn Then
 SendKeys ("{TAB}")
 KeyAscii = 0
 End If
 End Sub

eu usei isso, e não sei porque não está funcionando sendo que usei em um outro formulário e esta tudo direitinho.

Editado por new_rayderss
Link para o comentário
Compartilhar em outros sites

  • 0

Hehhe foi isso mesmo que esqueci :P vlw!!

==

E tenho uma pergunta não sei se é exatamente relacionado com consulta, caso não seja eu edito aqui e crio o tópico.

Bom a idéia é a seguinte, eu realizo um cadastro de serviço que prestarei ao animal, então eu queria saber como verifico se tal funcionário irá realizar tal serviço naquela hora e dia, sendo que os intervalos de horas é de 1 em 1 hora.

Acho que não tem haver com consulta :P porque eu vou verificar isso na hora que estiver no cadastro de serviço, mas sei lá vai que tem um pouco.

E qual o nome do componente que eu posso usar para colocar a data e hora automaticamente?

Link para o comentário
Compartilhar em outros sites

  • 0
Bom a idéia é a seguinte, eu realizo um cadastro de serviço que prestarei ao animal, então eu queria saber como verifico se tal funcionário irá realizar tal serviço naquela hora e dia, sendo que os intervalos de horas é de 1 em 1 hora.

Acho que não tem haver com consulta :P porque eu vou verificar isso na hora que estiver no cadastro de serviço, mas sei lá vai que tem um pouco.

pra achar o registro la seria sim uma consulta q sendo feita.

tipo, é só fazer com o filter, tipo assim:

Data1.Recordset.Filter = "Data = #2008-12-31 12:00:00#"
ou se você separa data e hora em dois campos, assim:
Data1.Recordset.Filter = "Data = #2008-12-31# And Hora = #12:00:00#"
otra coisa é q tem o between, acho q você não precisa nesse exemplo, mas é bom saber:
Data1.Recordset.Filter = "Data Between #2008-12-01# And #2008-12-31#" 'Todas as datas entre o dia 1 e o dia 31

veja se é isso ai q você quer... se você não quer exatamente filtrar pode usar o metodo pra procurar q nos falamos no otro tópico, FindNext se não me engano ou o Seek.

ou você ta querendo compara com a hora do sistema?? se for é quase a mesma coisa, mas ai você pega a data da funcao Date() e a hora da funcao Time().

E qual o nome do componente que eu posso usar para colocar a data e hora automaticamente?

colocar data e hora automaticamente onde??

Link para o comentário
Compartilhar em outros sites

  • 0

cadacons.png

tem esse cadastro, aí faço o preenchimento. E quando for gravar ele verifica se aquele funcionário(que sera identificado pelo seu código único) fará um atendimento naquele dia e horario, se ele tiver aquele horário ocupado o sistema avisa para escolher outro.

É isso, só quis reforçar a ideia, só para sanar qualquer tipo de duvida. Irei testar o que você falo ai encima.

E sobre o componente, tem uma caixa texto que possui um icone de calendário junto com ela. Achei que isso seria melhor para o campo.

Editado por new_rayderss
Link para o comentário
Compartilhar em outros sites

  • 0
É isso, só quis reforçar a ideia, só para sanar qualquer tipo de duvida. Irei testar o que você falo ai encima.

ve ai qualquer problema posta.

E sobre o componente, tem uma caixa texto que possui um icone de calendário junto com ela. Achei que isso seria melhor para o campo.

adiciona a ocx Microsoft Windows Common Controls-2 6.0.

la tem o DTPicker e o MonthView q fazem o q você quer, acho q o DTPicker é o melhor.

Link para o comentário
Compartilhar em outros sites

  • 0

Kuroi to meio por fora no que posso fazer

Private Sub cmdGuardar_Click()

If cboServ = "" Then
MsgBox "Informe o serviço que será prestado ao animal", vbOKOnly, "Campo Vazio"
Exit Sub
End If

If dtpData = "" Then
MsgBox "Informe a data que será realizada o serviço", vbOKOnly, "Campo Vazio"
Exit Sub
End If

If cboHora = "" Then
MsgBox "Informe a hora que será realizada o serviço", vbOKOnly, "Campo Vazio"
Exit Sub
End If

If cboBusc = "" Then
MsgBox "Informe se deseja buscar", vbOKOnly, "Campo Vazio"
Exit Sub
End If

If DataConsulta.Recordset.Filter = "Data" & dtpData.Value And "Hora" & cboHora.Text And "CodigoDoProfissional" & txtCodPro.Text > 1 Then
'DataConsulta.Recordset.Filter = "Data" & dtpData.Value And "Hora" & cboHora.Text And "CodigoDoProfissional" & txtCodPro.Text > 1
MsgBox "Profissional já cadastrado"
txtCodPro.Text = ""
Else
.
.
.

tipo eu não sei como ele vai verificar isso?, eu tentei isso mais não está dando certo.

Link para o comentário
Compartilhar em outros sites

  • 0

hum, acho q você não entendeu como funciona o filter. entenda q é uma string q define o filtro.

não sei se você sabe escrever querys. mas o filtro é como a clausula Where de uma query.

mas basicamente o filtro é uma expressao em string. tipo uma expressao assim como as q você usar pra fazer if por exemplo. e quando ela for true, o registro é selecionado. então pra compara o campo com o valor ce tem q usar o operador igual e o and tem q ser dentro da string, pois faz parte da expressao do filtro. assim:

DataConsulta.Recordset.Filter = "Data = #" & dtpData.Value "# And Hora = #" & cboHora.Text & "# And CodigoDoProfissional = " & txtCodPro.Text
e se tiver problema com o formato da data, pode fazer o formato assim:
DataConsulta.Recordset.Filter = "Data = #" & Format(dtpData.Value, "YYYY-MM-DD") "# And Hora = #" & Format(cboHora.Text, "HH:MM") & "# And CodigoDoProfissional = " & txtCodPro.Text
tipo, pra passar data na query é sempre bom usa o formato YYYY-MM-DD, como no exemplo. agora otra coisa, isso aqui não existe:
If DataConsulta.Recordset.Filter = "Data" & dtpData.Value And "Hora" & cboHora.Text And "CodigoDoProfissional" & txtCodPro.Text > 1 Then
ou você seta o filtro ou você compara. você não pode atribuir valor e compara ao mesmo tempo. se você puser o = numa expressao, em vez da atribuicao ele vai fazer comparacao q retorna true o false. e você ta tentando comparar esse retorno (true ou false) pra ver se é maior q 1 o q não tem o minimo sentido. primero você atribui assim:
DataConsulta.Recordset.Filter = "Data = #" & Format(dtpData.Value, "YYYY-MM-DD") "# And Hora = #" & Format(cboHora.Text, "HH:MM") & "# And CodigoDoProfissional = " & txtCodPro.Text
e depois você tem q ver qtos registro foram selecionados. não tenho certeza como é com o objeto data, mas deve ser alguma coisa tipo assim:
If DataConsulta.RecordSet.RecordCount >= 1 Then 
    - Tem registro -
End If[/code]

se não for isso, procura naqueles links do macoratti, qualquer coisa poste.

Link para o comentário
Compartilhar em outros sites

  • 0

esta funcionando a pesquisa, mais ainda não funciono.

DataConsulta.Recordset.Filter = "Data = #" & mskData.Text & "# And Hora = #" & cboHora.Text & "# And CodigoDoProfissional = " & txtCodPro.Text
If DataConsulta.Recordset.RecordCount >= 1 Then
MsgBox "Tem registro"
txtCodPro.Text = ""
txtCodPro.SetFocus
Else
.
.

ele não esta reconhecendo o registro, eu posso digitar qualquer codigo ele fala que existe sem existir.

--

E em relação a DTPicker ele não está registrando a data no banco de dados. Existe algum modo de configura-lo ?

Link para o comentário
Compartilhar em outros sites

  • 0
ele não esta reconhecendo o registro, eu posso digitar qualquer codigo ele fala que existe sem existir.

é você tem q aplicar o filtro no recordset, como você fazia no formulario de busca assim, lembra??

Set Data1.Recordset = Data1.Recordset.OpenRecordset
E em relação a DTPicker ele não está registrando a data no banco de dados. Existe algum modo de configura-lo ?
você diz q você editou os campos DataField e etc, mas ele não ta pegando as datas do banco?? você setou certinho igual fez com os otros campos?? hum ai seila então, acho q o dtpicker talvez só funcione com ado, mas isso pode ser resolvido setando a data na mao, tipo assim:
DTPicker1. Value = Data1.Recordset.Fields(x).Value

onde x é o indice do campo da data na tabela (exemplo, se for o primero campo, passe 0, se for o segundo passe 1, se for o tercero passe 2, etc)

mas o saco é q você teria q fazer isso a cada vez q ele mudasse de registro.

Link para o comentário
Compartilhar em outros sites

  • 0

Poxa as vezes sou muito distraído, foi mal.

Mas não sei porque ele esta implicando com a atualização(update do datacontrol). E no momento eu estou usando o mask para testar o mais importante, porque o dtpicker não esta salvando no banco.

DataConsulta.Recordset.Filter = "Data = #" & mskData.Text & "# And Hora = #" & cboHora.Text & "# And CodigoDoProfissional = " & txtCodPro.Text

Set DataConsulta.Recordset = DataConsulta.Recordset.OpenRecordset

If DataConsulta.Recordset.RecordCount >= 1 Then
MsgBox "Tem registro"
txtCodPro.Text = ""
txtCodPro.SetFocus
Else
DataConsulta.Recordset.Close
End If
Desativar Me
Verificar = 0
Fechado Me
cmdCancelar.Caption = "&Sair"
cmdCancelar.ToolTipText = "Encerra a ação"
'dtpData.Enabled = False
cmdNovo.Enabled = True
cmdGuardar.Enabled = False
cmdEditar.Enabled = True
cmdLocalizar.Enabled = True
cmdExcluir.Enabled = True
DataConsulta.Visible = True
DataConsulta.Recordset.Update

o erro que da..

"'object invalid or no longer set" - 3420

ou se eu tirar DataConsulta.Recordset.Close

"Update or CancelUpdate without addnew or edit" - 3020

Editado por new_rayderss
Link para o comentário
Compartilhar em outros sites

  • 0

é, quando você faz o filtro ele para de aponta pro registro atual, você não vai conseguir atualizar porque ele já não ta mais apontando pro registro q você quer atualizar.

acho q o melhor é você usar dois datas um pra atualizar e o otro pra buscar. ai esse de buscar você nem vincula com controle nenhum e dexa como hidden pro usuario não mexer. você simplesmente carrega ele com os dados e só usa pra buscar, assim o data q vai ta vinculado com o formulario não perde o vinculo.

outra opcao é faze um negocio tipo o q eu falei aqui num post mais pra cima:

ai isso é meio diferente do q você tem feito, mas funciona. assim:

você declara separado os objetos database e recordset tipo assim:

Dim db As Database
Dim rs As Recordset[/code] e ai depois você carrega o recordset no data:
[code]Private Sub Form_Load()
    Set db = OpenDatabase(App.Path & "\BD\db2.mdb")
    Set rs = db.OpenRecordset("Select * From Animais")
    Set Data1.Recordset = rs

    centraliza Me
End Sub
e ai em cada filtro, você reabre o botao passando o filtro. exemplo:
Private Sub OptClub_Click()
    Set rs = db.OpenRecordset("Select * From Animais Where Grupo = 'Clubinho'")
    Set Data1.Recordset = rs
End Sub[/code]

a chave no codigo de cima é o Where. ele vai fazer o filtro.

essa opcao seria melhor, você declara o recordset em vez do controle data. afinal você não vai usar o data, só vai usar o recordset, então você declara só ele (aquele Set Data1.Recordset = rs q ta no codigo acima, você não usaria).

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...