Pergunte aqui
1

Inputar dados no banco de dados ODB via formulário Calc

perguntadas 2017-08-05 17:38:19 +0200

esta mensagem está marcada como wiki comunitário

Esta mensagem é um wiki. Qualquer pessoa com karma >75 é bem-vinda para a melhorar.

Boa tarde Pessoal,

Seria possível criar um formulário no calc com as seguintes campos:

Data, Turno, Código, Defeito A, Defeito B, Total Def, Total Prod, Máquina?

E depois eu resgatar essas informações para montar um relatório? É muita informação para criar uma outra aba e inputar tudo, teria que ser em banco de dados mesmo porque é mais seguro.

Sds,

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

2 Respostas

1

respondidas 2017-08-05 23:19:25 +0200

imagem do gravatar de Grafeno

updated 2017-08-13 21:46:01 +0200

Boa noite,


Veja a resposta (e comentários) da questão abaixo :


Edição 13/08: Correção do exemplo


BancoDefeitos.odb (Exemplo - Registre antes de usar a planilha)
PlanilhaFonte.ods (Com a macro abaixo)

Sub SalvarDadosBD()
Dim oPlan As Object, oDBC As Object, oBD As Object, oConexao As Object, oDeclaracao As Object
Dim oBloco As Object, vData As Double
Dim sData As String, sTurno As String, sCodigo As String, sMaquina As String 
Dim sDefeitoA As String, sDefeitoB As String, sDefeitoC As String, sDefeitoD As String
Dim sQtdTotalRef As String, sTotal As String, sNome_Tabela As String, sCampos As String
Dim sValores As String, sSQL As String, sBanco As String

   ' Obter a planilha com campos'
   oPlan = ThisComponent.Sheets.getByName("PlanForm")   

   ' Pegar o valor do campo data'
   vData = oPlan.getCellRangeByName("C2").Value
   ' Sair se o campo data estiver vazio'
   If vData = 0 Then Exit Sub
   ' Formatar a data para inserir no banco'
   sData = Year(vData) & "-" & Month(vData) & "-" & Day(vData)
   ' Recuperar os demais campos da planilha'
   sTurno = oPlan.getCellRangeByName("C3").String
   sCodigo = oPlan.getCellRangeByName("C4").String
   sMaquina = oPlan.getCellRangeByName("C5").String
   sDefeitoA = oPlan.getCellRangeByName("C6").String
   sDefeitoB = oPlan.getCellRangeByName("C7").String
   sDefeitoC = oPlan.getCellRangeByName("C8").String
   sDefeitoD = oPlan.getCellRangeByName("C9").String
   sQtdTotalRef = oPlan.getCellRangeByName("C10").String
   sTotal = oPlan.getCellRangeByName("C11").String

   ' Preparar a instrução SQL'
   sNome_Tabela = " ""Defeitos"" " 
   sCampos = """Data"",""Turno"",""Codigo"",""Maquina"",""DefeitoA""," & _
             """DefeitoB"",""DefeitoC"",""DefeitoD"",""QtdTotalRef"",""Total"""
   sValores = "'" & sData & "','" & sTurno & "','" & sCodigo & "','" & sMaquina & _
              "','" & sDefeitoA & "','" & sDefeitoB & "','" & sDefeitoC & "','" & _
              sDefeitoD & "','" & sQtdTotalRef & "','" & sTotal & "'"
   ' Tratar as células em branco com Null'
   sValores = Replace( sValores, "''","Null")
   ' Configurar a cláusura INSERT INTO'
   sSQL = "INSERT INTO " & sNome_Tabela & " (" & sCampos & ") VALUES (" & sValores & ")" 

   ' Obter a conexão ao Banco Defeitos'
   sBanco = "BancoDefeitos" 'O banco PRECISA estar registrado.
   oDBC = createUnoService( "com.sun.star.sdb.DatabaseContext" )
   If Not oDBC.hasByName( sBanco ) Then
      Msgbox "É preciso registrar o banco '" & sBanco & "' antes de prosseguir.",64
      Exit Sub
   End If
   oBD = oDBC.getByName( sBanco )
   oConexao = oBD.getConnection( "","" )

   ' Executar o SQL'
   oDeclaracao = oConexao.createStatement()
   oDeclaracao.executeUpdate( sSQL )

   ' Fechar a conexão e liberar a memória'
   oDeclaracao.close()
   oConexao.close()
   oDeclaracao = Nothing
   oConexao = Nothing

   MsgBox "Dados salvos na tabela '" & sNome_Tabela & "'!",0

   ' Limpar as células'
   '   Parâmetro: Valor(1)+Data/Hora(2)+Texto(4) = 7'
   oBloco = oPlan.getCellRangeByName("C2:C11")
   oBloco.ClearContents( 7 )
End Sub


Para resgatar as informações, você pode usar o método descrito na resposta a:


Atte,

editar assinalar como ofensivo Excluir Link mais

Comentários

C:\fakepath\Exemplo.ods

Boa noite @Grafeno!

Peso sinceras desculpas por não ter conseguindo responder ontem... Seria mais o menos como está nesse exemplo, não consegui montar o banco de dados... Minha ideia é a partir depois montar uma caixa de dialogo que os campos.

Se puder me ajudar eu fico grato.

Obrigado!

imagem do gravatar de mdiegomdiego ( 2017-08-06 17:32:14 +0200 )editar

@mdiego, para adaptar a macro precisamos saber qual o tipo de dados que cada campo terá no banco de dados. Por exemplo, o campo "Máquina" receberá texto, inteiro ou decimal? O ideal é você montar o banco odb de exemplo, com alguns registros já inseridos e anexar na sua pergunta para que possamos ajudar.

imagem do gravatar de GrafenoGrafeno ( 2017-08-06 21:13:06 +0200 )editar
1

@mdiego, se possível teste o exemplo. Desculpe a demora em responder.

imagem do gravatar de GrafenoGrafeno ( 2017-08-12 16:06:37 +0200 )editar

@Grafeno

Boa tarde Antônio,

Show de bola... Conhecimento invejável! Deu certinho... Agora minha pergunta é: Seria possivel eu resgatar essas informações do banco de dados? Exemplo, selecionar máquina Z e de data X a Y

Máquina CNC Período 21/02/2016 - até 21/07/2017?

Testei e deu erro caso um dos campos esteja Vazio "". Seria possível corrigir?

Muito obrigado!

imagem do gravatar de mdiegomdiego ( 2017-08-12 20:27:18 +0200 )editar

@mdiego, acabei de ajustar a macro da planilha para tratar os valores das células em branco como Null. Agora não ocorrerá mais o erro.

imagem do gravatar de GrafenoGrafeno ( 2017-08-13 22:13:37 +0200 )editar

O resgate de info. que vc pretende é possível, desde que se use as Consultas. Daí sugiro que busque a documentação disponível do Base a respeito e SQL. A partir do momento que você comece a se familiarizar com estes temas, vai conseguir extrair todo poder do BD. Só queria destacar que as consulta salvas podem ser importadas pelo método que mostrei na resp.

imagem do gravatar de GrafenoGrafeno ( 2017-08-13 22:22:39 +0200 )editar
0

respondidas 2017-08-14 02:08:16 +0200

imagem do gravatar de mdiego

@Grafeno, Show de bola mestre!

Que conhecimento...

Por gentileza, poderia me informar onde encontro a documentação do base?

Vou começar estudar.

Obrigado.

editar assinalar como ofensivo Excluir Link mais

Comentários

@mdiego, o ponto de partida é seção Documentação em português do site da LibreOffice. Consulte o Guia de Introdução e o Introdução ao OpenOffice.org Base.

imagem do gravatar de GrafenoGrafeno ( 2017-08-20 15:36:21 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2017-08-05 17:38:19 +0200

Lidas: 530 vezes

Última atualização: Aug 14 '17