passado Posted April 29, 2009 at 10:33 PM Report #260116 Posted April 29, 2009 at 10:33 PM Boas pessoal eu queria colocar um teste no botao dele onde ele testasse se um determinado registo existe num tabela da base de dados e se exestisse ele nao deixava apagar, eu sei que isso da para fazer com as relações mas eu nao queria estar a mecher nas relações da BD porque ja uma vez mexi e deu barraca xD tipo um processo que testasse que colocasse num if, pareceme simples so nao sei a instrucção SQL que deva dar
bruno1234 Posted April 29, 2009 at 11:12 PM Report #260136 Posted April 29, 2009 at 11:12 PM Não sei se percebi bem a tua pergunta. Mas para saberes se existe um registo basta fazeres um select. Select 1 from tabela where id=id_qualquer se o resultado não for vazio, é pq existe. Matraquilhos para Android. Gratuito na Play Store. https://play.google.com/store/apps/details?id=pt.bca.matraquilhos
passado Posted April 29, 2009 at 11:40 PM Author Report #260145 Posted April 29, 2009 at 11:40 PM Eu tambem nao me expliquei muito bem, é assim eu tenho uma tabela empresas e uma tabela contactos a varios contactos pode estar associado uma empresa, ou seija o que eu quero testar e se no campo "Empresas" da tabela contactos existe algum contacto com o nome da empresa que estou a querer eliminar, se existir digo quais sao e nao deixo apagar se nao existir entao e eliminado com sucesso....
bruno1234 Posted April 29, 2009 at 11:49 PM Report #260149 Posted April 29, 2009 at 11:49 PM para isso fazes um select na tabela de contactos pelo nome da empresa Select empresa, etc... from Contactos where empresa = 'Nome da empresa' se for vazio pds apagar, se não for, o retorno da query é uma tabelas com os contactos q tem esta empresa Matraquilhos para Android. Gratuito na Play Store. https://play.google.com/store/apps/details?id=pt.bca.matraquilhos
passado Posted April 30, 2009 at 12:09 AM Author Report #260155 Posted April 30, 2009 at 12:09 AM para isso fazes um select na tabela de contactos pelo nome da empresa Select empresa, etc... from Contactos where empresa = 'Nome da empresa' se for vazio pds apagar, se não for, o retorno da query é uma tabelas com os contactos q tem esta empresa E fica melhor criar uma função e chamala no if ou um processo e chamalo no if? tipo if processo ou funçao then codigo para eleminar else a tal gridview com os contactos
bruno1234 Posted April 30, 2009 at 12:11 AM Report #260156 Posted April 30, 2009 at 12:11 AM Eu não percebo de VB, mas diria q fica melhor se fizeres em separado, num processo. Matraquilhos para Android. Gratuito na Play Store. https://play.google.com/store/apps/details?id=pt.bca.matraquilhos
passado Posted April 30, 2009 at 12:15 AM Author Report #260157 Posted April 30, 2009 at 12:15 AM Eu não percebo de VB, mas diria q fica melhor se fizeres em separado, num processo. vou ver as duas opçoes obrigado pela ajuda
nokPT Posted April 30, 2009 at 09:28 AM Report #260192 Posted April 30, 2009 at 09:28 AM E fica melhor criar uma função e chamala no if ou um processo e chamalo no if? Fica melhor mas mais difícil de ler o código, mas com a vantagem de podes chamar a mesma função várias vezes em alturas diferentes, é uma boa maneira de trabalhar Fazes: Private Function TestaRegisto (ByVal Contatos as String) as String ' Fazes o código de testar se há contactos associados à empresa ' Se houver: ' TestaRegisto = Texto da mensagem de erro com a Lista de contactos ' Se não houver: ' TestaRegistos="" Depois no if testas de a tua função for igual a "", podes continuar, caso contrário mensagem erro ou assim... Ricardo Timóteo
passado Posted April 30, 2009 at 01:26 PM Author Report #260231 Posted April 30, 2009 at 01:26 PM Eu so me interesa chamar a função uma vez so achei melhor assim porque assim o codigo co botao delete ficava mais limpo e menos confuso para a minha cabeça.... Ja agora uma duvida, na função eu faço o select a tabela contactos onde o campo empresa e igual a uma variavel carregada por um campo do formulário, a minha duvida é que instrucção dar ao if? eu tennho dim sql as string = select..... e no if?
passado Posted April 30, 2009 at 05:46 PM Author Report #260327 Posted April 30, 2009 at 05:46 PM Private Function testedelete() 'variaveis de ligação Dim strcon As String = (Contactos_Sofio.My.Settings.BDSofioConnectionString) Dim strsql As String = "SELECT [iD_Empresa] FROM Contactos WHERE [iD_Empresa] = '" & empID_EmpresaTextBox.Text & "'" 'Ligação Dim con As New SqlConnection(strcon) Dim cmd As New SqlCommand(strsql, con) Try con.Open() Catch erro As SqlException MsgBox("Erro a conectar a base de dados: " & erro.Message) End Try 'teste Dim reader As SqlDataReader = cmd.ExecuteReader() If reader.HasRows = 0 Then Return True Else Return False End If con.Close() End Function Um bocadinho ali outro acula consegui construir o codigo aqui deixo para quem precisar cumps
Tiago Salgado Posted May 1, 2009 at 08:19 PM Report #260646 Posted May 1, 2009 at 08:19 PM Se queres testar se existem ou não registos e não te interessa retorna-los, deverias ter antes algo deste genero: Private Function testedelete() 'variaveis de ligação Dim strcon As String = (Contactos_Sofio.My.Settings.BDSofioConnectionString) 'Ligação Dim con As New SqlConnection(strcon) Dim cmd As New SqlCommand("SELECT COUNT(1) FROM Contactos WHERE [iD_Empresa] = @Id", con) cmd.Parameters.Add("@Id", SqlDbType.Int, 4).Value = Integer.Parse(empID_EmpresaTextBox.Text) Try con.Open() If cmd.ExecuteScalar().ToString() = "0" Then Return True Else Return False End If Catch erro As SqlException MsgBox("Erro a conectar a base de dados: " & erro.Message) Finally con.Close() con.Dispose() End Try End Function
passado Posted May 2, 2009 at 12:35 PM Author Report #260739 Posted May 2, 2009 at 12:35 PM Se queres testar se existem ou não registos e não te interessa retorna-los, deverias ter antes algo deste genero: Private Function testedelete() 'variaveis de ligação Dim strcon As String = (Contactos_Sofio.My.Settings.BDSofioConnectionString) 'Ligação Dim con As New SqlConnection(strcon) Dim cmd As New SqlCommand("SELECT COUNT(1) FROM Contactos WHERE [iD_Empresa] = @Id", con) cmd.Parameters.Add("@Id", SqlDbType.Int, 4).Value = Integer.Parse(empID_EmpresaTextBox.Text) Try con.Open() If cmd.ExecuteScalar().ToString() = "0" Then Return True Else Return False End If Catch erro As SqlException MsgBox("Erro a conectar a base de dados: " & erro.Message) Finally con.Close() con.Dispose() End Try End Function Estive a ver, mas nao encontrei grandes diferenças, podes explicarme?
jpaulino Posted May 3, 2009 at 07:07 PM Report #261035 Posted May 3, 2009 at 07:07 PM Estive a ver, mas nao encontrei grandes diferenças, podes explicarme? Estiveste a ver onde ? Foste ao help/msdn ou só olhaste para o código ? http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar.aspx Use the ExecuteScalar method to retrieve a single value (for example, an aggregate value) from a database. This requires less code than using the ExecuteReader method, and then performing the operations that you need to generate the single value using the data returned by a SqlDataReader. Resumindo o método ExecuteScalar() como serve para retornar apenas um valor é mais rápido e mais eficiente do que um ExecuteReader().
passado Posted May 4, 2009 at 08:04 AM Author Report #261146 Posted May 4, 2009 at 08:04 AM Estiveste a ver onde ? Foste ao help/msdn ou só olhaste para o código ? http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar.aspx Use the ExecuteScalar method to retrieve a single value (for example, an aggregate value) from a database. This requires less code than using the ExecuteReader method, and then performing the operations that you need to generate the single value using the data returned by a SqlDataReader. Resumindo o método ExecuteScalar() como serve para retornar apenas um valor é mais rápido e mais eficiente do que um ExecuteReader(). Olhei para o codigo nao vi grandes diferenças aparentes, mas ja percebi obrigado
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