Ir para o conteúdo
Inferi

[Resolvido] Guardar valor de um SELECT

Mensagens Recomendadas

Inferi

Boa tarde, eu tenho um SELECT montado e precisava de guardar os valores numa variável

Neste momento o meu código é o seguinte:

Private Sub dcProjecto_Click()
Query = "SELECT idProjecto, RTRIM(Nome) FROM PavigresSoft..Proj_Projecto (NOLOCK)" & vbCrLf _
& "WHERE Nome LIKE '%" & dcProjecto.Descrição & "%'"

With dcProjecto
	.MaxCol = 2
	.NomeCol(1) = "Código Projecto"
	.NomeCol(2) = "Nome"
	.MostraPesquisa strDSN, Query
	.Texto = .ValorCol(1)
	.Descrição = .ValorCol(2)
	txtNome.Texto = .ValorCol(2)
End With
End Sub

Imaginemos que monto a query da seguinte forma;

Query = "SELECT idProjecto, RTRIM(Nome), Vendedor, País FROM PavigresSoft..Proj_Projecto (NOLOCK)" & vbCrLf _
& "WHERE Nome LIKE '%" & dcProjecto.Descrição & "%'"

Como posso ir buscar o valor do Vendedor e do País?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Gnrtuga

Boas as minhas querys estão de outra maneira, mas eu sou adepto do "desde que funcione está bom", o que não quer dizer que seja o correto ;)

Eu tenho assim:

Dim DBFullName As String
DBFullName = "D:\OFICIOS\naomexer\Dados Autos.mdb"
Dim comando As String
comando = "SELECT * FROM AUTOS_ANTERIORES WHERE Autuante = '" & Ano_Anterior.autuante.Text & "' "
Set cn = CreateObject("ADODB.Connection")
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & DBFullName & ";"
Set rs = CreateObject("ADODB.Recordset")
rs.Open comando, cn, , , adCmdText
If (rs.RecordCount <> 0) Then
i = 0
  Do While Not rs.EOF


   ListBox1.AddItem   
   ListBox1.List(i, 0) = rs.Fields("Tipo_Auto")
     ListBox1.List(i, 1) = rs.Fields("N_Auto")
   ListBox1.List(i, 2) = rs.Fields("Data")
      ListBox1.List(i, 3) = rs.Fields("NIF_Infrator")
      ListBox1.List(i, 4) = rs.Fields("Autuante")
      ListBox1.List(i, 5) = rs.Fields("Destino_Auto")
   i = i + 1
  rs.MoveNext
  Loop

End If
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

Podes adaptar a parte em que eu mando para uma ListBox para uma variável ou caixa de texto.. no fundo o que interessa é a parte do rs.Fields("NomedaTuaColuna")

Boa sorte!


Férias! Estou por aqui: http://maps.google.p...001549&t=h&z=20 (a bulir claro está!)

Nunca mais é verão outra vez.. :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Gnrtuga

Podes.. primeiro precisas de uma textbox (por exemplo) para receber o valor a pesquisar e um event handler tipo CommandButton_Click() para desencadear a pesquisa...

Em vez de fazeres o loop, faz logo:

If (rs.RecordCount <> 0) Then
TextBox1.Text = rs.Fields("NomeDoTeuCampo")
End If

o select podes fazer tipo:

comando = "SELECT * FROM NomeTabela WHERE Vendedor = '" & NomedoTeuForm.NomeDaTextBox.Text & "'" And Pais = '" & NomeForm.PaisTextBox.Text & "'"

Editado por Gnrtuga

Férias! Estou por aqui: http://maps.google.p...001549&t=h&z=20 (a bulir claro está!)

Nunca mais é verão outra vez.. :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Inferi

Peço desculpa pela demora e obrigado pela resposta.

Só consegui consultar agora o tópico.

Já consegui resolver, da mesma forma que tu referiste ao início mas com outra sintaxe.

Vou deixar o código que pode ser útil para alguém.

