Humm
Membros-
Total de itens
570 -
Registro em
-
Última visita
Tudo que Humm postou
-
então, fiz assim: Module bas_DLookup Function DLookup(ByVal SearchFld As String, ByVal SearchTbl As String, ByVal _ SearchCriteria As String) As Object Dim minhaConexao As OleDbConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Syscontrol\BD.accdb;Jet OLEDB:Database Password=xxxxx;") Dim Cmd As OleDb.OleDbCommand Dim Reader As OleDb.OleDbDataReader Dim Value As Object = DBNull.Value minhaConexao.Open() DLookup = Nothing Cmd.Connection = minhaConexao Cmd = New OleDb.OleDbCommand("SELECT " & SearchFld & " FROM " & SearchTbl & " WHERE " & SearchCriteria) Reader = Cmd.ExecuteReader() If Microsoft.VisualBasic.Left(SearchFld, 1) = "[" Then SearchFld = Microsoft.VisualBasic.Right(SearchFld, Microsoft.VisualBasic.Len(SearchFld) - 1) End If If Microsoft.VisualBasic.Right(SearchFld, 1) = "]" Then SearchFld = Microsoft.VisualBasic.Left(SearchFld, Microsoft.VisualBasic.Len(SearchFld) - 1) End If If (Reader.Read()) Then Value = IIf(Reader.GetValue(Reader.GetOrdinal(SearchFld)) Is Nothing, "", Reader.GetValue(Reader.GetOrdinal(SearchFld))) End If DLookup = Value End Function End Module agora ele passa pelo debug e executa o form.. mas quando tento disparar uma funcao dlookup da erro: Nullreferenceexception não foi manipulada. Object reference not set to an instance of an object. e aponta para linha: Cmd.Connection = minhaConexao rapaz, penozo de fazer isso funcionar. como eu posso testar uma conexao simples pra extrair apenas um dado só pra efeito de teste? por exemplo.. tenho uma sqlstring já montada: my_user aponta para o text digitado de uma textbox "SELECT USUARIOS.USER, USUARIOS.ATIVO FROM(USUARIOS) WHERE (((USUARIOS.USER)=" & my_user & ") AND ((USUARIOS.ATIVO)=True));" como faço para um evento qualquer conectar o accdb, executar essa sql e atribuir o resultado dela numa variavel TEMP ?
-
experimenta usar um dlookup como eu usei pra buscar o valor que você quer. esse docmd.close não precisa tem os demais parametros.. atribua o valor do me.txtsubtotal diretamente no controle, ao invés de por codigo.. tente fazer o maximo possivel como eu fiz, no exemplo que postei tem todos os procedimentos
-
sem problemas.. eu já tinha colocado o NEW la pra testar, mas ao fazer isso, ele acusa que OleDBConnection não esta declarado como se não fosse uma function sinceramente eu to achando que OleDBConnection funciona para VB 2008.. mas para o vb2010 acho que é diferente o comando.. parece q tiveram trocentas mil mudanças entre as versoes.. tornaram obsoletos varios comandos, e mudaram outros
-
acho que tem a ver com voce estar fazendo algo de errado. pois aqui funciona normal. http://www.4shared.com/file/BERtR0Ma/teste.html
-
Module bas_DLookup Function DLookup(ByVal SearchFld As String, ByVal SearchTbl As String, ByVal _ SearchCriteria As String) As Object Dim minhaConexao As OleDBConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Syscontrol\BD.accdb;Jet OLEDB:Database Password=xxxxxxxx;") Dim Cmd As OleDb.OleDbCommand Dim Reader As OleDb.OleDbDataReader Dim Value As Object = DBNull.Value DLookup = Nothing Cmd.Connection = minhaConexao Cmd = New OleDb.OleDbCommand("SELECT " & SearchFld & " FROM " & SearchTbl & " WHERE " & SearchCriteria) Reader = Cmd.ExecuteReader() If Microsoft.VisualBasic.Left(SearchFld, 1) = "[" Then SearchFld = Microsoft.VisualBasic.Right(SearchFld, Microsoft.VisualBasic.Len(SearchFld) - 1) End If If Microsoft.VisualBasic.Right(SearchFld, 1) = "]" Then SearchFld = Microsoft.VisualBasic.Left(SearchFld, Microsoft.VisualBasic.Len(SearchFld) - 1) End If If (Reader.Read()) Then Value = IIf(Reader.GetValue(Reader.GetOrdinal(SearchFld)) Is Nothing, "", Reader.GetValue(Reader.GetOrdinal(SearchFld))) End If DLookup = Value End Function End Module DEBUG: Erro 1 Limites de matriz não podem aparecer em especificadores de tipo. C:\Users\Andre\Documents\Visual Studio 2010\Projects\SysControl\SysControl\bas_DLookup.vb 4 45 SysControl Erro 2 'minhaConexao' não está declarado. Ele pode ser inacessível devido ao seu nível de proteção. C:\Users\Andre\Documents\Visual Studio 2010\Projects\SysControl\SysControl\bas_DLookup.vb 10 26 SysControl
-
use o evento ON_LOAD do form principal e coque lá essa condição if isnull(me.seucampo) or me.seucampo = 0 then docmd.close end if
-
antes de mais nada.. grato. fiz como indicou, ajustei a string para o path do bd, porem no debug essa linha da string fica sublinhada e quando você deixa o mouse em cima da a mensagem: "limites de matriz não podem aparecer em especificadores do tipo" ahhh só um detalhe.. esse BD é em access 2010, então o OLEDB.12 seria OLEDB.14 correto? outro detalhe é que esse DB é protegido por senha.. onde eu adiciona a senha na string?
-
salve galera.. bom, sou intermediario em programacao VBA.. mas devido a dependência das aplicações access ao proprio access, e tambem por querer seguir um caminho mais profissional, decidi experimentar o visual studio 2010 e deixar o access de lado como aplicação.. por enquanto usa-lo so como BD. porem no futuro espero migrar tambem pro mysql ou firebird que são SGBDs bem amigaveis. mas tenho percebido que há muita diferença entre vba e vb.net e tambem a ausencia de funcoes agregadas muito comuns como dlookup, seimed, etc.. eu ainda não entendi como um windows form, ou o projeto em si dentro do visual studio faz pra se conectar ao banco de dados.. minha ideia era deixar os forms não conectados a fonte de dados.. sendo assim.. num cadastro de clientes por exemplo, o form so captura as variaveis das textboxs e depois ao apertar em salvar, uma SQL INSERT insere os dados no BD.. o mesmo seria ao editar dados e tambem de excluir. o lance é que eu não to entendendo bulhufas de como rodar SQL de forma programatica.. como conectar no BD.. etc e tal.. por exemplo, eu to empacado num form de entrada da aplicacao.. esse form deveria comparar os dados da textbox usuario com os usuarios da tabela USUARIOS me retornando valor boleano true ou false caso não encontre o usuario.. com dllokup eu faria isso facil.. até tentei achar alguma function similar pelo google, mas as que achei não funcionam. por exemplo essa: Function DLookup(ByVal SearchFld As String, ByVal SearchTbl As String, ByVal _ SearchCriteria As String) As Object Dim Cmd As OleDb.OleDbCommand Dim Reader As OleDb.OleDbDataReader Dim Value As Object = DBNull.Value DLookup = Nothing Cmd = New OleDb.OleDbCommand("SELECT " & SearchFld & " FROM " & SearchTbl & " WHERE " & SearchCriteria) Reader = Cmd.ExecuteReader() If Microsoft.VisualBasic.Left(SearchFld, 1) = "[" Then SearchFld = Microsoft.VisualBasic.Right(SearchFld, Microsoft.VisualBasic.Len(SearchFld) - 1) End If If Microsoft.VisualBasic.Right(SearchFld, 1) = "]" Then SearchFld = Microsoft.VisualBasic.Left(SearchFld, Microsoft.VisualBasic.Len(SearchFld) - 1) End If If (Reader.Read()) Then Value = IIf(Reader.GetValue(Reader.GetOrdinal(SearchFld)) Is Nothing, "", Reader.GetValue(Reader.GetOrdinal(SearchFld))) End If DLookup = Value End Function mas ao usar a funcao, da erro: system.InvalidOperationExcepted {"ExecuteReader: Connection property has not been initialized."} e aponta para a linha: Reader = Cmd.ExecuteReader() bom, já procurei no google sobre varias formas de se conectar, obter, incluir, editar e apagar dados ao BD mas não to entendendo nada.. se alguém tiver co mboa vontade de explicar.. ou indicar material pra leitura.. fico grato valeu
-
não entendi a duvida.. você quer que aconteça algo na tabela mas q nenhum programa faça isso.. ai fica dificil
-
e ae.. beleza? eu ate já fiz uma ferramenta quase completa de compilação em accde que tem varias opcoes, inclusive de desativar o SHIFT. ta nesse post http://scriptbrasil.com.br/forum/index.php...&pid=621759 abraços
-
nunca vi.. tente a reinstalacao do access ou a ferramenta de reparacao do office se tiver.
-
1- vai ter que criar uma tabela, ou obter em algum lugar esses dados de todos os estados, e todas as cidades, e tambem o DDD de cada cidade.. so com isso, voce pode fazer rotinas em VBA para colocar automaticamente o DDD. 2- na estrutura do BD, no campo em questao, voce pode definir que não pode ter valor repetido. existe essa propriedade la. 3- só colocar uma rotina no evento AO CARREGAR ou no evento NO ATUAL do form apontando um evento setfocus para o campo em questao, ou colocando esse campo na primeira ordem de tabulação. me.seucampo.setfocus 4- não é so você colocar isso no design do relatorio? 5- mesma coisa.. no evento on_load(AO CARREGAR) do form crie uma rotina para apontar para um novo registro: docmd.gotorecord accnewrecord
-
não.. o 2010 é como o 2007 so q melhorado. voce pode rodar um app feito em 2010 por exemplo, numa maquina com 2003 ou 2007. é so instalar o runtime do 2010 que tem pra download na propria MS. deve ter uns 60MB o runtime e permite rodar apps de access em maquinas sem office ou access.
-
so pra ressaltar.. as vezes o leitor pode ter dificuldade em ler codigos impressos em jato de tinta... isso se da porque as vezes as cabeças da impressora estao desalinhadas e acabam desenhando as barras desniveladas.. nos nem percebemos isso olhando.. mas o sensor percebe. por isso sempre recomenda-se usar impressoras a laser para imprimir codigos de barra.
-
leam.. outras dicas pra você anotar e fazer testes futuros.. - divida suas aplicacoes em front end / back end sempre travando o bd com senha - coloque sistema anti shift ao iniciar - experimente usar o access 2010, tem bem mais recursos, seguranca muito boa e ta bonitao - crie instalador para suas apps.. eu gosto muito de usar o inno setup para seu primeiro sistema, ta muito bom.. eu acho que voce usa o mesmo metodo que eu usava quando comecei a programar.. ia fazendo o programa, e a medida que as necessidades iam aparecendo eu ia implementando.. esse metodo funciona mas é muito trabalhoso. por isso te falei sobre modelar banco de dados em modo DER. no modelo DER você cria um desenho já estabelecendo todas as necessidades desde o comeco.. então ela vai servir de mapa para a elaboracao do app. outra tendencia que segui foi de abandonar o uso de menus superiores. no momento eu to desenvolvendo app usando janelas popups soltas do access.. to fazendo um app de estoque personalizado pra um restaurante e já ta em fase final.. to so implementando o sistema anti pirataria.. ficando pronto, posto pra você ver como ficou.. abracos
-
nas propriedades de eventos do form, tem o evento onload(ao carregar) onde você pode colocar uma rotina que faça uma sql de acrescimo a tabela de logs use o comando docmd.runsql ai crie um SQL de acrescimo q pegue o usuario logado, a data e hora atual com a função now() e ta tudo resolvido. exemplo: Private Sub Form_Load() Dim strSQL As String strLocal = Me.Caption strSQL = "INSERT INTO LOGS ( DATA, USER, FORM)" & _ "SELECT Now(), USER_LOGADO.ID, """ & strLocal & """ FROM USER_LOGADO;" DoCmd.SetWarnings False DoCmd.RunSQL strSQL DoCmd.SetWarnings True End Sub no exemplo eu tenho uma tabela chamada LOGS com os campos DATA, USER, FORM então a SQL cria uma entrada nova nessa tabela a cada vez que alguém carrega o formulario DATA recebe o valor de now() que é a data e hora atual do sistema USER recebe o valor USER_LOGADO.ID que é uma consulta que checa o usuario logado no momento FORM recebe o valor do nome de legenda do formulario aberto (me.caption) divirta-se
-
opa, como trabalho com desenvolvimento de sistemas, dei uma olhada.. ta bem cru ainda.. mas o caminho é esse =) so uma dica valiosa.. antes de comecar a desenvolver um programa.. de uma atencao bemmmmm especial a modelagem do banco de dados.. eu costumo usar o modelo DER pois fazer mudancas no banco depois de ter iniciado a programacao do app é dose. tambem achei uns erros de portugues hehe... e mais uma dica.. procure sempre tentar fazer o app o mais intuitivo possivel.. ou seja.. pra usuario leigo saber usar sem ter q ficar ensinando.. o lance mais dificil em programar é você prever tudo de errado que um usuario pode fazer no seu programa e criar regras de validacao pra evitar isso.
-
bom, esse erro pode ter varias causas.. se for erro devido a tratamento de valores nulos, você pode usar o NZ() como já disseram.. exemplo.. =soma([campo1]*[campo2]) tratando com NZ() =soma(nz([campo1])*nz([campo2])) o certo é rastrear a causa do erro.. porem se de toda forma voce não conseguir se livrar do ERRO.. use uma funcao seimed() que retorne nulo ou zero quando ocorrer erro. 'sintaxe: 'seimed(expressao; valor se verdadeiro; valor se falso) 'retornando nulo caso erro = verdadeiro: =seimed(iserror([campo_total]); ""; [campo_total]) 'retornando zero em vez de nulo: =seimed(iserror([campo_total]); "0"; [campo_total]) vlw
-
é so colocar formlario em modo ENTRADA DE DADOS
-
isso geralmente ocorre ao tentar abrir um BD feito em 2010 na versao 2007
-
sim, é possivel desde que você tenha uma tabela de indice indicando que codigo se refere a que bairro. ai você pode executar uma consulta atualizacao, adicionando o nome do bairro a um campo novo na tabela que deseja
-
então voce faz errado.. você deveria dividir isso em back end(banco de dados) e front end(aplicacao) assim o banco de dados fica la feliz da vida sem ser tocado e funcionando.. e você faz as alteracoes do seu front end a vontade.. pesquise sobre isso.. mas já sobre o metodo que você usa atualmente, a minha resposta anterior responde a sua pergunta reformulada
-
claro que existe.. opcao dados externos/importar do access.. você pode importar desde a estrutura da tabela, dados ou ambos. ou tambem pode simplesmente importar a tabela com outro nome, dar um ctrl +c nos dados e um ctrl+v na outra tabela. outro metodo é usar uma consulta adição.
-
ai você tem q usar um formulario com subformulario.. no form voce usa origem de dados da tabela de lotes no subform você usa origem de dados da tabela mutuarios então nas propriedades do subform, o objeto PAI voce define o codigo do mutuario, e no objeto filho, o mesmo.
-
=seimed([vl_parc] = 0 OR isnull([vl_parc]);100;([Vl_Parc]-([Vl_Parc]-[TotalRecebido]))/[Vl_Parc]))