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

Botao de cadastro


Leandro_Pirozzi

Pergunta

Bom o botao efetua o cadastro de atividades, porém os campos se o usuário clica na grid onde existem as informações ele preenche todos esses campos, até ai belezinha.

1 --- O problema começando. Se o usuário clica na grid ele alimenta os campos, então nesse botao de cadastro comecei logo limpando todos os dados antes de fazer o insert.

2 --- Preciso por um cronometro que guarde o tempo q o usuário utiliza para efetuar um cadastro de atividade ai utilizei o timer, pelo menos ele esta rodando direitinho, só não sei se vai guardar o tempo q o usuario leva pra cadastrar.

3 --- Bom como se trata de informaçoes que veem de BD então deixei desativado para o usuário quando clicar na grid não alterar nenhum dos campos, porém agora eu preciso que o usuário insira informaçoes nesses campos então, tive que por TRUE para os campos nas quais preciso das informaçoes.

4--- Continuando tem um if pra verificar o limpa_atividades que somente deixa os campos "", se eu não coloco esse if ele diz q a conexao esta fechada, então deixei esse if, mas acontece q mesmo preenchendo todos os campos, ele exibe a msgbox e limpa todos os campos, perdendo tudo que o usuário digitou. alguém sabe o porque?

5--- ai vem o insert que não consegui testar.

Quem puder ajudar muito obrigado!!

Private Sub cmdnovaatividade_Click()
'1---    Limpa_Atividades

'2---    Timer1.Enabled = True
    hora.Visible = True
    
    framedadosgridativ.Visible = True
    framehist.Visible = True
    
    Dim SQL As String
    Dim icol As Integer
    
'3---    txtcodempativ.Enabled = True
     txtcodcont.Enabled = True
         txtassessorativ.Enabled = True
         txtequipeativ(0).Enabled = True
         txtequipeativ(1).Enabled = True
         txtequipeativ(2).Enabled = True
         txthistorico.Enabled = True
         txtequipeativ(3).Enabled = True
         txtequipeativ(4).Enabled = True
         txtequipeativ(5).Enabled = True
         txtequipeativ(6).Enabled = True
    
'4---    If Not Limpa_Atividades Then
            MsgBox "Campo obrigatório vazio, favor verificar.", vbInformation, "Atenção"
            Exit Sub
         End If

'5---    Set rsativcont = New ADODB.Recordset
        SQL = "INSERT INTO CONTATOS_HISTORICO "
        SQL = SQL & "(CODEMP, CODCONTATO, ASSESSOR, EQUIPE, TAREFA, DATACONCLUIDA, HISTORICO, CARTA, HORA, IMPORT, CODIMP, TEMPOGASTO )"
        SQL = SQL & "VALUES ( '" & Me.txtcodempativ.Text & "','" & Me.txtcodcont.Text & "', "
        SQL = SQL & "'" & Me.txtassessorativ.Text & "' , "
        SQL = SQL & "'" & Me.txtequipeativ(0).Text & "' , "
        SQL = SQL & "'" & Me.txtequipeativ(1).Text & "' , "
        SQL = SQL & "'" & Me.txtequipeativ(2).Text & "' , "
        SQL = SQL & "'" & Me.txthistorico.Text & "' , "
        SQL = SQL & "'" & Me.txtequipeativ(3).Text & "' , "
        SQL = SQL & "'" & Me.txtequipeativ(4).Text & "' , "
        SQL = SQL & "'" & Me.txtequipeativ(5).Text & "' , "
        SQL = SQL & "'" & Me.txtequipeativ(6).Text & "','" & Me.hora.Caption & "')"
               
        'Me.txtequipeativ(7).Text = Me.hora.Caption
        
        Set rsativcont.ActiveConnection = cnativcont
        rsativcont.Open SQL
            
            
            
            'Verifica_Atividades
            'LimpaTarefas
            'Atualiza_Atividades
    
            MsgBox "Cadastro de atividade efetuado com sucesso"

    
End Sub

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

23 respostass a esta questão

Posts Recomendados

  • 0
2 --- Preciso por um cronometro que guarde o tempo q o usuário utiliza para efetuar um cadastro de atividade ai utilizei o timer, pelo menos ele esta rodando direitinho, só não sei se vai guardar o tempo q o usuario leva pra cadastrar.

