• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Manhoso

[vb.net 2005 express] - Demasiado cultura...

14 mensagens neste tópico

Boas.

Eu não se será aqui o sitio indicado para a minha dúvida, mas cá vai:

Eu estou a tentar ler uma data de uma bd em access, que introduzi via vb.net. Agora, quando a leio se o dia for mais pequeno do que 12 ele reconhece o dia como mês e vice-versa. Por exemplo, introduzi a data 1 de Novembro de 2007 (1/11/2007) e quando leu, devolveu o seguinte: 11 de Janeiro de 2007 (11/1/2007). Pelo que pude ver por uma pesquisa aqui no pap isto tem a haver com a cultura, certo? A cena é que a cultura do meu prog tá em pt-PT  :)

Sendo assim, alguém me pode ajudar?? :wallbash:

Hasta

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva

o problema e' que o soft grava sempre em MM/DD/YYYY, se sabes que é assim transformas antes de guardar.

Para leres tb sabes que é assim. Ao atribuires a uma variavel do tipo data ele fica logo com esta no teu regional setting...

Sem stress...

Wing

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A cena toda está é que é só se o dia for menor que doze. Para maior que doze funca na boa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes forçar a gravação e a leitura usando um provider.

ex.

DateTime.Now.ToString("yyyy-MM-dd")

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Dim culturename As String = Application.CurrentCulture.Name
Dim myCIintl As New System.Globalization.CultureInfo(Application.CurrentCulture.Name)
Application.CurrentCulture = myCIintl

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Na base de dados tens que ver se o teu campo data como está configurada, ou seja, se não a modificaste ela deve estar com esta configuração MM/DD/YYYY (Mês/Dia/Ano). Deve ser aí que reside o teu problema...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Será pq existem 12 meses ?

No s***.... :wallbash:

Na base de dados tens que ver se o teu campo data como está configurada, ou seja, se não a modificaste ela deve estar com esta configuração MM/DD/YYYY (Mês/Dia/Ano). Deve ser aí que reside o teu problema...

continua na mm. :S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mesmo usando a sugestão do Tiago, devia dar.

pois deveria,mas como disse o vbtipo, o problema está na própria bd. Usando a sugestão do Tiago, teria de mudar o tipo de dados da variável que guarda a data lida/escrita na bd, ou então mudar o tipo de dados do campo da bd. Se bem que a bd ainda só tem dados de teste, sempre me ensinaram que não é boa coisa alterar a bd de acordo com a aplicação...

Alterar o tipo de dados da aplicação não resolve nada, pelo que expliquei acima (bd).

É que só me falta resolver este bug para este projecto ver a luz do dia...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas não modificas a tabela continuas com datetime.

lê os dados da bd para variáveis datetime e fazes a conversão e apresentas os dados num controlo qualquer.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas não modificas a tabela continuas com datetime.

lê os dados da bd para variáveis datetime e fazes a conversão e apresentas os dados num controlo qualquer.

É isso que tenho:

Private Sub contactList_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles contactList.SelectedIndexChanged
	Dim aux As String = ""
	c = New Contacto()
	If contactList.SelectedIndices.Count <> 0 Then
		telfList.Items.Clear()
		emailList.Items.Clear()
		delete_btn.Enabled = True
		alter_btn.Enabled = True

		'mostrar dados
		If c.read(contactList.SelectedItem.ToString) Then
			nome_txt.Text = c.Nome
			morada_txt.Text = c.Morada
			localidade_txt.Text = c.Localidade
			If c.CPostal.Length = 8 And c.CPostal.Contains("-") Then
				aux = c.CPostal.Substring(0, 4)
				prefixo_txt.Text = aux
				aux = c.CPostal.Substring(5)
				sufixo_txt.Text = aux
			End If
			If c.DataNasc.Date = New Date(1900, 1, 1).Date Then
				bday_lbl.Text = "Não disponível"
			Else

				bday_lbl.Text = c.DataNasc.Day & "/" & monthExtent(c.DataNasc.Month) & "/" & c.DataNasc.Year
			End If

			'mostrar números de telefone

			If c.Telefones.Count > 0 Then
				telfList.Items.AddRange(c.Telefones.ToArray)
			End If

			'mostrar emails
			If c.Emails.Count > 0 Then
				emailList.Items.AddRange(c.Emails.ToArray)
			End If
		End If

	Else
		delete_btn.Enabled = False
		alter_btn.Enabled = False
	End If
End Sub

o problema não é a leitura, mas sim a escrita. para escrita, tenho como se segue:

Private Sub insert_btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles insert_btn.Click
	Dim form As New addAlterContact()
	form.Text = "Adicionar Registo"

	'definição dos atributos a inserir
	If form.ShowDialog() = Windows.Forms.DialogResult.OK Then
		With form
			c.Nome = .nome_txt.Text
			c.Morada = .morada_txt.Text
			c.CPostal = .prefixo_txt.Text & "-" & .sufixo_txt.Text
			c.Localidade = .localidade_txt.Text
			If .bday_dtpicker.Value.Date = Now.Date Then
				c.DataNasc = New Date(1900, 1, 1).Date
			Else
				c.DataNasc = .bday_dtpicker.Value.Date
			End If

			'telefones
			If .telfList.Items.Count > 0 Then
				For i As Integer = 0 To .telfList.Items.Count - 1
					c.Telefones.Add(.telfList.Items.Item(i))
				Next
			End If

			'emails
			If .emailList.Items.Count > 0 Then
				For i As Integer = 0 To .emailList.Items.Count - 1
					c.Emails.Add(.emailList.Items.Item(i))
				Next
			End If
		End With

		'inserção do registo
		If c.Insert Then
			MsgBox("Registo introduzido com êxito!")
			loadData()
		End If
	Else
		MsgBox("Registo não foi introduzido!")
	End If

End Sub

Hasta

vbtipo, a tua ideia e no formato (format) certo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ler é fácil apresentas os dados em pt-pt.

Para inserir datas tem que as converter aas datas para inglês mm-dd-yy.

    Private Sub DateTimePicker1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DateTimePicker1.ValueChanged
        Me.DateTimePicker1.CustomFormat = "mm,dd,yy"
        Me.DateTimePicker1.Format = DateTimePickerFormat.Custom
        Dim myCIintl As New System.Globalization.CultureInfo("en-US")
        Application.CurrentCulture = myCIintl
        Dim data As DateTime
        data = Me.DateTimePicker1.Value
        Me.TextBox1.Text = data.ToShortDateString
        'MessageBox.Show(Me.DateTimePicker1.Value)
    End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tb ja tive esse problema...

adiciona a culture pt-pt e isso fica logo a bombar...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora