Notifications
Clear all

Tipos Incompatíveis de dados

14 Posts
2 Usuários
0 Reactions
2,844 Visualizações
(@rilton)
Posts: 232
Reputable Member
Topic starter
 

Olá,

EStou quebrando a cabeça aqui para solucionar um problema. Bom, tenho uma banco de dados no access que recebem valores vindo de um formulário no excel. Meu formulário era adaptado para enviar dados para o banco de dados como texto (Quem dessenvolveu o modelo foi Leandro Alves), como fiz adaptações no mesmo, algumas texbox do formulário recebem valores númericos e outras em forma de data, sendo assim, entrei no banco de dados e mudei o tipo de dados que o banco recebia, ou seja, na coluna onde recebem numeros mudei para o tipo números e a coluna que recebe datas mudei para datas. como antes o tipo de dados que a banco recebia era de texto, não acontecia erro, mas agora que mudei conforme minha necessidade está acontecendo erro de tipos incompativeis.
Tentei mudar o formato no formulário para Format("dd,mm,yyyy"), tentei de várias formas, mas não obtive sucesso. A resposta para esse problema, aos olhos de quem é fera em vba, pode ser até facil, mas pra mim está fora do meu intelecto. Se alguém puder me ajudar ficarei grato.

 
Postado : 29/09/2012 11:21 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Como ja dito anteriormente, os 'valores" de um textbox ou label caption são por definição TEXTO "string", para incluir em um banco de dados que "confere" os valores/dados inputados, é necessario:
OU Definir todos os campos do banco de dados como Texto, e fazer as validações necessarias no codigo de: inclusão/alteração e/ou relatorios.
OU Como voce optou, definir os campos no banco, com suas reais aplicções/definições, e deixar as validações a cargo do gerenciamento do banco de dados.
Nesse caso e necessario/mandatório fazer a compatibilização dos dados enviados com o que o banco "espera" receber; para evitar erros; consequentemente a não inclusão/alteração esperada

 
Postado : 29/09/2012 12:30 pm
(@rilton)
Posts: 232
Reputable Member
Topic starter
 

Reinaldo,
Obrigado, eu nunca iria conseguir fazer isso. Só me esclarece mais uma questão, se não for muito incômodo, quando eu clico em pesquisar ele está aparecendo o mesmo erro, com tipos incompativeis. no formulário de cadastro já está tudo certo, porém falta mudar o formulário de pesquisa, eu não estou sabendo corrigir o problema. Também queria acrescentar no formulario de pesquisa, filtros em data, pois assim conseguirei pesquisar por um periodo de data, Tem como fazer isso? Caso haja possibilidade, você pode me ajudar?
Obrigado mais uma vez.

 
Postado : 29/09/2012 2:29 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

