Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal estou quase conseguindo o que eu quero.
Aqui esta um função que estou criando como ferramente, para que em qualquer projeto eu possa usala.
Public Function SQLIncluir(SQLTabela As String, SQLColuna As String, VariavelConsulta As String, SQLColuna1 As String, SQLColuna2 As String, SQLColuna3 As String, SQLColuna4 As String, SQLColuna5 As String, SQLColuna6 As String, SQLColuna7 As String, SQLColuna8 As String, SQLColuna9 As String, SQLColuna10 As String, SQLColuna11 As String, SQLColuna12 As String, SQLColuna13 As String, SQLColuna14 As String, SQLColuna15 As String, SQLColuna16 As String, SQLColuna17 As String, SQLColuna18 As String, SQLColuna19 As String, SQLColuna20 As String, SQLColuna21 As String, SQLColuna22 As String, Item1 As String, Item2 As String, Item3 As String, Item4 As String, Item5 As String, Item6 As String, Item7 As String, Item8 As String, Item9 As String, Item10 As String, Item11 As String, Item12 As String, Item13 As String, Item14 As String, Item15 As String, Item16 As String, Item17 As String, Item18 As String, Item19 As String, Item20 As String, Item21 As String, Item22 As String)
If SQLSelect(SQLTabela, SQLColuna, VariavelConsulta) = True Then
MsgBox "Cliente ja cadastrado!", vbInformation, "Cadastro"
SQLIncluir = True
Else
SQLIncluir = False
Abre_Conexao
SQL = "Select * from " & SQLTabela & ""
Tabela.Open SQL, conexao, adOpenForwardOnly, adLockOptimistic
With Tabela
.AddNew
.Fields("" & SQLColuna1 & "") = Item1
.Fields("" & SQLColuna2 & "") = Item2
.Fields("" & SQLColuna3 & "") = Item3
.Fields("" & SQLColuna4 & "") = Item4
.Fields("" & SQLColuna5 & "") = Item5
.Fields("" & SQLColuna6 & "") = Item6
.Fields("" & SQLColuna7 & "") = Item7
.Fields("" & SQLColuna8 & "") = Item8
.Fields("" & SQLColuna9 & "") = Item9
.Fields("" & SQLColuna10 & "") = Item10
.Fields("" & SQLColuna11 & "") = Item11
.Fields("" & SQLColuna12 & "") = Item12
.Fields("" & SQLColuna13 & "") = Item13
.Fields("" & SQLColuna14 & "") = Item14
.Fields("" & SQLColuna15 & "") = Item15
.Fields("" & SQLColuna16 & "") = Item16
.Fields("" & SQLColuna17 & "") = Item17
.Fields("" & SQLColuna18 & "") = Item18
.Fields("" & SQLColuna19 & "") = Item19
.Fields("" & SQLColuna20 & "") = Item20
.Fields("" & SQLColuna21 & "") = Item21
.Fields("" & SQLColuna22 & "") = Item22
.Update
End With
Fecha_Conexao
End IfEssa função tem capacidade armazenar informações de 22 itens.
Porem queria poder usar essa mesma função em outros projetos, mas com quantidades de itens diferentes, por exemplo menos quantidade.
Aqui tem um exmplo:
Private Sub cmdSalvar_Click()
VereficaCamposCadastro
If ItensObrigatorios = False Then
MsgBox "Preencha os campos obrigatórios!", vbInformation, "Cadastro"
Else
If SQLIncluirCadastro("CadClientes", "CPF", txtCPF, "CPF", "Cliente", "Empresa", "ResInforma", "Endereco", "Bairro", "Cidade", "Estado", "Telefone", "Celular", "CEP", "RG", "LocTrabalho", "Veiculo", "Marca", "Ano", "Cor", "Placa", "ResEmpresa", "Data", "KM", "", txtCPF, txtCliente, txtEmpresa, txtResInfoma, txtEndereco, txtBairro, txtCidade, txtEstado, txtTelefone, txtCelular, txtCEP, txtRG, txtLocTrabalho, txtVeiculo, txtMarca, txtAno, txtCor, txtPlaca, txtResEmpresa, txtData, txtKM, "") = False Then
LimpaCamposCadastro
End If
End If
Data
End Sub
Pela contagem eu dexei a SQLColuna16 e o Item16 vazios (""), bom o que eu quero é que quando eu responder que essa coluna e esse item não tem informações o código
.Fields("" & SQLColuna16 & "") = Item16
não execute.
Assim posso usar essa função em qualquer projeto.
Poderia me mostrar um exemplo Khaos?
Obrigado
Por exemplo, uma função de soma (vou usar isto como exemplo). Para eu criar uma função simples basta:
public shared function soma(byval a as double, b as double) as double
return a+b
end function
Agora esta função só funcionaria para dois números, a e b, se eu quisesse criar uma função com infinitos números de soma? Ai entramos nos ParamArrays:
Public Shared Function soma(ParamArray a() As Double) As Double
Dim resultado As Double = 0
For i As Integer = 0 To a.Length
resultado = resultado + a(i)
Next i
Return resultado
End Function
Desta maneira eu posso chamar a função desta maneira:
soma(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 2, 1, 2, 3, 1, 2, 3, 4, 2, 3, 4, 2, 4, 5, 4, 3, 6, 5, 4, 7, 6)
E ele vai somar, na ordem, todos os números do array.
No seu caso não é diferente, crie um paramArray para as colunas e as linhas e faça dentro delas um for, assim você pode usar a função para tudo.
Só não entendi como ele vai fazer para somar.
Ele vai somar os dois primeiros números depois os proximos 2 e assim por diante?
Não, ele vai somar na ordem, se fosse "Soma(2,2,2)" ele somaria (2+2)+2, ou seja, ele soma os dois primeiros e o resultado soma com o seguinte e assim por diante.
Khaos,
Estou tentando fazer essa função do ParamArray, mas esta dando um erro quando eu chamo a função.
Ele acusa erro no primeiro número que coloco na função.
Soma(1,1,1,1)
Esse erro
Compile Error:
Type Mismatch: arry or user-defined type expected
Cara, eu fiz aqui e funcionou normal...
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
MsgBox(soma(1, 1, 1, 1).ToString())
End Sub
Public Function soma(ParamArray a() As Integer)
Dim result As Integer = 0
For i As Integer = 0 To UBound(a) Step 1
result += a(i)
Next
Return result
End Function
Lembrando que isso é só um teste.
É que eu estou com VB6
Dai algumas coisas não consegui colocar como vc colocou tive que colocar assim:
Public Function soma(ParamArraya() As Integer)
Dim result As Integer
Dim i As Integer
result = 0
For i = 0 To UBound(a) Step 1
result = result + a(i)
Next
End Function
O "Return Result" não consegui colocar.
Estou tentando fazer esse teu exemplo funcionar para alterar ele para a estrutura que eu quero.
Tente assim:
public function soma(ParamArray a() as Integer) As Integer
VB6 não esta aceitando colocar ParaArray separado do a().
Dai já fiz ele assim:
public function soma(ParamArraya() as Integer) As Integer
Já tentei reescrever esse código de várias formas.
Não esta faltando instalar alguma referencia será??
Porque quando aperto Ctrl+J não esta aparecendo o comando ParamArray definido.
Eu andei pesquisando o VB6 e achei uma função que parece funcionar.
Private Function Soma(ParamArrayargs() As Double) As Double
http://www.techrepublic.com/article/define-vb6-procedure-arguments-with-the-paramarray-keyword/
Finalmente consegui, vlw aiii Khaos
Ai esta o códido se alguém quiser pegar e modificar conforme as necessidades.
Public Function SQLIncluir(ParamArray Dadoss() As Variant) As
Single Dim MSG As String Dim Titulo
As String Dim SQLTabela As String
Dim SQLColuna As String Dim VariavelConsulta As
String Dim SQLColuna1 As String Dim
Item As String MSG =
Dadoss(0) Titulo =
Dadoss(1) SQLTabela =
Dadoss(2) SQLColuna =
Dadoss(3) VariavelConsulta =
Dadoss(4) If SQLColuna <>
"Nada"
Then If
SQLSelect(SQLTabela, SQLColuna, VariavelConsulta) = True
Then
SQLIncluir =
False
Exit
Function
Else
SQLIncluir =
True End
If End
If SQLIncluir =
True
Abre_Conexao SQL = "Select * from
" & SQLTabela & ""
Tabela.Open SQL, conexao, adOpenForwardOnly,
adLockOptimistic With
Tabela
.AddNew
For i = 5 To
UBound(Dadoss)
SQLColuna1 =
Dadoss(i)
i = i +
1
Item =
Dadoss(i)
.Fields("" & SQLColuna1 & "") =
Item Next
i
.Update End
With If MSG <> "Nada"
Then MsgBox "" & MSG & "",
vbInformation, "" & Titulo & "" End
If Fecha_Conexao
End Function
No meu caso fiz o ParamArray (0) até o (4) fixos para a consulta, pois sempre será apenas 4 itens. E para add os itens na tabela fiz para ser a partir do ParamArray(5) para ser colocado quantos precisar.
Obrigado mais uma vez pela ajuda aii.
Use ParamArray ao invés de parâmetros pré-definidos, assim você pode adicionar infinitos parâmetros e a unica coisa que você tem que fazer é tornar tudo modificável adicionando alguns fors para poder preencher diversos itens de acordo com o tamanho do array.