Blackvelvet Posted April 13, 2012 at 05:03 PM Report #449038 Posted April 13, 2012 at 05:03 PM Mais uma vez,cá estou a expor duvidas. ? ? O que prentendo para a minha aplicação é o seguinte: Na tabela quero selecionar uma linha, e no evento do botão,mostrar numa janela toda a informação referente á linha selecionada. É possivel fazer uma situação dessas? Há algum link que dê para consultar para ver como se faz? Cumprimentos
Caça Posted April 13, 2012 at 05:51 PM Report #449051 Posted April 13, 2012 at 05:51 PM Cria um formulário com todos os campos para mostrar a informação e depois só tens de passar para lá o valor do campo chave primaria da tabela para ires buscar a informação detalhada. Pedro Martins Não respondo a duvidas por PM
Blackvelvet Posted April 16, 2012 at 01:57 PM Author Report #449408 Posted April 16, 2012 at 01:57 PM Boa tarde. Caça: O meu problema é não saber como se pode fazer isso. Gostava de ter um exemplo para poder estudar e aplicar á minha aplicação. Ja procurei por links,mas não vi nada. Sabes alguns?
Caça Posted April 16, 2012 at 02:09 PM Report #449412 Posted April 16, 2012 at 02:09 PM Link especifico, não, mas já tens o formulário onde vão ser apresentados os detalhes pronto? Se não, cria-o. Pedro Martins Não respondo a duvidas por PM
Blackvelvet Posted April 16, 2012 at 03:00 PM Author Report #449429 Posted April 16, 2012 at 03:00 PM Por acaso nao o tinha criado, porque, no entanto,deparei-me com um outro problema com a inserção de imagens. Como tenho que inserir 2 imagens em 2 picturebox diferentes,assim que seleciono as imagens, ao gravar na bd,só grava 1 das 2. Eu explico melhor. Na tabela tenho os campo fotoWin e fotoOffice ( são as serials de ambos). Seleciono fotos difrentes,mas nos campos aparece a mesma foto do outro campo. Por exemplo: Na picturebox do fotoWin escolho uma flor,na fotoOffice escolho uma cara. Até aqui tudo certo. Ao gravar na bd, no campo fotoWin grava a cara e no campo fotoOffice tb a cara,o que quer dizer que não grava a flor no fotoWin. Para gravar as fotos na bd optei por converter as imagens em bytes,para não ocupar muito a bd. Agradecia a explicação do porque este problema. Deixo o codigo aqui: Dim arqImg As FileStream Dim rImg As StreamReader Dim arqImgem As FileStream Dim oImgem As StreamReader Try ' Texto de ligação à base de dados Dim myConnectionString As String = _ "Data Source=.\SQLEXPRESS; Initial Catalog=Parque; Integrated Security=SSPI;" 'inserir imagem na bd If Len(dlgFicheiro.FileName) <> 0 Then arqImg = New FileStream(dlgFicheiro.FileName, FileMode.Open, FileAccess.Read, FileShare.Read) rImg = New StreamReader(arqImg) Else End If 'inserir imagem na bd If Len(dlgFicheiro.FileName) <> 0 Then arqImgem = New FileStream(dlgFicheiro.FileName, FileMode.Open, FileAccess.Read, FileShare.Read) oImgem = New StreamReader(arqImgem) End If 'declaramos um vetor de bytes para armazenar o conteúdo da imagem a ser salva Dim arqByteArray(arqImg.Length - 1) As Byte arqImg.Read(arqByteArray, 0, arqImg.Length) 'declaramos um vetor de bytes para armazenar o conteúdo da imagem a ser salva/ fotoOffice Dim arquivoByteArray(arqImgem.Length - 1) As Byte arqImgem.Read(arquivoByteArray, 1, arqImgem.Length) ' Comando que irá inserir dados na tabela "Parque" os campos 'que são passados através de parâmetros Dim SQL As String = "INSERT INTO gest_ao ([fotoWin],[fotoOffice],[empresa],[nome_rede],[utilizador],[local],[departamento],[visivel_rede],[sistema_operativo],[licenca_win],[office],[licenca_office],[numero_office],[autenticacao],[office_audit],[dl],[server_cal],[ex_cal],[sql_cal],[user_baan],[user_citrix],[user_internet],[observacao]) VALUES (@fotoWin,@fotoOffice,@empresa, @nome_rede,@utilizador,@local,@departamento,@visivel_rede,@sistema_operativo,@licenca_win,@office,@licenca_office,@numero_office,@autenticacao,@office_audit,@dl,@server_cal,@ex_cal,@sql_cal,@user_baan,@user_citrix,@user_internet,@observacao);" ' Cria uma nova ligação à base de dados Dim connection As New SqlConnection(myConnectionString) ' Criação do comando indicando a instrução e a ligação Dim command As New SqlCommand(SQL, connection) ' Indicação dos parâmetros que serão inseridos command.Parameters.Add("@empresa", SqlDbType.VarChar).Value = cbxEmpresa.Text command.Parameters.Add("@nome_rede", SqlDbType.VarChar).Value = txtNomeRede.Text command.Parameters.Add("@utilizador", SqlDbType.VarChar).Value = txtUtilizador.Text command.Parameters.Add("@local", SqlDbType.VarChar).Value = cbxLocal.Text command.Parameters.Add("@departamento", SqlDbType.VarChar).Value = cbxDepartamento.Text command.Parameters.Add("@visivel_rede", SqlDbType.Int).Value = cbxVisivel_Rede.SelectedIndex command.Parameters.Add("@sistema_operativo", SqlDbType.VarChar).Value = txtSO.Text command.Parameters.Add("@licenca_win", SqlDbType.VarChar).Value = txtSeloWindows.Text command.Parameters.Add("@office", SqlDbType.VarChar).Value = txtOffice.Text command.Parameters.Add("@licenca_office", SqlDbType.VarChar).Value = txtSeloOffice.Text command.Parameters.Add("@numero_office", SqlDbType.Int).Value = txtNOffice.Text command.Parameters.Add("@autenticacao", SqlDbType.VarChar).Value = cbxLegal.Text command.Parameters.Add("@office_audit", SqlDbType.VarChar).Value = txtOfficeAuditoria.Text command.Parameters.Add("@dl", SqlDbType.VarChar).Value = cbxDL.Text command.Parameters.Add("@server_cal", SqlDbType.Int).Value = cbxServer.SelectedIndex command.Parameters.Add("@ex_cal", SqlDbType.Int).Value = cbxEX.SelectedIndex command.Parameters.Add("@sql_cal", SqlDbType.Int).Value = cbxSQL.SelectedIndex command.Parameters.Add("@user_baan", SqlDbType.VarChar).Value = cbxUserBaan.Text command.Parameters.Add("@user_citrix", SqlDbType.VarChar).Value = cbxUserCitrix.Text command.Parameters.Add("@user_internet", SqlDbType.VarChar).Value = cbxUserInternet.Text command.Parameters.Add("@fotoWin", SqlDbType.Image, arqImg.Length).Value = arqByteArray command.Parameters.Add("@fotoOffice", SqlDbType.Image, arqImgem.Length).Value = arquivoByteArray command.Parameters.Add("@observacao", SqlDbType.VarChar).Value = txtObservacoes.Text ' Abre a ligação, executa o comando e guarda em "x" o número de registos inseridos connection.Open() Dim x As Integer = command.ExecuteNonQuery() If x < 1 Then End If ' Fecha a ligação e limpa as variáveis connection.Close() connection = Nothing command = Nothing MsgBox(" Registo inserido com sucesso", MsgBoxStyle.Information) Catch ex As Exception MessageBox.Show("A operação efectuada não retomou qualquer resultado.") End Try EDIT: GeSHi adicionado
Caça Posted April 16, 2012 at 03:29 PM Report #449435 Posted April 16, 2012 at 03:29 PM Estas a carregar duas vezes a mesma imagem, repara aqui arqImg = New FileStream(dlgFicheiro.FileName, FileMode.Open, FileAccess.Read, FileShare.Read) e logo a seguir arqImgem = New FileStream(dlgFicheiro.FileName, FileMode.Open, FileAccess.Read, FileShare.Read) o caminho(dlgFicheiro.FileName) é exactamente o mesmo Pedro Martins Não respondo a duvidas por PM
Blackvelvet Posted April 16, 2012 at 03:37 PM Author Report #449437 Posted April 16, 2012 at 03:37 PM Quer dizer que tenho que colocar outro openfiledialog? :dontgetit:
Caça Posted April 16, 2012 at 03:40 PM Report #449439 Posted April 16, 2012 at 03:40 PM Não estou a dizer isso, só te estou a dizer que estás a carregar a mesma imagem para duas variaveis diferentes, logo vai-te inserir a mesma imagem nos dois campos. Pedro Martins Não respondo a duvidas por PM
Blackvelvet Posted April 16, 2012 at 03:52 PM Author Report #449440 Posted April 16, 2012 at 03:52 PM Obrigado Caça pela dica,resolvi essa parte colocando outro openfiledialog. Agora vou para a outra parte que é selecionar uma linha da tabela e no evento do botão (por exemplo: "Ver") abrir uma janela e mostrar tudo para poder fazer update ou eliminar, claro que com os seu respectivos botoes. Vou ao trabalho e depois darei noticias. Um abraço
Blackvelvet Posted April 17, 2012 at 02:40 PM Author Report #449536 Posted April 17, 2012 at 02:40 PM Boa tarde a todos os presentes Cria um formulário com todos os campos para mostrar a informação O formulario ja esta criado. Agora a duvida prende-se em como passar a informação a ser visualizada noutra janela. ?
Caça Posted April 17, 2012 at 02:43 PM Report #449537 Posted April 17, 2012 at 02:43 PM O registo que vais seleccionar está numa DataGridView? Qual é o campo ou campos que são chave primaria na tabela? Pedro Martins Não respondo a duvidas por PM
Blackvelvet Posted April 17, 2012 at 02:53 PM Author Report #449538 Posted April 17, 2012 at 02:53 PM Sim, tenho uma datagridview. Eu so uso 1 tabela em que a chave primaria é o IdGestao. A query, eu tenho a ligeira impressão que seja algo: Select * from [nome tabela] where id=@id. certo? Fazer o resto é que não sei,dai pedir um link para ver ou ter uma noção de como fazer.
Caça Posted April 17, 2012 at 03:06 PM Report #449541 Posted April 17, 2012 at 03:06 PM Agora no formulário onde vão ser mostrados os detalhes coloca isto Public IdGestao As Integer Public Sub New(ByVal IdGestao As Integer) InitializeComponent() Me.IdGestao = IdGestao End Sub E para o chamar faz isto, ele vai pegar no valor da primeiro coluna, se não for lá que está o ID muda. If Dgv.SelectedRows = 0 Then Exit Sub Dim F As New NomeDoForm(Convert.ToInt32(Dgv.SelectedRows(0).Cells(0).Value)) F.ShowDialog() Depois tens de utilizar uma query desse género e preencher os campos, em que o id vai estar na tua variável IdGestao . Pedro Martins Não respondo a duvidas por PM
Blackvelvet Posted April 17, 2012 at 03:21 PM Author Report #449543 Posted April 17, 2012 at 03:21 PM Dim F As New NomeDoForm(Convert.ToInt32(Dgv.SelectedRows(0).Cells(0).Value)) F.ShowDialog() Este nome do form é do que foi criado ou onde está a datagridview?
Caça Posted April 17, 2012 at 03:22 PM Report #449544 Posted April 17, 2012 at 03:22 PM O que foi criado. Pedro Martins Não respondo a duvidas por PM
Blackvelvet Posted April 17, 2012 at 03:31 PM Author Report #449548 Posted April 17, 2012 at 03:31 PM Ok. Ja fiz o que disses-tes( e estou grato) agora, tenho mais umas duvidas a colocar ( e peço desculpas por ser chato). Tenho assim If Tabela.SelectedRows = 0 then Dim FormEdicao As New edicao(Convert.ToInt32(Tabela.SelectedRows(0).Cells(0).Value)) FormEdicao.ShowDialog() E explico: "edicao" é o nome do novo Form. Tabela é o nome que atribui á DataGridView. Mostra erro aqui: "FormEdicao"e aqui: "Tabela" :dontgetit:
Caça Posted April 17, 2012 at 03:47 PM Report #449550 Posted April 17, 2012 at 03:47 PM Esse código tem de ser colocado onde está a DataGridView, não no novo. Mas que erro é que está a dar? Pedro Martins Não respondo a duvidas por PM
Blackvelvet Posted April 17, 2012 at 03:52 PM Author Report #449553 Posted April 17, 2012 at 03:52 PM Esse código tem de ser colocado onde está a DataGridView, não no novo. Mas que erro é que está a dar? Deixa cá ver se entendi, entao: este codigo: Public IdGestao As Integer Public Sub New(ByVal IdGestao As Integer) InitializeComponent() Me.IdGestao = IdGestao End Sub É no novo form. E este: If tabela.SelectedRows = 0 Then Dim FormEdicao As New edicao(Convert.ToInt32(tabela.SelectedRows(0).Cells(0).Value)) FormEdicao.ShowDialog() End If É no form onde tenho a tabela. É isso? ?
Caça Posted April 17, 2012 at 03:55 PM Report #449555 Posted April 17, 2012 at 03:55 PM Sim. Pedro Martins Não respondo a duvidas por PM
Blackvelvet Posted April 17, 2012 at 04:25 PM Author Report #449560 Posted April 17, 2012 at 04:25 PM Depois de colocar tudo no sitio, continuo com erros. If Tabela.SelectedRows = 0 Then Dim FormEdicao As New edicao(Convert.ToInt32(Tabela.SelectedRows(0).Cells(0).Value)) FormEdicao.ShowDialog() End If "Tabela.SelectedRows = 0" aqui dá erro. Tabela é o nome que atribui á DataGridView. Este código foi inserido no evento do botão "Ver info". Ja ando a ha muito tempo e não vejo saida.....(desabafo....)
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now