você quer dizer q quer guardar o tempo q o usuario levou pra digitar todos os campos?? se for isso, é so você habilitar o timer (ponha o interval como 1) e ir somando o valor numa variavel declarada la em cima no generals. quando acabar de digitar, você vai ter o valor em milisegundos q ele levou.

4--- Continuando tem um if pra verificar o limpa_atividades que somente deixa os campos "", se eu não coloco esse if ele diz q a conexao esta fechada, então deixei esse if, mas acontece q mesmo preenchendo todos os campos, ele exibe a msgbox e limpa todos os campos, perdendo tudo que o usuário digitou. alguém sabe o porque?

não entendi esse seu codigo ai, ele ta meio estranho. tipo, o cara clica no novo. e ai os campos são limpados. e ai logo abaixo já ta gravando?? não tem q esperar ele digitar não?? você não teria q limpar no novo, e depois esperar ele clicar em gravar pra depois ai sim fazer o insert??

outra coisa, insert não retorna dados, então você não tem q dar Open no recordset.

é so executar na conexao direto. tipo assim:

cnativcont.Execute SQL

e posta tb qual o conteudo da sub Limpa_Atividades().

Link para o comentário
Compartilhar em outros sites

  • 0

então, esse valor em milisegundos, como faço pra passar ele pra segundos, minutos ou ate mesmo horas?

então, é q esse codigo ai é o seguinte, se o usuario clica na grid ela alimenta todos os campos, porém se ele clica no botao de cadastrar atividades, eu preciso limpar todos os dados que estavam nos campos referente ao grid que o usuario selecionou e depois que ele preencher efetuar o insert, será que deu pra ter uma ideia?

To postando o conteudo da sub Limpa_Atividades().

Vlww, obrigadão!!!

Function Limpa_Atividades()

Me.txtcodempativ.Text = ""

Me.txtcodcont.Text = ""

Me.txtassessorativ.Text = ""

Me.txtequipeativ(0).Text = ""

Me.txtequipeativ(1).Text = ""

Me.txtequipeativ(2).Text = ""

Me.txthistorico.Text = ""

Me.txtequipeativ(3).Text = ""

Me.txtequipeativ(4).Text = ""

Me.txtequipeativ(5).Text = ""

Me.txtequipeativ(6).Text = ""

Me.txthistorico.Text = ""

End Function

Link para o comentário
Compartilhar em outros sites

  • 0
então, esse valor em milisegundos, como faço pra passar ele pra segundos, minutos ou ate mesmo horas?

pra tranformar em segundo é so dividir por mil ne. e pra mostrar os segundos em formatos de hora é so usar essa funcao aqui: http://scriptbrasil.com.br/forum/index.php?showtopic=108910

então, é q esse codigo ai é o seguinte, se o usuario clica na grid ela alimenta todos os campos, porém se ele clica no botao de cadastrar atividades, eu preciso limpar todos os dados que estavam nos campos referente ao grid que o usuario selecionou e depois que ele preencher efetuar o insert, será que deu pra ter uma ideia?

mas se você puser o codigo de gravar logo embaxo, ele não vai esperar o cara digitar e já vai tentar gravar ne.

você tem q por o codigo de gravar (o insert) num segundo botao.

e quanto a essa parte do codigo aqui:

If Not Limpa_Atividades Then
            MsgBox "Campo obrigatório vazio, favor verificar.", vbInformation, "Atenção"
            Exit Sub
         End If[/code]

ela não tem sentido, porque a sua funcao Limpa_Atividades não retorna valor nenhum, olha la o codigo dela. ela simplesmente limpa os campos. o q acontece é q você ta chamando ela duas vezes ainda (ou seja, ta limpando duas vezes sem ter necessidade), uma vez la em cima e outra nesse if.

acho q o q você quer é saber se ele dexou algum campo em branco não?? então você tem q fazer uma outra funcao q teste isso e ai chamar ela nessa hora.

Link para o comentário
Compartilhar em outros sites

  • 0

seria correto para fazer o timer correr e guardar o tempo que o usuário leva para preencher os campos?

Dim contcron as integer 'declarado no generals