No formulario pesquisar o erro e outro. Trata-se de um registro (codigo 13) que no campo HH_total está sem valor (se não me engano o banco interpreta como null) e ao carregar para o forumulário gera erro. Elimine o registro ou inclua um valor (diretamente na tabela) e abra o formulario, deverá funcionar. Qto ao filtro:
Para valores numericos, o filtro somente funcina para numeros complestos e não parciais conforme as strings.
Então se estiver procurando um numero o operador like (fica nessa situação igual ao operador "=") não serve, vc deve por exemplo utilizar maior (">"/"?</"<="/">=").
Qto as datas utilize conforme eu postei em seu outro topico (onde fazia a consulta à planilha banco de dados via conexão ado/sql) A instrução sql funciona igual, independente do arquivo acessado.

 
Postado : 29/09/2012 4:30 pm
(@rilton)
Posts: 232
Reputable Member
Topic starter
 

Reinaldo,

Muito obrigado pelas dicas, foi muito util. Quanto a questão do filtro entre datas, usei o mesmo comando que você me passou, porém, não estou conseguindo fazer realmente funcionar. Quando mando executar, o vb me retorna como "argumento inválido". Estou enviando a planilha em anexo com as aterações feitas. Caso não seja um incômodo (mais uma vez), queria pedir sua ajuda para me auxiliar no ajuste do código que foi feito.
Muito obrigado!

 
Postado : 29/09/2012 9:19 pm
(@rilton)
Posts: 232
Reputable Member
Topic starter
 

Reinaldo,
Fiz algumas pesquisas aqui, e resolvi usar o operador BETWEEN ao invés da rotina anterior, porém o mesmo me retorna com erro de sintaxe. Ainda não encontrei uma solução. caso entenda do assunto, por favor, compartilhe seus conhecimentos.
segue em anexo a planilha com as mudanças feitas.
Obrigado

 
Postado : 30/09/2012 9:10 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Rilton,
Com relação ao seu post anterior (30 Set 2012, 01:19 ).
Ao alterar/aproveitar um codigo previamente existente, deve-se sempre atentar as caracteristicas do mesmo.
Mudando o metodo de construção das string SQL, tb alguma alteraçao na construção da mesma e necessaria.Vc trouxe a "montagem" da clausula sql de outro codigo, que passava para a mesma algumas das variaveis; como na atual versão essa "passagem" não exite, então vc deve se referenciar aos campos e objetos na construção da sql.
Fiz no seu arquivo alteraçãoes que aparentemente funcionam, então teste-as.
Qto a utilizar BETWEEN (Entre), é aplicado em um unico campo.
Ex. caso queira dados com Data_Inicial entre duas datas:
O sql ficaria =/-: Where Data_Inicial BETWEEN data_1 AND data_2 ; isso equivale a dizer Where Data_Inicial >= data_1 and Data_Inicial <=Data_2
Então para utilizar Data Inicial e Data Final, não deve/pode utilizar esse operador

 
Postado : 30/09/2012 9:54 am
(@rilton)
Posts: 232
Reputable Member
Topic starter
 

Reinaldo,
Desculpe-me pela minha falta de conhecimento. De acordo com minha necessidade, vou optar pelo comando BETWEEN, quero pesquisar entre os valores de data inicial. Fiz o código que vc me passou, porém está aparecendo erro de operador no seguinte pedaço "/-:" Não estou conseguindo resolver. Por favor me dê uma luz novamente!
Há, acréscentei um botão para que a pesquisa seja feita ao clicar nele, segue em anexo a planilha com as devidas auterações.

 
Postado : 30/09/2012 11:48 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Rilton, desculpe se parecer rispído, o objetivo não é ofender, mas sim tentar ajudar.
A falta de conhecimento deve ser suplementada pela vontade de aprender, isso aparentemente voce tem.
Porem a pressa suplanta essa vontade.
Voce disse que optou pelo operador Between, porem ainda não conhece como aplicar os anteriores (like >.<.=..) e principalmente montar a instrução sql.
Eu que tenho um pouqinho mais de conhecimento, mas estou meio enferrujado na ferramenta (já faz algum tempo que nãoa uso), estou apanhando, calculo como deve estar se sentindo.Se não parar e entender principalmente; como é montado a clausula sql (independentemente de qual banco de dados e/ou operador/operadores utilizar) voce não irá chegar a lugar nenhum.
Nesse ultimo arquivo que upou, ficou completamente desfigurado. Já não carrega os dados que anteriormente carregava, e não entendi se pretende utilizar o campo texto junto com as datas ou somente o campo texto ou somente a (s) datas.
Salientando tambem, que no exemplo anterior tambem é possivel (recomendado) utilizar para uma mesma data (>= e <=)
Então veja como fica:

Private Sub btnPesquisar_Click()
    Dim cx As New ClasseConexao
    Dim banco As ADODB.Recordset
    Dim sql As String, Ord As String
    
    
    ProcurarPor = Me.cboPesquisarPor.Text
    OrdenarPor = Me.cboOrdenarPor.Text
    
    With Me.lstv
        .ListItems.Clear
        Ord = " ORDER BY " & OrdenarPor & " " & Ordem & ";"
        sql = "Select * FROM Programar "
        If Me.chkPesquisa.Value = True Then
            sql = sql & " WHERE " & ProcurarPor & " LIKE '%" & Me.txtPesquisa.Value & "%' "
        
        ElseIf Me.chkPesquisa.Value = False Then
            sql = sql & " WHERE " & ProcurarPor & " LIKE '" & Me.txtPesquisa.Value & "%'  "
        End If
        If Me.txtDatafinal.Value <> "" And Me.txtDatainicial.Value <> "" Then
          sql = sql & " And " & "Data_Inicial BETWEEN #" & Format(txtDatainicial.Value, "m/d/yyyy") & "# AND #" & Format(txtDatafinal.Value, "m/d/yyyy") & "#"
        End If
        
        sql = sql & Ord
        Set banco = New ADODB.Recordset
        cx.Conectar
        banco.Open sql, cx.Conn, adOpenKeyset, adLockOptimistic
 
Postado : 30/09/2012 1:01 pm
(@rilton)
Posts: 232
Reputable Member
Topic starter
 

Reinaldo,
Você tem toda razão, eu estou com muita sede de aprender, e isso está me atrapalhando. As vezes quando empaco em um determinado problema eu fico maluco procurando uma resposta. Eu tenho lido várias apostilas sobre o assunto, porém, eu não estou sabendo como e onde devo aplicar o código, qualquer virgula faz toda uma diferença. Mas a minha pressa toda para criar esse formulário se deve ao fato de querer mostrar trabalho para meu chefe. Quero mostar resultado, e quando sobra tempo no meu trabalho eu me dedico para implementar melhorias nos processos. Mas como você disse se eu fosse um pouco mais calmo as vezes eu aprenderia mais.
Quero te agradecer pelas orientações, e pelo código me passado. Vou ir com mais calma agora, tenho que entender os meios para chegar ao fim. Mais uma vez, Obrigado!

 
Postado : 30/09/2012 1:30 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Apesar de o tópico estar como resolvido, o que o Reinaldo postou está correto, montar instrução SQL é um saco, com perdão da palavra, eu já sofri muito e ainda me bato um pouco, mas como ultimamente não tenho tido tempo nem de voltar a lidar com excel, até meus projetos tive de parar momentaneamente, até esta época De eleições passarem, no tópico Biblioteca cheguei a anexar um arquivo que talvez ajude :
Filtrar ListView Criterios Datas e Texto
viewtopic.php?f=21&t=3586

É simplório, mas é uma dica.

Outtro link que acho bem interessante e já me ajudou muito é o abaixo :
SQL BETWEEN Operator
http://www.w3schools.com/Sql/sql_between.asp

Vale a pena dar uma estudada.

[]s

 
Postado : 30/09/2012 3:43 pm
(@rilton)
Posts: 232
Reputable Member
Topic starter
 

Mauro,

Concordo plenamente, ainda mais para quem não entende muito do assunto, to quebrando a cabeça aqui para aprender sobre a intrução sql.
Deixa eu te perguntar Mauro, da mesma formar que eu visualizo os dados do access no form... tem como eu trazer gráficos do access para meu formulário?

 
Postado : 30/09/2012 3:59 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Rilton, não sou expert em Access, praticamente não utilizo, agora se este seu tópico já foi resolvido, o ideal eria abrir um outro com esta questão expecifiica, assim ficará mais fácil quando utilizarem o recurso pesquisar.

Voltando a questão, os Graficos que vão para um formulário geralmente são figuras criadas a partir do grafico gerado no excel,sendo assim acredito que teriamos que trazer os dados para uma planilha, gerar o grafico e depois leva-lo até o formulário, de umaolhada nestes links se ajuda :

Como não utilizo Acces, não cheguei a testar a rotina que postaram :
Projeto Access - Grafico do Excel
http://comunidade.itlab.com.br/eve/foru ... 2931091371

Criando imagem apartir de intervalo celulas
http://www.tomasvasquez.com.br/forum/vi ... 1386#p1386

Modelo Cadastro V3 - Com grafico
http://www.tomasvasquez.com.br/forum/vi ... Gjp0oEsoWk

[]s

 
Postado : 30/09/2012 7:01 pm
(@rilton)
Posts: 232
Reputable Member
Topic starter
 

Mauro,
Obrigado pelas recomendações. Em relação aos gráficos, eu pensei da mesma forma, caso eu não consiga gerar o gráfico no access e trazer para o formulário (encurtar caminhos) , terei de criar uma conexão de uma planilha no excel com meu bando de dados, daí vou conseguir gerar o gráfico no excel e jogar no formulário. Vou abrir um novo tópico para o debate de conhecimentos, se eu conseguir achar uma resposta para não precisar criar essa conexão, irei postar um modelo aqui no forum.
Mais uma vez, obrigado Mauro pela orientações dadas.

 
Postado : 30/09/2012 8:55 pm