Private Sub dcProjecto_Validate(Cancel As Boolean)
   Query = "SELECT idProjecto, RTRIM(Nome) FROM PavigresSoft..Proj_Projecto (NOLOCK)" & vbCrLf _
   & "WHERE idProjecto='" & dcProjecto.Texto & "' AND Nome='" & dcProjecto.Descrição & "'"

   dcProjecto.ExecutaValidação strDSN, Query, True, True, , "O Projecto não existe"

   If dcProjecto.ValorNaoValido = True Then
       Cancel = True
       Call Tarefas.Limpar
       dcProjecto.SetFocus
   Else
       Query = "SELECT a.PrevisaoExecucao, a.DataHoraRececao, a.Nome, a.Executado, a.Terceiro, a.Vendedor," & vbCrLf _
       & "a.Pais, a.Endereco, a.Descricao, a.Construtor, a.Arquitecto, a.Categoria, a.OutrInfProd, b.Nome1" & vbCrLf _
       & "FROM PavigresSoft..Proj_Projecto a, Pavigres..Terceiros b (NOLOCK)" & vbCrLf _
       & "WHERE a.idProjecto='" & dcProjecto.Texto & "' AND b.Terceiro='" & dcTerceiroHid.Texto & "'"
       rsRegistos.Open Query, strDSN, adOpenStatic
           txtNome.Texto = rsRegistos("Nome").Value
           fpData.Text = rsRegistos("DataHoraRececao").Value
               If rsRegistos("DataHoraRececao").Value = 1 Then
                   chkExecutado.Value = Checked
               Else
                   chkExecutado.Value = Unchecked
               End If
           fpDataPrevExec.Text = rsRegistos("PrevisaoExecucao").Value
           dcTerceiro.Texto = rsRegistos("Terceiro").Value
           dcTerceiro.Descrição = rsRegistos("Nome1").Value
           dcVendedor.Texto = rsRegistos("Vendedor").Value
           dcPais.Texto = rsRegistos("Pais").Value
           dcCategoria.Texto = rsRegistos("Categoria").Value
           txtEndereco.Texto = rsRegistos("Endereco").Value
           txtConstrutor.Texto = rsRegistos("Construtor").Value
           txtArquitecto.Texto = rsRegistos("Arquitecto").Value
           txtDescricao.Texto = rsRegistos("Descricao").Value
           txtInformacao.Texto = rsRegistos("OutrInfProd").Value
       rsRegistos.Close
       Set rsRegistos = Nothing

   End If

End Sub

Agora encontro-me com outro problema.

Precisava de abrir uma query dentro de outra query neste caso algo como:

Else
       Query = "SELECT a.PrevisaoExecucao, a.DataHoraRececao, a.Nome, a.Executado, a.Terceiro, a.Vendedor," & vbCrLf _
       & "a.Pais, a.Endereco, a.Descricao, a.Construtor, a.Arquitecto, a.Categoria, a.OutrInfProd, b.Nome1" & vbCrLf _
       & "FROM PavigresSoft..Proj_Projecto a, Pavigres..Terceiros b (NOLOCK)" & vbCrLf _
       & "WHERE a.idProjecto='" & dcProjecto.Texto & "' AND b.Terceiro='" & dcTerceiroHid.Texto & "'"
       rsRegistos.Open Query, strDSN, adOpenStatic
           txtNome.Texto = rsRegistos("Nome").Value
           fpData.Text = rsRegistos("DataHoraRececao").Value
               If rsRegistos("DataHoraRececao").Value = 1 Then
                   chkExecutado.Value = Checked
               Else
                   chkExecutado.Value = Unchecked
               End If
           fpDataPrevExec.Text = rsRegistos("PrevisaoExecucao").Value
           dcTerceiro.Texto = rsRegistos("Terceiro").Value
           dcTerceiro.Descrição = rsRegistos("Nome1").Value
           dcVendedor.Texto = rsRegistos("Vendedor").Value
           Query = "SELECT Vendedor, Nome FROM Pavigres..Vendedor WHERE Vendedor = '" & dcVendedor.Texto & "' "
           rsRegistos.Open Query, strDSN, adOpenStatic
                     dcVendedor.Descricao = rsRegistos("Nome").Value
           rsRegistos.Close
           dcPais.Texto = rsRegistos("Pais").Value
           dcCategoria.Texto = rsRegistos("Categoria").Value
           txtEndereco.Texto = rsRegistos("Endereco").Value
           txtConstrutor.Texto = rsRegistos("Construtor").Value
           txtArquitecto.Texto = rsRegistos("Arquitecto").Value
           txtDescricao.Texto = rsRegistos("Descricao").Value
           txtInformacao.Texto = rsRegistos("OutrInfProd").Value
       rsRegistos.Close
       Set rsRegistos = Nothing