'esse trecho esta no botao de limpar campos. ai ele começa a contar os milisegundos.

contcron = 0

While cmdsalvarativ.Enabled = False

contcron = contcron + 1

end While

Link para o comentário
Compartilhar em outros sites

  • 0

tira esse while dai. se você puser ele, ele vai ficar parado ai pra sempre somando na variavel.

o q você tem q fazer é o seguinte. levando em conta q o seu Timer se chame Timer1, de um duplo clique nele, pra chamar o evento. e faca o codigo assim:

Private Sub Timer1_Timer()
    contcron = contcron + 1
End Sub[/code] ai quando ele clicar em novo, você habilita o timer tipo assim:
[code]contcron = 0
Timer1.Enabled = True
e depois q ele gravar você desabilita:
Timer1.Enabled = False

e pronto, o tempo q ele demorou vai estar na variavel contcron.

seria correto para fazer o timer correr e guardar o tempo que o usuário leva para preencher os campos?

como assim correto?? você ta perguntando se você deve ou não contar o tempo??

não é correto nem incorreto, tem q ver qual sua intencao em por ele ai, vai ajudar em algo??

Link para o comentário
Compartilhar em outros sites

  • 0

não eu tinha perguntado se seria correto escrever do jeito que eu tinha feito com While.

Mas voce já me respondeu e tirou minha dúvida.

Consigo usar o valor da variavel contcron para usar essa função?

Pois o valor da contcron vem em milisegundos.

Obrigado!

Public Function MontaHora(Seg As Double) As String

Dim Hor As Double, Min As Double

If Seg < 0 Then

MontaHora = "- "

Seg = Abs(Seg)

Else

MontaHora = ""

End If

Hor = Seg \ 3600

Seg = Seg - (Hor * 3600)

Min = Seg \ 60

Seg = Seg - (Min * 60)

MontaHora = MontaHora & Hor & ":" & _

IIf(Len(CStr(Min)) = 1, "0", "") & Min & ":" & _

IIf(Len(CStr(Seg)) = 1, "0", "") & Seg

End Function

Link para o comentário
Compartilhar em outros sites

  • 0

Apresentou a seguinte msg de erro.

Compile Error:

ByRef argument type mismatch.

Private Sub cmdsalvarativ_Click()

Dim SQL As String

Dim icol As Integer

Set rsativcont = New ADODB.Recordset

SQL = "INSERT INTO CONTATOS_HISTORICO "

SQL = SQL & "(CODEMP, CODCONTATO, ASSESSOR, EQUIPE, TAREFA, DATACONCLUIDA, HISTORICO, CARTA, HORA, IMPORT, CODIMP, TEMPOGASTO )"

SQL = SQL & "VALUES ( '" & Me.txtcodempativ.Text & "','" & Me.txtcodcont.Text & "', "

SQL = SQL & "'" & Me.txtassessorativ.Text & "' , "

SQL = SQL & "'" & Me.txtequipeativ(0).Text & "' , "

SQL = SQL & "'" & Me.txtequipeativ(1).Text & "' , "

SQL = SQL & "'" & Me.txtequipeativ(2).Text & "' , "

SQL = SQL & "'" & Me.txthistorico.Text & "' , "

SQL = SQL & "'" & Me.txtequipeativ(3).Text & "' , "

SQL = SQL & "'" & Me.txtequipeativ(4).Text & "' , "

SQL = SQL & "'" & Me.txtequipeativ(5).Text & "' , "

SQL = SQL & "'" & Me.txtequipeativ(6).Text & "','" & Me.hora.Caption & "')"

Set rsativcont.ActiveConnection = cnativcont

MsgBox "Cadastro de atividade efetuado com sucesso"

txtequipeativ(7).Text = MontaHora(contcron) 'aqui ele exibiu o erro.

Timer1.Enabled = False

End Sub

Link para o comentário
Compartilhar em outros sites

  • 0

ai é problema com a sql. você deve tar mandando gravar texto em campo numero, por exemplo.

se não conseguir descobri, faca o seguinte. vai ate a linha

