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

O Que Há De Errado Nesse Código Simples?


brunohjoia

Pergunta

Olá gente... Estou usando o código abaixo para adicionar à uma list os resultados da consulta q a rotina faz... Mas quando eu executo a rotina, aparece um erro dizendo "Compile Error - Expected Function or Variable", e aponta que o erro está no ".FindNext". O interessante é que se eu tiro o "resultado =" de antes do resto da linha de comando, não aparece o tal erro.

Código:

Data3.Recordset.MoveFirst
       While Data3.Recordset.EOF = False
        resultado = Data3.Recordset.FindNext("nomeproduto LIKE '*") & nome & "*'"
        FrmConsulta.List1.AddItem resultado
        Data3.Recordset.MoveNext
       Wend
       FrmConsulta.Show

Alguém poderia dar uma sugestão para resolver o problema?

Obrigado!!

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

você já tento tirar o parenteses?!?!

resultado = Data3.Recordset.FindNext("nomeproduto LIKE '*" & nome & "*')"

Tenta isso talvez de certo, se você falo q quando tira isso não da o erro talvez seja na forma que você screveu!!

T+

Pilantra

Link para o comentário
Compartilhar em outros sites

  • 0

Senta que lá vem história!!!

Oi, obrigado pela ajuda cara, mas eu descobri qual era o erro: Com o código que eu estava usando, o programa estava tentando armazenar numa variável o resultado de uma busca, ou seja, um registro inteiro, o que é impossível!!! Apenas é possível armazenar o conteúdo de um campo e não o registro inteiro, não é verdade? Então pensei na possibilidade de fazer uma busca e, logo depois, adicionar o conteúdo de um dos campos do registro que foi encontrado na busca (no caso nomeproduto), para depois adicioná-lo na list. Então usei o seguinte código:

       nome = txtnome.text
       FrmVendas.Data3.Recordset.MoveFirst
       While FrmVendas.Data3.Recordset.EOF = False
        FrmVendas.Data3.Recordset.FindNext "nomeproduto Like '*" & nome & "*'"
        FrmConsulta.List1.AddItem FrmVendas.Data3.Recordset!nomeproduto
        FrmVendas.Data3.Recordset.MoveNext
       Wend
       FrmConsulta.Show

Foi aí que eu encontrei outro problema. Na teoria é perfeito, mas na prática não... Perceba:

O meu banco de dados tem o seguintes registros:

1 - Cigarro

2 - Gibi Turma da Monica

3 - Revista Veja

4 - Revista Istoe

5 - Coca Cola

6 - Bilhete CPTM

7 - Bala Butter

8 - Ruffles30g

E quando eu procuro, por exemplo, um registro que tenha a letra "c", pelo código ele deveria encontrar os registros 1, 2, 5 e 6, ao passo que na list aparecem os itens2, 5, 6, 7 e 8, ou seja, ele não "encontra" o primeiro registro e ainda exibe resultados que não deveriam aparecer.

A minha pergunta agora é simples: Alguém tem alguma sugestão? tongue.gif

Link para o comentário
Compartilhar em outros sites

  • 0
Senta que lá vem história!!!

Oi, obrigado pela ajuda cara, mas eu descobri qual era o erro: Com o código que eu estava usando, o programa estava tentando armazenar numa variável o resultado de uma busca, ou seja, um registro inteiro, o que é impossível!!! Apenas é possível armazenar o conteúdo de um campo e não o registro inteiro, não é verdade? Então pensei na possibilidade de fazer uma busca e, logo depois, adicionar o conteúdo de um dos campos do registro que foi encontrado na busca (no caso nomeproduto), para depois adicioná-lo na list. Então usei o seguinte código:

       nome = txtnome.text
       FrmVendas.Data3.Recordset.MoveFirst
       While FrmVendas.Data3.Recordset.EOF = False
        FrmVendas.Data3.Recordset.FindNext "nomeproduto Like '*" & nome & "*'"
        FrmConsulta.List1.AddItem FrmVendas.Data3.Recordset!nomeproduto
        FrmVendas.Data3.Recordset.MoveNext
       Wend
       FrmConsulta.Show

Foi aí que eu encontrei outro problema. Na teoria é perfeito, mas na prática não... Perceba:

O meu banco de dados tem o seguintes registros:

1 - Cigarro

2 - Gibi Turma da Monica

3 - Revista Veja

4 - Revista Istoe

5 - Coca Cola

6 - Bilhete CPTM

7 - Bala Butter

8 - Ruffles30g

E quando eu procuro, por exemplo, um registro que tenha a letra "c", pelo código ele deveria encontrar os registros 1, 2, 5 e 6, ao passo que na list aparecem os itens2, 5, 6, 7 e 8, ou seja, ele não "encontra" o primeiro registro e ainda exibe resultados que não deveriam aparecer.

A minha pergunta agora é simples: Alguém tem alguma sugestão? tongue.gif

Por que não abrir a tabela *somente* com os dados que você precisa? O mesmo critério que você está usando no FindNext poderia ser incluído em uma SQL completa, na abertura da tabela. Outra possibilidade é usar a propriedade Filter e deixar, da mesma maneira que ao abrir, o recordset somente com os dados que interessam.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Não, você não precisa criar outra tabela. Um recordset é como se fosse uma tabela virtual (que só existe na memória). No caso, o que você quer poderia ser feito da seguinte maneira:

    nome = txtnome.text
    FrmVendas.Data3.RecordSource = "SELECT * FROM tabela WHERE nomeproduto LIKE '*" & nome & "*'"
    FrmVendas.Data3.Refresh
    Do While Not FrmVendas.Data3.Recordset.EOF
        FrmConsulta.List1.AddItem FrmVendas.Data3.Recordset!nomeproduto
        FrmVendas.Data3.Recordset.MoveNext
    Loop
    FrmConsulta.Show

Sacou? wink.gif

Abraços,

Graymalkin

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...