Mas ele dá erro na linha

rsRegistos.Open Query, strDSN, adOpenStatic

Diz que não pode abrir um que já esteja aberto, tentei mudar para Query2, mas pelos vistos ele não assumo como variável pois é um argumento interno do VB, como posso fazer isto? Não queria estar a criar campos hiden para gravar todas as variáveis que vêm da base de dados Pavigres

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Gnrtuga

Não sei se será a solução, mas experimenta comentar todos os rsRegistos.Close e Set rsRegistos = Nothing , deixa apenas os últimos... Por exemplo tens 5 queries( mesmo em procedimentos diferentes) ... comentas isto em 4 e deixas a última como está... tenho uma vaga ideia de me ter dado um erro parecido, e se não me engano foi assim que o resolvi...

Editado por Gnrtuga

Férias! Estou por aqui: http://maps.google.p...001549&t=h&z=20 (a bulir claro está!)

Nunca mais é verão outra vez.. :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Gnrtuga

Já experimentaste comentar a linha que te dá erro? Dá-me a impressão que abres duas vezes a conexão, primeiro dentro do else principal (5º linha), e depois dentro do else secundário (18º linha)..

Em principio é mesmo um erro na ligação, só resta descobrir onde é... :)


Férias! Estou por aqui: http://maps.google.p...001549&t=h&z=20 (a bulir claro está!)

Nunca mais é verão outra vez.. :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Inferi

Ora aí está

Query = "SELECT A.PrevisaoExecucao, A.DataHoraRececao, A.Nome, A.Executado, A.Terceiro, A.Vendedor," & vbCrLf _
       & "A.Pais, A.Endereco, A.Descricao, A.Construtor, A.Arquitecto, A.Categoria, A.OutrInfProd," & vbCrLf _
       & "RTRIM(RTRIM(T.Nome1)+' '+RTRIM(T.Nome2)) 'NomeTerceiro', " & vbCrLf _
       & "RTRIM(V.Nome) 'NomeVendedor', " & vbCrLf _
       & "RTRIM(P.Descricao) 'NomePais', " & vbCrLf _
       & "RTRIM(C.Categoria) 'NomeCategoria' " & vbCrLf _
       & "FROM PavigresSoft..Proj_Projecto A (NOLOCK)," & vbCrLf _
       & "pavigres..Terceiros T (NOLOCK)," & vbCrLf _
       & "pavigres..Vendedor V (NOLOCK)," & vbCrLf _
       & "pavigres..Pais P (NOLOCK)," & vbCrLf _
       & "pavigresSoft..Proj_Categoria C (NOLOCK)" & vbCrLf _
       & "WHERE A.Terceiro=T.Terceiro AND A.idProjecto='" & dcProjecto.Texto & "'"

       rsRegistos.Open Query, strDSN, adOpenStatic
           txtNome.Texto = rsRegistos("Nome").Value
           fpData.Text = rsRegistos("DataHoraRececao").Value
               If rsRegistos("DataHoraRececao").Value = 1 Then
                   chkExecutado.Value = Checked
               Else
                   chkExecutado.Value = Unchecked
               End If
           fpDataPrevExec.Text = rsRegistos("PrevisaoExecucao").Value
           dcTerceiro.Texto = rsRegistos("Terceiro").Value
           dcTerceiro.Descrição = rsRegistos("NomeTerceiro").Value
           dcVendedor.Texto = rsRegistos("Vendedor").Value
           dcVendedor.Descrição = rsRegistos("NomeVendedor").Value
           dcPais.Texto = rsRegistos("Pais").Value
           dcPais.Descrição = rsRegistos("NomePais").Value
           dcCategoria.Texto = rsRegistos("Categoria").Value
           dcCategoria.Descrição = rsRegistos("NomeCategoria").Value
           txtEndereco.Texto = rsRegistos("Endereco").Value
           txtConstrutor.Texto = rsRegistos("Construtor").Value
           txtArquitecto.Texto = rsRegistos("Arquitecto").Value
           txtDescricao.Texto = rsRegistos("Descricao").Value
           txtInformacao.Texto = rsRegistos("OutrInfProd").Value
       rsRegistos.Close
       Set rsRegistos = Nothing

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.