• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

set#1

[RESOLVIDO] Guardar valor da Combo box

13 mensagens neste tópico

Saudacoes.

Depois de conseguir resolver o topico anterior que postei  (http://www.portugal-a-programar.pt/forums/topic/0-find-topic/?do=findComment&comment=292709)  me deparo com uma outra duvida:

Tenho um form contendo dados de um Tutorando (ligado a tabela por Adodc).

Cada Tutorando um Tutor. Uma combo box 'e preechida com valores da tabela de Tutores.

Como faco pra ao escolher o Tutor na combo box, e ao clicar "gravar" ou Next (do controle Adodc) ele fique gravado no campo respectivo na tabela de Turorando?

Espero ter explicado bem

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom, consegui implementar este codigo, mas tenho um erro

Erro#: -2147217865 Could not find output table 'Tabela'

Este esta num Modulo

Public Sub GravarTutor(Controle As Object, Tabela, Campo)

Dim rs As New ADODB.Recordset         'Declara um recorset
Dim Sql As String                     'Declara uma string para a consulta SQL
Dim cnnx As New ADODB.Connection      'Declara a coneccao da BD
Dim connstr As String

On Error GoTo Erro

connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Trabalhos de Pesquisa em Saude Publica\PTV\Sistema de Tutoria PTV\Competencias.mdb;Persist Security Info=False"

cnnx.ConnectionString = connstr
cnnx.Open

Controle.Clear
'limpa o controle
Sql = ""
'limpa a string SQL
'Define a string SQL para selecionar os registros
Sql = "INSERT INTO Tabela (Campo)" & " VALUES ('" & Controle.Text & "');"

'Executa e introduz o dado
cnnx.Execute Sql

'Fecha a conecao
cnnx.Close

Exit Sub

Erro: 'se houver erros faz o tratamento

If Err.Number <> 0 Then
  MsgBox ("Erro #: " & Str(Err.Number) & Err.Description)
  Exit Sub
End If

End Sub

Este no botao gravar:

Private Sub btGravar_Click()
    Save
    GravarTutor cbxacecodTutor, "tbTutor", "acecodTutor"
End Sub

e o metodo Save:

Private Sub Save()
'Se estiver no modo de inclusão então salva
    If Adodc1.Recordset.EditMode = adEditAdd Then

        On Error GoTo SaveFailure:
    
        Adodc1.Recordset.Update 'salva o registro
             
        On Error GoTo 0 'desabilita o tratamento de erros

        'Como não precisa salvar , então desabilita a opção Salvar
        btGravar.Enabled = False

    End If

'Inicio Tratamento de erros (SaveDone e SaveFailure são chamadas Labels)
SaveDone:
    Exit Sub

SaveFailure:
    MsgBox Err.Number & vbCrLf & Err.Description 'Exibe a descrição do erro
    Resume SaveDone 'continua a execução a partir da linha SaveDone
    
End Sub
[/cobe]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ele diz que não consegue abrir a tua "tabela" deves ter cuidado com os nomes que dás às tuas tabelas, deve ser esse o caso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ele diz que não consegue abrir a tua "tabela" deves ter cuidado com os nomes que dás às tuas tabelas, deve ser esse o caso.

Yes, eu observei que de facto estava apontar a tabela errada

Private Sub btGravar_Click()
    Save
    GravarTutor cbxacecodTutor, "tbTutor", "acecodTutor"
End Sub

entao na verdade a tabela deve ser tbACE, e o codigo acecodTutor. Rectifiquei para:

Private Sub btGravar_Click()
    Save
    GravarTutor cbxacecodTutor, "tbACE", "acecodTutor"
End Sub

Mesmo assim continua com o mesmo erro!!

Onde posso tar a falhar?

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pelo que vejo o teu erro deve estar nesta linha

Sql = "INSERT INTO Tabela (Campo)" & " VALUES ('" & Controle.Text & "');"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

set#1 concordo com o vbtipo.

Sql = "INSERT INTO Tabela (Campo)" & " VALUES ('" & Controle.Text & "');"

não deveria ser

Sql = "INSERT INTO " & tabela & "(" & campo & ")" & " VALUES ('" & Controle.Text & "');"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

set#1 concordo com o vbtipo.

Sql = "INSERT INTO Tabela (Campo)" & " VALUES ('" & Controle.Text & "');"

não deveria ser

Sql = "INSERT INTO " & tabela & "(" & campo & ")" & " VALUES ('" & Controle.Text & "');"

Yes, tas certo, ja tava a rectificar e rectifiquei. Agora tenho o erro:

You cannot add or chenge a record because a related record required in table 'nome da tabela'

Os valores preechidos na combo ja sao da tabela 'nome da tabela', logo ja existem la, e estes devem ser gravados no campo doutra tabela entao nao entendo porque este erro.  :wallbash:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Consegues mandar o projecto zipado? :S é que estou a entender mal :S se conseguisses mandar isso e a BD conseguia analisar melhor.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Consegues mandar o projecto zipado? :S é que estou a entender mal :S se conseguisses mandar isso e a BD conseguia analisar melhor.

Enviado para teu e-mail

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pelo o que estou a ver estás a fazer aqui uma confusão DANADA mesmo o.0 até a mim me confundiste. loool

Diz-me la o que tenho de fazer para simular o erro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pelo o que estou a ver estás a fazer aqui uma confusão DANADA mesmo o.0 até a mim me confundiste. loool

Diz-me la o que tenho de fazer para simular o erro.

Entao, do jeito que te mandei desabilitei os metodos GravarTutor, no botao Gravar:

Private Sub btGravar_Click()

    Save

End Sub

e liguei a combo box ao DataField - acecodTutor com o DataSource Adodc1.

Em CarregaControle rectifiquei para:

With rs
Do Until .EOF 'percorre o recordset ate o fim

  'inclui os itens correspondentes
  Controle.AddItem rs(CodigoCampo)
  Controle.ItemData(Controle.NewIndex) = rs(CodigoCampo)
  .MoveNext

Assim ele grava os valores inteiros (1, 2, 3 etc). Isto deu certo, mas o problema que ficou 'e que quando faz o Load o 1 dado da combo box nao aparece, mas navegando e voltar ja aparece... :-[

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que já entendi. o 1º recorde não aparece correcto na combo certo? óbvio. porque você deveria 1º preencher as combos só depois carregar a ficha.

Mete isto no loadForm

    txtacetId.Enabled = False
        
    'Desabilita botoes
    btCancelar.Enabled = False
    
    CarregaControle cbxacecodTutor, "tbTutor", "codTutor", "Nome"
    
    Adodc1.Recordset.Requery

0

Partilhar esta mensagem


Link 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