cnativcont.Execute SQL
e aperta F9. a linha deve ficar vermelha. então vai la e aperta F5 pra roda o programa. e tenta gravar o registro. quando chegar nessa linha, ele deve pausar a execucao do programa. então, vai na Immediate Window (Ctrl + G) e digita:
? SQL

e ai vai aparecer o conteudo da SQL q ele ta tentando executar.

e ai veja se você não identifica o erro.

senao, abre o access e tenta executar essa sql como consulta, q la ele deve apontar o campo.

senao poste a SQL aqui.

Link para o comentário
Compartilhar em outros sites

  • 0

Segue o SQL

estranho q no access ele executou normal.

SQL = "INSERT INTO CONTATOS_HISTORICO "

SQL = SQL & "(CODEMP, ASSESSOR, EQUIPE, TAREFA, HISTORICO, CARTA, HORA, TEMPOGASTO )"

SQL = SQL & "VALUES ( '" & Me.txtcodempativ.Text & "' , "

SQL = SQL & "'" & Me.txtassessorativ.Text & "' , "

SQL = SQL & "'" & Me.txtequipeativ(0).Text & "' , "

SQL = SQL & "'" & Me.txtequipeativ(1).Text & "' , "

SQL = SQL & "'" & Me.txthistorico.Text & "' , "

SQL = SQL & "'" & Me.txtequipeativ(3).Text & "' , "

SQL = SQL & "'" & Me.txtequipeativ(4).Text & "' , "

SQL = SQL & "'" & Me.txtequipeativ(7).Text & "')"

Link para o comentário
Compartilhar em outros sites

  • 0

Exibe isso de acordo com o que preenchi.

Erro: Tipos de dados imcompativel na expressao de critério.

INSERT INTO CONTATOS_HISTORICO (CODEMP, ASSESSOR, EQUIPE, TAREFA, HISTORICO, CARTA, HORA, TEMPOGASTO )VALUES ( '2498' , 'LEANDRO' , 'GIRARDI' , 'TEL' , 'JDHJDJHDJDHJDHDJHDJHDJDHJDHDJHDJHDJDHJDDJD' , 'SEI LA' , '15:00' , '')

Link para o comentário
Compartilhar em outros sites

  • 0

leandro nesses campos existe algum q é do tipo numerico??

por exemplo, se o campo TEMPOGASTO for numerico, você não pode gravar '', você teria q gravar 0.

e tb não pode por entre aspa. o CODEMP tb não é numerico??

ai você não pode por entre aspa tb. e tb, acho q isso não faz diferenca, mas pra garantir de um espaco antes do Values tb. tente gravar tipo assim:

INSERT INTO CONTATOS_HISTORICO (CODEMP, ASSESSOR, EQUIPE, TAREFA, HISTORICO, CARTA, HORA, TEMPOGASTO) VALUES( 2498 , 'LEANDRO' , 'GIRARDI' , 'TEL' , 'JDHJDJHDJDHJDHDJHDJHDJDHJDHDJHDJHDJDHJDDJD' , 'SEI LA' , '15:00' , 0)

Link para o comentário
Compartilhar em outros sites

  • 0

então é o tempo gasto. se você quer gravar tempo em branco, grave '00:00:00', não pode ser ''.

mas acho q você devia usar outro tipo. data/hora é so pra guardar data e hora do dia. não serve pra gravar intervalo de tempo.

exemplo, se o tempo gasto fosse de 25 horas, como você iria gravar, se o campo data/hora so aceita ate 23:59??

ou você faz como numerico e grava o valor em (mili)segundos, ou você faz como texto e grava a string.

Link para o comentário
Compartilhar em outros sites

  • 0

Boa noite, Desculpa eu colocar minha dúvida neste tópico, mas no outro ninguém me respondeu.

Por favor me ajudem, eu tinha uma macro que executando-a eu conseguia imprimir meu documento 50 vezes de 4 em 4 minutos, agora perdi a macro.

Ela rodava a noite toda, quando chegava de manhã já tinha as 50 impressões feitas, este documento tem muitas imagens, e se eu mandar tudo de uma vez, a impressora esquenta e sai tudo borrado, por isso preciso dessa macro.

Lembro me que ela tinha uma contagem de tempo time value + time now contagem 50 vezes imprimir.

por favor !!!!!

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,5k
×
×
  • Criar Novo...