MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


2 participantes

    [Resolvido]Subformulário desvinculado

    rg3915
    rg3915
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 119
    Registrado : 17/06/2013

    [Resolvido]Subformulário desvinculado Empty Subformulário desvinculado

    Mensagem  rg3915 13/8/2013, 16:55

    Num post já um pouco antigo http://maximoaccess.forumeiros.com/t80-resolvidosformas-de-inserir-e-carregar-dados-por-meio-de-formularios-desvinculados eu li sobre formulário não vinculados e o uso do comando INSERT INTO.
    Pergunto: como eu faço isso num subformulário, com mais de um registro? Ou seja, um subform com vários registros não vinculados que serão inseridos na tabela via INSERT INTO, ou via Recordset com For Next, pode ser.
    le_lo28
    le_lo28
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 233
    Registrado : 13/07/2011

    [Resolvido]Subformulário desvinculado Empty Re: [Resolvido]Subformulário desvinculado

    Mensagem  le_lo28 15/8/2013, 13:49

    Cara, é muito simples!

    Você pode criar o subformulário contínuo e carregá-lo com apenas duas linhas, veja?

    Código:

    Dim rst as DAO.Recordset
    Dim sSQL as String

    'Origem dos registros
    sSQL = "Select * From SuaTabela"

    'Abre o rst
    Set rst = Currentdb.OpenRecordset(sSQL)

    'Carrega os dados no forms
    Set Me.Form.Recordset = rst

    Fecha o rst e libera memória
    rst.close
    Set rst = Nothing

    Coloque no evento ao abrir por exemplo.


    Dica: Para que funcione, vc deve deixar na fonte de controle de cada caixa de texto do formulário o mesmo nome dos campos do recordset.

    Até a próxima!


    .................................................................................
    [Resolvido]Subformulário desvinculado Assinaturacross
    M@rcelo

    aeps gosta desta mensagem

    rg3915
    rg3915
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 119
    Registrado : 17/06/2013

    [Resolvido]Subformulário desvinculado Empty Re: [Resolvido]Subformulário desvinculado

    Mensagem  rg3915 15/8/2013, 16:45

    Valeu pela ajuda, mas não é bem isso que eu preciso.
    Eu preciso escrever os dados no subformulário e depois, clicando num botão 'Gravar' os dados na tabela. Mas eu acho que seria melhor eu criar uma tabela temporária, vincular os campos a ela, e depois "transferir" os dados da tabelaTemp para a tabelaOriginal.
    le_lo28
    le_lo28
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 233
    Registrado : 13/07/2011

    [Resolvido]Subformulário desvinculado Empty Re: [Resolvido]Subformulário desvinculado

    Mensagem  le_lo28 15/8/2013, 18:12

    Opa! Desculpe, acho que não tinha entendido direito!

    Mas a forma que vc descreveu funciona!

    Valeu,


    .................................................................................
    [Resolvido]Subformulário desvinculado Assinaturacross
    M@rcelo
    rg3915
    rg3915
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 119
    Registrado : 17/06/2013

    [Resolvido]Subformulário desvinculado Empty Re: [Resolvido]Subformulário desvinculado

    Mensagem  rg3915 15/8/2013, 20:54

    Vamos lá:

    tabela: Emprestimo
    IDEmprestimo
    DataEmprestimo
    Nome

    tabela: detEmprestimo
    IDdetEmprestimo
    IDEmprestimo
    CodProduto
    QuantEmprestada

    tabela: detEmprestimoTemp
    IDdetEmprestimo
    IDEmprestimo
    CodProduto
    QuantEmprestada


    Form: Emprestimo
    Subform: detEmprestimo

    Estes formulários não são vinculados (escolhi assim para poder cancelar todo o processo, se quiser).
    No caso do subform a única solução seria criar uma tabela temporária para armazenar os dados e somente depois que eu desse OK jogaria na tabela original.

    Então o processo ficou assim:
    - Ao Abrir o Form excluo a tabela detEmprestimoTemp, caso ela exista;
    - Depois que eu preencher o Nome os dados são gravados num novo registro na tabela Emprestimo;
    - É criada a tabela temporária detEmprestimoTemp;
    - Tanto o subform quanto os campos são vinculados a tabela detEmprestimoTemp;
    - Depois que eu preencher CodProduto e QuantEmprestada para quantos registros eu quiser, e depois que clicar em OK...
    - os dados são gravados na tabela original detEmprestimo via INSERT INTO detEmprestimo (...) SELECT ...

    É isso ai galera.

    Se der pra melhorar este código, aceito sugestões.

    Código:
    Option Compare Database
    Option Explicit

    Dim ctl As Control

    Private Sub Form_Load()
        ExcluirTabelaTemp ("detEmprestimoTemp")
    End Sub

    Private Function Actions(ByVal pg As Integer) As Boolean
    On Error GoTo Err_Actions

        Set ctl = Forms!Emprestimo!EmprestimoSubform
        Dim intMaxID As Integer
       
        Select Case IndicePaginaAtual
            Case 0
                If Me.Nome <> "" Then
                    GravarDadosEmprestimo
                    CriarTabela
                    VinculaCampos
                    Actions = True
                Else
                    Me.Nome.SetFocus
                    Actions = False
                End If
            Case Else
                intMaxID = DMax("IDEmprestimo", "Emprestimo")
                GravarDadosdetEmprestimo (intMaxID)
                Actions = True
        End Select

    Exit_Actions:
        Exit Function

    Err_Actions:
        MsgBox "Actions: " & Err.Description & vbCrLf & Err.HelpContext & vbCrLf & Err.HelpFile
        Resume Exit_Actions

    End Function

    Private Sub GravarDadosEmprestimo()
        Dim sql As String
        sql = "INSERT INTO Emprestimo (Nome) VALUES ('" & Me.Nome & "');"
        CurrentDb.Execute sql, dbFailOnError
    End Sub

    Private Sub CriarTabela()
        Dim sql As String
        sql = "CREATE TABLE detEmprestimoTemp (IDdetEmprestimo Integer, IDEmprestimo Integer, CodProduto Integer, QuantEmprestada Integer);"
        CurrentDb.Execute sql, dbFailOnError
    End Sub

    Private Sub VinculaCampos()
        Dim sql As String
        sql = "SELECT * FROM detEmprestimoTemp;"
        'Define a Fonte de Registro do subform
        ctl.Form.RecordSource = sql
        'Define a Fonte de Controle dos registros
        ctl!CodProduto.ControlSource = "CodProduto"
        ctl!QuantEmprestada.ControlSource = "QuantEmprestada"
    End Sub

    Private Sub GravarDadosdetEmprestimo(intMaxID As Integer)
        Dim sql As String
        sql = "INSERT INTO detEmprestimo (IDEmprestimo, CodProduto, QuantEmprestada)" _
            & " SELECT " & intMaxID & ", CodProduto, QuantEmprestada" _
            & " FROM detEmprestimoTemp;"
        CurrentDb.Execute sql, dbFailOnError
        MsgBox "Dados gravados com sucesso.", vbOKOnly, "Aviso"
    End Sub

    Private Sub ExcluirTabelaTemp(strTabela As String)
        On Error Resume Next
        DoCmd.DeleteObject acTable, strTabela
    End Sub

    Conteúdo patrocinado


    [Resolvido]Subformulário desvinculado Empty Re: [Resolvido]Subformulário desvinculado

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 19/5/2024, 12:31