Access - Visual Basic (Dor Cabeça)

Blink, tu quando queres enviar uma determinada variável (p.e. XPTO)para uma textbox do form que métodos mais fidedignos há para o fazer?

Eu costumo usar um que é Textbox.Value = "XPTO" , mas é estranho que nem sempre resulta [8b] nunca percebi bem pq ... costumas usar mais alguma instrução melhor?
 
Last edited:
Uso:

Me.Textbox = "XPTO"

Mas o que usas deveria funcionar sem problemas.
Há algumas situações particulares em que tens uma textbox ligada a um campo de uma tabela, e se tiverem o mesmo nome a "coisa" não funciona bem.
É boa prática os nomes das textboxes terem um prefixo, para as destingir dos nomes dos campos. Se o campo da tabela se chamar "NOME" a textbox deve chamar-se "txtNOME".
 
Uso:

Me.Textbox = "XPTO"

Mas o que usas deveria funcionar sem problemas.
Há algumas situações particulares em que tens uma textbox ligada a um campo de uma tabela, e se tiverem o mesmo nome a "coisa" não funciona bem.
É boa prática os nomes das textboxes terem um prefixo, para as destingir dos nomes dos campos. Se o campo da tabela se chamar "NOME" a textbox deve chamar-se "txtNOME".

Já percebi o problema que tava a ter ... é que estava a fazer num form1 um botão que no evento ao fazer click, abria um Form2 e atribuia determinados valores ... tive que alterar a instrução para

Forms!Form2!Textbox = "XPTO"


ihihihih o access tem sempre razão ... embora me dê algumas dores de cabeça [8b] (é o que dá ser amador :) )
 
Blink mais uma duvida [8b]

Tou com um problema na instrução Select.

Tenho uma Query (Relatorio_consignacoes1) que é filtro à tabela (Cab_Ord_Manobras).
No meu form o utilizador introduz duas datas no text7 e text9 (campos textbox do form) e depois quero fazer instrução VBA para me actualizar o filtro na query.

Tou a utilizar a seguinte instrução

'############
datainicio = Text7.Value
datafim = Text9.Value
CurrentDb.QueryDefs("Relatorio_consignacoes1").SQL = "Select * From Cab_Ord_Manobras Where Inicio >= #'& datainicio &'# AND Fim <= #'& datafim &'#;"
'###########


Nota: Inicio e Fim são os campos da tabela que têm das datas que quero filtrar.
Nota2: sei que poderia por o filtro directamente na Query, mas como tenho algumas vezes que fazer o tratamento das datas tem mesmo que ser via programação ...

Onde achas que está aqui incorrecto

Obrigado ajuda
 
Viva,

Penso que o erro está na ausência de aspas, deverá ser algo do género:

CurrentDb.QueryDefs("Relatorio_consignacoes1").SQL = "Select * From Cab_Ord_Manobras Where Inicio >= #" & datainicio & "# AND Fim <= #" & datafim & "#;"

Cmpt
 
Era isso mesmo bbaixo apr:)

PS: Muito obrigado mesmo pela vossa ajuda ... sei que por vezes podem ser duvidas se calhar um pouco basicas para vocês mas nem imaginam a ajuda que dão:)
 
Mais uma pequena duvida:sh)

Queria enviar dias variaveis em programação para dentro de um relatorio

'######
datainicio = Text7.Value
datafim = Text9.Value

' Após algum tratamento em programação, irei ficar com duas data que é datainicio e datafim, o meu objectivo é colocar essas variaveis numa Textbox do relatorio que vou previsualizar


DoCmd.OpenReport "ReportPlanoIndisponibilidades", acViewPreview
Reports!ReportPlanoIndisponibilidades!text2 = datainicio
Reports!ReportPlanoIndisponibilidades!text4 = datafim

Nota: Text2 e Text4 são nome textbox no report

não me escreve nada nos campos :S
 
Last edited:
bbaixo muito obrigado.

Sim realmente o teu exemplo funciona bem e percebi como fizeste ... curiosamente nunca tinha feito instruções dentro do «action» do report e funciona lindamente.
Mas no meu não funcionou mas sei porque embora não perceba. Com os Addwatch vejo que quando entra dentro da

Private Sub Report_Activate()

ele perde os valores para essas variaveis.

Mas no teu não perdeu ... declaras-te em algum local as variáveis?
 
