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

jaferreira

[vb .net ] inseir numa tabela dinamicamente

3 mensagens neste tópico

Bem pessoal mais um post ;) , gosto muito desta função ... Espero que gostem

Eu sou muito calão e por isso tive necessidade desta função . O objectivo desta função é .... Quantas vezes querem fazer inserts numa tabela e os as strings de inserção demoram muito tempo a fazer pela quantidade de valores que têem??? Não era bem mais simples que fosse tudo automático ?  Então aqui vai!

1 º passo - Meter o nome dos objectos iguais ao nome do campo da tabela

Exemplo  tabela autores (nome, data_nascimento , apelido , morada , localidade .....)  , teriamos por exemplo as texts para meter os valores e o nome delas seria igual aos campos exemplo a text onde vai inserer o nome seria = nome ......

2 º passo - Valores das tags .... Todos aqueles campos que quisermos que sejam obrigatórios do tipo texto iremos colocar o valor 1 na tag do objecto , obrigatórios numéricos iremos colocar 2 no valor da tag , Não obrigatórios de texto colocamos 3 na tag e não obrigatórios numéricos colocamos o valor 4

Isto porquê perguntam voçês ... Porque esta função também texta se campos obrigatórios não foram inseridos......

3 º passo - Colocar na tag da label respondente ao objecto o nome do objecto a que ela corresponde

por exemplo colocamos a textbox nome e atras colocamos uma label com o text Nome para o utilizador saber que é ali que inser o nome entao nessa label colocamos a tag igual ao nome da textbox

4 º passo criar um modulo com o seguinte codigo

    Public Function GenerateInsertSql(ByVal Grupo As Object, ByVal sTable As String) As String
        'Correspondencias de valores das Tag's das TexBoxs
        '1 - Obrigatorio, Texto
        '2 - Obrigatorio, Numerico
        '3 - Texto
        '4 - Numerico
        Try
            Dim Sql1 As String = "INSERT INTO " & sTable & " (" 'Inicia a 1a parte do sql
            Dim Sql2 As String = " VALUES (" 'inicia a 2a parte do sql
            Dim ThisControl As Control 'cria qqr tipo de control'
            For Each ThisControl In Grupo.Controls 'para cada controlo dentro do objecto recebido por parametro
                If TypeOf ThisControl Is TextBox Then  'testa se o objecto e uma textbox
                    If (ThisControl.Tag = "1" Or ThisControl.Tag = "2") And (Trim(ThisControl.Text) = "") Then
                        'testa se e obrigatorio preencher a textbox
                        For Each Lb As Control In Grupo.Controls 'testa se o controlo e uma label
                            If TypeOf Lb Is Label And Lb.Tag = Trim(ThisControl.Name) Then
                                'mostrar a msgbox que o campo tem k estar preenxido
                                MsgBox("O campo '" & Lb.Text & "' tem que estar preenchido")
                                ThisControl.Focus()
                                Return ""
                            End If
                        Next
                    End If
                    If ThisControl.Tag <> "" Then  'testa se a tag e de chave primaria
                        Sql1 = Sql1 & Trim(ThisControl.Name) & "," 'contactanacao da 1a parte do sql
                        If ThisControl.Tag = "1" Or ThisControl.Tag = "3" Then 'testa se e texto
                            Sql2 = Sql2 & "'" & Trim(ThisControl.Text) & "'," 'concatnacao 2a parte sql
                        ElseIf ThisControl.Tag = "2" Or ThisControl.Tag = "4" Then 'entra se for numerico
                            Sql2 = Sql2 & Trim(ThisControl.Text) & "," 'concatnacao 2a parte sql
                        End If
                    End If
                ElseIf TypeOf ThisControl Is ComboBox Then
                    Dim CmbBox As ComboBox = ThisControl
                    If (CmbBox.Tag = "1" Or CmbBox.Tag = "2") And (Trim(CmbBox.SelectedValue) = "" And Trim(CmbBox.SelectedText) = "") Then
                        'testa se e obrigatorio preencher a textbox
                        For Each Lb As Control In Grupo.Controls 'testa se o controlo e uma label
                            If TypeOf Lb Is Label And Lb.Tag = Trim(CmbBox.Name) Then
                                'mostrar a msgbox que o campo tem k estar preenxido
                                MsgBox("O campo '" & Lb.Text & "' tem que estar preenchido")
                                CmbBox.Focus()
                                Return ""
                            End If
                        Next
                    End If
                    If CmbBox.Tag <> "" Then 'testa se a tag e de chave primaria
                        Sql1 = Sql1 & Trim(CmbBox.Name) & "," 'contactanacao da 1a parte do sql
                        If CmbBox.Tag = "1" Or CmbBox.Tag = "3" Then 'testa se e texto
                            Sql2 = Sql2 & "'" & Trim(CmbBox.SelectedText) & "'," 'concatnacao 2a parte sql
                        ElseIf CmbBox.Tag = "2" Or CmbBox.Tag = "4" Then 'entra se for numerico
                            Sql2 = Sql2 & Trim(CmbBox.SelectedValue) & "," 'concatnacao 2a parte sql
                        End If
                    End If
                    CmbBox = Nothing
                End If
            Next ThisControl
            Sql1 = Strings.Left(Sql1, Sql1.Length - 1) & ")" 'altera a ultima , para 1 )
            Sql2 = Strings.Left(Sql2, Sql2.Length - 1) & ")" 'altera a ultima , para 1 )
            Return Sql1 & Sql2 'devolve a instrucao de sql completa
        Catch ex As Exception
            MsgBox(ex.ToString)
            Return ""
        End Try

depois é so chamar a função desta maneira

GenerateInsertSql( me (por exemplo assim mandamos todos os controls do form ... mas se quisermos mandar so os controls que estão dentro de um panel enviamos so o panel ) , NomeDaTabelaQueQueremInserir )

e já está espero que gostem abraço :D

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