Humm
Membros-
Total de itens
570 -
Registro em
-
Última visita
Tudo que Humm postou
-
boa iceguy.. realmente faz todo sentido, select do select vlw
-
ajuste a propriedade de dados do form para modo entrada de dados
-
sim.. o problema é que SQL via vba só se da bem com datas no formato MM/DD/YYYY ou seja, na hora de calcular as datas ou comparar, tenho que usar assim.. e na hora de exibir, coloco em DD/MM/YYYY pode dar como resolvido
-
eu sempre faço isso por preguiça de montar a sql manualmente.. e eu já percebi que: 1) consultas que tem como FROM outra consulta, ou seja, query da query, não funcionam no VBA.. ele só aceita como source tabelas. 2) se você tiver aspas na SQL, vai ter q duplica-las no codigo.. exemplo: format(campo,""dd/mm/yy"").. 3) calculos com datas so funcionam no formato mm/dd/yyyy.. 4) se você em algum momento renomear na query um campo do tipo DATA, esse campo passa a ser do tipo texto. exemplo: SELECT Format(DATA,"DD/MM/YY") AS DATA_ABR FROM então o valor de DATA_ABR apesar de vir no formato especificado, passa a ser do tipo texto. deve-se usar a função Cdate() antes para converter a saida da função format() para o tipo data: SELECT Cdate(Format(DATA,"DD/MM/YY")) AS DATA_ABR FROM =)
-
bom apenas inverti o formato para mm/dd/yyyy e agora aparentemente parece que ta tudo ok.. então a SQL não trabalha bem fora desse formato?
-
então, já percebi o seguinte.. como o campo é do tipo data e no formato data geral( data e hora ) eu sempre converto antes quando so quero a data.. mas ao converter, percebi que o access deixa de entender que o tipo do valor é data e acha que é texto testei isso numa consulta simples.. tambem dava o mesmo erro.. mas ao usar a funcao cdate(format(dt_hr;"dd/mm/yyyy")) para obrigar o valor formatado a ser do tipo data, a consulta passou a funcionar.. pois está tratando dados como formato data e não texto. tentei fazer o mesmo na sql do vba mas não surtiu efeito algum. não entendi o q é esse adDBdate pode dar um exemplo?
-
então tenho um codigo pra fazer resumo do movimento financeiro.. tenho um form onde eu defino a data inicial e a data final do que será pesquisado e um botao pra gerar a saida do resultado: Private Sub BT_PRINT_Click() Dim conn As ADODB.Connection Dim cmd As ADODB.Command Dim rs As ADODB.Recordset Set conn = CurrentProject.Connection Set cmd = New ADODB.Command cmd.ActiveConnection = conn cmd.CommandText = "SELECT Format([DT_HR],""dd/mm/yyyy"") AS DATA, FORMAS_PGTO.FORMA, Sum(PEDIDOS_PGTOS.Val) AS TOTAL " & _ "FROM (PEDIDOS_PGTOS INNER JOIN PEDIDOS ON PEDIDOS_PGTOS.COD_PED = PEDIDOS.COD_PED) INNER JOIN FORMAS_PGTO ON PEDIDOS_PGTOS.FORMA = FORMAS_PGTO.COD_FORMA " & _ "GROUP BY Format([DT_HR],""dd/mm/yyyy""), FORMAS_PGTO.FORMA " & _ "HAVING (((Format([DT_HR],""dd/mm/yyyy"")) BETWEEN #" & Me.DT_IN & "# AND #" & Me.DT_OUT & "#)) " & _ "ORDER BY Format([DT_HR],""dd/mm/yyyy"") DESC , FORMAS_PGTO.FORMA" Set rs = cmd.Execute port = DLookup("[prnport]", "app") fanta = DLookup("[fant]", "config") If rs.BOF And rs.EOF Then MsgBox "Não existe movimento no período selecionado!", vbInformation, "Extratos e Movimentos" GoTo SAIR End If 'Open port For Output As #1 Debug.Print fanta Debug.Print "------------------------------------------------" Debug.Print " RESUMO DE MOVIMENTO " Debug.Print "------------------------------------------------" Debug.Print "PERIODO: DE " & Format(Me.DT_IN, "DD/MM/YY") & " ATÉ " & Format(Me.DT_OUT, "DD/MM/YY") Debug.Print "" rs.MoveFirst DATAV = rs("data") datac = rs("data") Do While Not rs.EOF If rs("data") = DATAV Then Debug.Print rs("data") Do While datac = DATAV Debug.Print Replace(rs("FORMA") & Space(32 - Len(rs("FORMA")) + Len(Format(rs("TOTAL"), "CURRENCY"))), " ", ".") & Format(rs("TOTAL"), "CURRENCY") rs.MoveNext If rs.EOF Then GoTo TERMINA End If datac = rs("DATA") Loop Else T_DIA = DLookup("[DTOTAL]", "FEC_T_DIA", "[DATA] = " & "#" & DATAV & "#") Debug.Print "TOTAL" & Replace(Space(43 - Len(Format(T_DIA, "CURRENCY"))), " ", ".") & Format(T_DIA, "CURRENCY") Debug.Print " " DATAV = rs("data") End If Loop TERMINA: T_DIA = DLookup("[DTOTAL]", "FEC_T_DIA", "[DATA] = " & "#" & DATAV & "#") Debug.Print "TOTAL" & Replace(Space(43 - Len(Format(T_DIA, "CURRENCY"))), " ", ".") & Format(T_DIA, "CURRENCY") FORMA_TG = DLookup("[TG]", "FEC_TG_FORMA") Debug.Print "" Debug.Print "TOTAL GERAL DO PERIODO" & Replace(Space(26 - Len(Format(FORMA_TG, "CURRENCY"))), " ", ".") & Format(FORMA_TG, "CURRENCY") Debug.Print "IMPRESSO EM " & Now() 'Close #1 SAIR: cmd.ActiveConnection.Close Set rs = Nothing Set cmd = Nothing Set conn = Nothing End Sub pra evitar gastar papel nos testes, to usando debug.print pra ver o resultado.. então, olha essa: nas tabelas de dados, tenho movimentos em apenas 3 datas.. 21/07/2011 22/07/2011 24/07/2011 se eu seleciono entre 01/07/2011 e 31/07/2011 da esse resultado: Restaurante La Fazendinha ------------------------------------------------ RESUMO DE MOVIMENTO ------------------------------------------------ PERIODO: DE 01/08/11 ATÉ 31/08/11 24/07/2011 DINHEIRO................................R$ 50,00 TOTAL...................................R$ 50,00 22/07/2011 DINHEIRO................................R$ 50,00 VISA....................................R$ 25,00 TOTAL...................................R$ 75,00 21/07/2011 CHEQUE..................................R$ 33,00 DINHEIRO................................R$ 17,00 TOTAL...................................R$ 50,00 TOTAL GERAL DO PERIODO.................R$ 175,00 IMPRESSO EM 11/08/2011 10:05:11 não deveria acontecer isso.. pois no mes 08 não tem movimento. se eu seleciono 01/07/2011 e 01/08/2011 ele diz que não há movimento, sendo que existe.. se eu seleciono somente as datas que tem, ele da o retorno certo.. porque a sql ora funciona ora não?
-
não rapaz, o codigo funciona.. =) o problema era com a impressão. já resolvi dando um close #1 no final de cada bloco.. valeu
-
seguinte.. tenho um codigo que manda imprimir para uma mini impressora bematech diretamente pela LPT1.. então esse codigo imprime 3 vias de um recibo.. acontece que eu quero pausar cada via com uma pergunta pra saber se foi impresso corretamente, como ta no codigo.. coloco a msgbox no local correto, mas ao rodar o codigo, ela começa a imprimir e para na metade do primeiro recibo aguardando eu responder a msgbox.. como fazer para ela imprimir tudo até cada msgbox? já resolvi.. é so dar um close #1 para cada bloco de impressao.
-
deu certo.. mas descobri uma coisa.. o VBA não aceita que voce use como fonte de dados uma consulta.. só tabelas.
-
e ae velho.. deu tipos incompativeis na linha: Set cmd = New ADODB.Connection
-
então, tenho uma consulta que já me retorna os valores que quero.. quero um codigo que me de uma msgbox para cada registro dessa consulta.. como fazer? acho que tem que ser com o for each campo in conjunto mas ainda não entendi como chegar até ai.. Dim strQ As String Dim db As Database Dim rs As DAO.Recordset strQ = "SELECT prod, qtde, preço FROM TIK_ITENS" Set db = CurrentDb() Set rs = db.OpenRecordset(strQ, dbOpenSnapshot) With rs .MoveFirst For Each prod In rs MsgBox prod & " " & QTDE & " " & preço Next prod End With não ta dando certo, da erro na linha do set rs erro em tempo de execucao 3061 parametros insuficientes. eram esperados 1 alguém da um help?
-
vai ter que usar o evento afterupdate (apos atualizar ) no campo em questao e rodar um codigo com varios dlookups, um para cada campo que você quer auto preencher me.seucampo.value = dlookup("[campo_que_contem_o_valor]", "tabela_ou_consulta", [criterio]) pesquise sobre isso
-
rode em modo debug verificando cada variavel, até pra ver se o banco ta sendo conectado, se a tabela ta sendo encontrada.. o arquivo do seu bd não tem extensão accdb ou mdb ? e outra dica muito importante, evite o uso de caracteres especiais ó é etc
-
não seria: [data] - 1 ??
-
no caso são numeros mesmo.. mas os dados são do tipo inteiro.. mesmo assim os numeros devem estar entre aspas?
-
bom.. a aplicacao está dividida em front e back end.. a forma q faço backup é programatica, onde é criado uma copia do bd.accdb como restaurar um backup sem ter q sair da aplicacao?
-
fiz sim, alias foi a alternativa q achei pra contornar o problema.. usando o codigo em uma consulta acrescimo, funciona normal. se fosse problema de tipos de dados, daria erro de tipos incompativeis.. mas curiosamente o erro que dá, é que ele diz que a quantidade de campos de destino não bate com a quantidade de campos de valor.. como se eu tivesse 4 campos de destino na tabela pra acrescentar dados, e so tivesse enviando 3 valores, saca? por exemplo, quer reproduzir o erro faça assim: INSERT INTO TABELA ( CAMPO1, CAMPO2, CAMPO3 ) VALUES ( "A", "B" ) e essa? quem explica? já debuguei o codigo.. verificando as variaveis e seus valores no momento da execução, ta tudo certo! so que o vba implicou com esse INSERT
-
Dim strFAT As Integer Dim strREM, TOTD As Double Dim strSQL As String Me.Refresh strREM = DLookup("[TIPO]", "DELIVERS", "[COD_CLI] = " & Me.COD_DELIV) If strREM = 1 Then Else strFAT = DLookup("[V_TIPO]", "DELIVERS", "[COD_CLI] = " & Me.COD_DELIV) If strREM = 2 Then TOTD = (Me.TOTAL_PED * strFAT) / 100 ElseIf strREM = 3 Then TOTD = strFAT End If strSQL = "INSERT INTO ENTREGAS ( COD_PED, REMUN, FATOR, TOTAL ) " & _ "VALUES ( " & Me.COD_PED & ", " & strREM & ", " & strFAT & ", " & TOTD & " );" DoCmd.RunSQL strSQL End If DoCmd.Close DoCmd.OpenForm "ATENDIMENTO" pois é, nesse codigo ai, uma coisa bem estranha ta acontecendo.. aparentemente ta tudo certo, mas ao rodar o codigo, da erro bem no docmd.runsql ele diz que o numero de campos da tabela destino não bate com o numero de valores apresentados.. mas como veem ai no codigo, tem 4 campos de destino para 4 valores.. no debug, ele mostra o valor de cada variavel corretamente.. eu n sei o q ta havendo. alguma luz?
-
consegui, criei uma funcao.. Public Function Concatenar(Origem As String, CampoChave As String, _ CampoConcatenar As String, Chave As Integer) As String Dim db As Database Dim rs As Recordset Dim strSQL, strRetorno As String strSQL = "SELECT " & CampoChave & ", " & CampoConcatenar & " FROM " & Origem & _ " WHERE ([" & CampoChave & "] = " & Chave & ")" Set db = CurrentDb() Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot) strRetorno = "" While Not rs.EOF strRetorno = strRetorno & rs(CampoConcatenar) rs.MoveNext If Not rs.EOF Then strRetorno = strRetorno & ", " End If Wend Concatenar = strRetorno rs.Close End Function funciona da seguinte maneira.. antes de mais nada, deve ser criada uma consulta que lhe retone os dados dessa maneira: [pedido] - [forma] 0001 - dinheiro 0001 - cartao 0002 - dinheiro 0003 - deposito 0003 - dinheiro ela vai servir de base para a funcao, que fiz de forma generica.. para poder usar futuramente com varias consultas da necessidade que eu tiver.. então, crie uma nova consulta.. ai a sintaxe da função: Concatenar(Origem, CampoChave, CampoConcatenar, Chave) Origem = Tabela ou Consulta de Origem dos dados.. no meu caso, Consulta_Teste CampoChave = Nome do campo indexado o qual ordena os registros.. no meu caso, COD_PED CampoConcatenar = Nome do campo a ser concatenado em si mesmo.. no meu caso, FORMA Chave = Valor do CampoChave, ou seja, aqui é o critério de agrupamento.. no meu caso, 1 debug.print concatenar("CONS_TESTE", "COD_PED", "FORMA", 1) dinheiro, cartao
-
salve! vou tentar explicar de forma que de a entender.. tenho uma consulta que me retorna o seguinte: [pedido] - [forma] 0001 - dinheiro 0001 - cartao 0002 - dinheiro 0003 - deposito 0003 - dinheiro gostaria de concatenar os valores da coluna forma agrupados pela coluna pedido de forma que aparecesse assim no resultado da consulta: [pedido] - [forma] 0001 - dinheiro, cartao 0002 - dinheiro 0003 - deposito, dinheiro acho que so vai rolar com criando uma funcao e usando os comandos while mas já tentei e n to consegueindo fazer alguma luz?
-
então, eu estava vendo sobre BD 2007 e 2010.. parece que não há diferença. inclusive ao abrir aqui o BD, ele diz que é versao 2007, 2010 e agora?
-
posso converter em outra versao.. qual você tem? nisso me surgiu uma duvida.. quando eu for distribuir minhas aplicacoes.. se estas usarem banco de dados access 2010, a maquina ao qual vai ser instalada a app, tem q ter no minimo o runtime do access 2010 pra poder funcionar?
-
ta ai.. a senha do BD é: teste a funcao dlookup é disparada no evento keypress(tecla enter) da textbox [senha] do form LOGIN vlw http://www.4shared.com/file/MCfhIDto/SysControl.html
-
claro, alem do BD.. é so o arquivo .sln ??