SELECT E UPDATE DEZ ITENS DE UMA UNICA VEZ

MARXREIK 14/09/2013 13:05:31
#428836
Pessoal, me ajudem aí

Tenho um BD Access e a rede da empresa não ajuda, é lenta Na interface tenho um TextBox que faz um select do código digitado e me trás os dados para o form, mas eu puxo somente o ID do danco, e depois no botão salvar ele faz um Update que atualiza alguns campos, mas isso demora pois tenho que fazer isso por diversas vezes no dia de 10 a 20 segundos para fazer o select.

Pensei então em criar vários textsbox em torno de dez onde o usuário colocara dez ordens de uma única vez quando fizer o Select fara das dos dez Textbox e quando eu fizer o Uptade fara o dos dez também, é possível isso?

Segue meus códigos de select e uptade

Seleciona o campo no BD access

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)

Dim psq As String
Dim cx As New ClasseConexão[ô] abre a conexão
Dim bc As ADODB.Recordset
Dim sql As String

psq = TextBox1.Text

If TextBox1.Text = [Ô][Ô] Then Exit Sub
Set banco = New ADODB.Recordset
sql = [Ô] SELECT * FROM fluxo [Ô] [ô]ordem_entrada , data_entrada , entrada_oper
sql = sql & [Ô] WHERE ordem_entrada LIKE[ô][Ô] & psq & [Ô]%[ô][Ô]

cx.Conectar [ô] aqui ele abre o banco e faz o select acima

On Error Resume Next
banco.Open sql, cx.Conn
Dim nidFuncionario As String
nidFuncionario = banco.Fields([Ô]idFuncionario[Ô])
Me.TextBox4.Text = nidFuncionario[ô] aqui mostra ao usuário o ID do BD para ele saber que o select foi feito
cx.Desconectar [ô] faz a desconexão em um módulo separado
End Sub
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


E aqui o código do botão salvar que fez o Update


Private Sub CommandButton1_Click()
On Error GoTo FIM
Dim usuario As String
usuario = VBA.Environ([Ô]username[Ô])
Dim cx As New ClasseConexão
Dim banco As ADODB.Recordset
Dim sql As String
Set banco = New ADODB.Recordset

If TextBox1.Text = [Ô][Ô] Then Exit Sub
sql = [Ô] UPDATE fluxo [Ô]
sql = sql & [Ô] SET cq_oper = [ô][Ô] & VBA.Environ([Ô]username[Ô]) & [Ô][ô][Ô]
sql = sql & [Ô], cq_data = [ô][Ô] & Calendar1.Value & [Ô][ô][Ô]

If CheckBox1.Value = True Then
sql = sql & [Ô], cq_refugo = [ô][Ô] & [Ô]Sim [Ô] & [Ô][ô][Ô]
End If

If CheckBox1.Value = True Then
sql = sql & [Ô], status = [ô][Ô] & [Ô]s700[Ô] & [Ô][ô][Ô]
End If
If CheckBox1.Value = False Then
sql = sql & [Ô], status = [ô][Ô] & [Ô]s900[Ô] & [Ô][ô][Ô]

End If

sql = sql & [Ô] WHERE idFuncionario = [Ô] & TextBox4.Text
Set banco = New ADODB.Recordset
cx.Conectar
banco.Open sql, cx.Conn
Set banco = Nothing
cx.Desconectar
Me.TextBox1 = Empty
Me.TextBox4 = Empty [ô]LIMPA OS CAMPOS PARA NOVA CONSULTA
CheckBox1.Value = False
Me.TextBox1.SetFocus [ô] FOCO NA TEXTBOX ID
Exit Sub
FIM:
MsgBox [Ô]Registro: [Ô] & Me.TextBox1.Text & [Ô] Não existe.[Ô]
Me.TextBox1 = Empty
Me.TextBox4 = Empty [ô]LIMPA OS CAMPOS PARA NOVA CONSULTA
CheckBox1.Value = False
Me.TextBox1.SetFocus [ô] FOCO NA TEXTBOX ID
End Sub

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Esses códigos acima são para alterar um registro por vez, queria colocar dez texboz e alterar dez por vez é possível?

Valeu
SIBEMM 14/09/2013 15:12:40
#428840
Meu caro, em suma, é possível sim enviar mais de 1 select/update por vez. Sendo que eles devem ser separados por ponto e vírgula ( ; ). Faz um teste colocando uma variável para acumular o sql dos comandos e posteriormente dá o [Ô]submit[Ô].

Mas melhore o seu código, evite usar o like, já que a rede é lenta e supostamente o campo seja uma chave primária. Ficaria assim:
Citação:

sql = [Ô] SELECT * FROM fluxo [Ô] [ô]ordem_entrada , data_entrada , entrada_oper
sql = sql & [Ô] WHERE ordem_entrada in ( [Ô] & lista_codigos_ordens_separadas_por_virgula & [Ô])[ô][Ô]



Espero que funcione.Lembrando, aplicações em Access consomem muito recurso da rede... procure no Google a respeito.
Faça seu login para responder