Se reparares no modulo "Module1" foi aí que declarei uma variável pública (Public strTexto1 as String)...

A acção do botão no formulário atribui o valor do textbox do formulário a esta variável pública e o resto penso que já percebeste...
 
Qual é o método que usam para copiar os dados de uma consulta para uma tabela.

Vamos supor que tinha a Query (Consulta1) e queria enviar os dados para uma Table vazia (Tabela2)

O que estou a tentar usar é:

CurrentDb.TableDefs("Tabela2").SQL = "Select * INTO Tabela2 From (Select * From Tabela1 Where F1 > Date() order by F1)"

Atenção: (Select * From Tabela1 Where F1 > Date() order by F1) > Filtro Consulta1

Mas não estou a ter grande sucesso :S


Mais uma vez obrigado ajuda.
 
Podes experimentar:

DoCmd.RunSQL "INSERT INTO Tabela2 (Campo1,Campo2,Campo3) SELECT Campo1,Campo2,Campo3 FROM Tabela1 WHERE F1>Date() Order by F1"

A discriminação dos nomes dos campos não é obrigatória se as 2 tabelas tiverem a mesma estrutura (podes usar o asterisco).
Mas esta utilização do asterisco é má prática e totalmente desaconselhado.
 
Podes experimentar:

DoCmd.RunSQL "INSERT INTO Tabela2 (Campo1,Campo2,Campo3) SELECT Campo1,Campo2,Campo3 FROM Tabela1 WHERE F1>Date() Order by F1"

A discriminação dos nomes dos campos não é obrigatória se as 2 tabelas tiverem a mesma estrutura (podes usar o asterisco).
Mas esta utilização do asterisco é má prática e totalmente desaconselhado.

Blink, mas diz-me uma coisa.

Quando dizes prática asterisco desaconselhada, imagina a situação.


Tens Tabela com campo A1, A2 e A3
Tens Consulta com campo A1, A2 e A3.

Na instrução SQL discriminares os campos A1, A2 e A3 ou colocares o (*) é diferente? :confused:
 
Nesse exemplo podes usar o asterisco, o resultado vai ser o mesmo.
Mas, se no futuro alterares uma das tabelas e acrescentares um novo campo, o código deixa de funcionar.
Se uma das colunas da tabela destino for AutoNumber também não corre muito bem...
 
Essa instrução não me correu muito bem ...não sei pq ele não gostou do Insert Into.

O que utilizei e resultou foi:

DoCmd.RunSQL "SELECT * INTO Tabela2 FROM Tabela1 WHERE F1 > Date() Order by F1"

Tenho que ter cuidado com os asteristos tou a ver [8b].

Obrigado ajuda :) ...

Mais duvidas viram dentro em breve :)
 
Olá :)

Aqui vai uma nova duvida existencial entre mim VS Access :)

Tenho uma textbox associada a uma tabela.
Tenho um Dcount para essa tabela.

Quando o utilizador apaga o que está na Textbox o meu Dcount não consegue contar a 'cela' da tabela apagada.

Já tentei o "", " ", Empty, Null [8b]

A que corresponde uma 'cela' da tabela apagada?


Obrigado vossa ajuda
 
Não percebi o que é a "cela"...

Quando apagas o conteúdo da textbox não estás a apagar o registo (a linha da tabela). Ela continua a existir.
Depende como definiste o DCOUNT. Mostra lá o código.
 
Eu se calhar não me expliquei bem ...

Imagina ... exportei uma folha de excel para uma tabela do access. Quero contar quantos campos de uma coluna estão em branco.

tou usar:
Alarmes - Tabela
deparamento - coluna da tabela


e=""
e1 = " "
h1 = Empty
h2 = Null

Branco = DCount("*", "Alarmes", "[Departamento]='" & e & "'OR [Departamento]='" & e1 & "'OR [Departamento]='" & h1 & "'OR [Departamento]='" & h2 & "'")


(estas três opções é em desespero de causa LOL
 
Last edited:
Valores NULL e EMPTY têm um tratamento especial. Não podes verificar através da igualdade.
existem as funções ISNULL(campo) e ISEMPTY(campo) para o efeito.
Para a verificação de valor nulo podes usar também a forma SQL standard "WHERE campo IS NULL"

Ou seja, deve ser assim:

resultado= DCount("*", "tabela", "campo='' or campo=' ' or isempty(campo) or campo is null")
 
Back
Top