ERRO VB6 E ACCESS

RAFALNX 02/07/2012 11:26:48
#405314
Bom dia, tenho recebido diversas ajudas do LLAIA para conclusão desse código, porém continuo tendo problemas, ele está funcionando até esta linha do INSERT, em diante ele não está executando e também não apresenta mensagem de erro, alguém tem alguma dica para me dar a respeito.

Rafa

_______________________________________________________________________________________

Private Sub Command1_Click()

Dim SQL, CONEXAO, RS
Set CONEXAO = CreateObject([Ô]ADODB.Connection[Ô])
Set RS = CreateObject([Ô]ADODB.Recordset[Ô])

CONEXAO.Open [Ô]Driver={Microsoft Access Driver (*.mdb)};Dbq=[Ô] & App.Path & [Ô]\files\ordenaAlertas.mdb;Uid=Admin;Pwd=;[Ô]

CONEXAO.Execute ([Ô]INSERT INTO Ordem VALUES (2, [ô]comando .bat que envia alerta prioridade 2[ô], [ô]Aguardando[ô])[Ô])

Set RS.ActiveConnection = CONEXAO
RS.Source = [Ô]SELECT TOP 1 status FROM Ordem[Ô]
RS.Open

startVerifica1:

If RS.RecordCount > 0 Then

If RS([Ô]status[Ô]) = [Ô]Enviando[Ô] Then
Sleep 10000
GoTo startVerifica1
ElseIf RS([Ô]status[Ô]) = Aguardando Then
CONEXAO.Execute ([Ô]UPDATE Ordem SET status=[ô]Enviando[ô][Ô])
Shell App.Path & [Ô]    este.bat[Ô]
Sleep 10000
CONEXAO.Execute ([Ô]DELETE * FROM Ordem WHERE status=[ô]Enviando[ô][Ô])
CONEXAO.Close
End If

End If

End Sub
ADILSOO 02/07/2012 13:39:15
#405322
Amigo, fica mais facil explicar oque voce está querendo fazer...
RAFALNX 02/07/2012 13:44:39
#405324
Citação:

:
Amigo, fica mais facil explicar oque voce está querendo fazer...



Preciso acessar a DB .mdb, retornar apenas a primeira linha, se nessa linha o campo status estiver [Ô]enviando[Ô], então ele vai aguardar esses 10 seg, e refazer a consulta, se contiver qualquer outra escrita no campo status da primeira linha ele, altera o mesmo para [Ô]enviando[Ô], executa então um arquivo .bat, aguarad mais um tempo de 10 seg. e exclui toda essa primeira linha.
Espero ter sido claro.

Obrigado
RAFALNX 02/07/2012 14:26:14
#405328
Acho que descobri o por que: no RS.RecordCount o valor está -1, algo errado no Select talvez?
MARCELO.TREZE 02/07/2012 14:53:16
#405330
Resposta escolhida
o insert into está errado
veja como está

[txt-color=#e80000][Ô]INSERT INTO Ordem VALUES (2, [ô]comando .bat que envia alerta prioridade 2[ô], [ô]Aguardando[ô])[/txt-color]

agora como deve ser

[Ô]INSERT INTO [txt-color=#0000f0]tabela (campo1,campo2,campo3)[/txt-color] VALUES (2, [ô]comando .bat que envia alerta prioridade 2[ô], [ô]Aguardando[ô])

onde está em azul vc deve colocar os nomes dos campos para depois colocar os valores

RAFALNX 02/07/2012 15:02:05
#405333
Olá Marcelo-Treze,

O Insert está funcionando, minha dúvida fica quanto ao Select, pois ele veria retornar a primeira linha, mas o valor do RecordCount ao invés de 1 está -1

Obriagdo
MARCELO.TREZE 02/07/2012 15:13:31
#405335
maneira correta ou a mais próxima que existe


Private Sub Command1_Click()

Dim SQL As String, CONEXAO As New ADODB.Connection, RS As Recordset

CONEXAO.Open [Ô]Driver={Microsoft Access Driver (*.mdb)};Dbq=[Ô] & App.Path & [Ô]\files\ordenaAlertas.mdb;Uid=Admin;Pwd=;[Ô]

CONEXAO.Execute ([Ô]INSERT INTO Ordem ([txt-color=#e80000]Campo1, Campo2, Campo3[/txt-color]) VALUES (2, [ô]comando .bat que envia alerta prioridade 2[ô], [ô]Aguardando[ô])[Ô])

Set RS = CONEXAO.Execute([Ô]SELECT TOP 1 status FROM Ordem[Ô])

startVerifica1:

If Not (RS.EOF And RS.BOF) Then
Select Case RS!status
Case Is = [Ô]Enviando[Ô]
Sleep 10000
GoTo startVerifica1
Case Is = [Ô]Aguardando[Ô]
CONEXAO.Execute ([Ô]UPDATE Ordem SET status=[ô]Enviando[ô] [txt-color=#e80000]WHERE id= [Ô] & txtnumeroid.text[/txt-color] )
Shell App.Path & [Ô]    este.bat[Ô]
Sleep 10000
CONEXAO.Execute ([Ô]DELETE * FROM Ordem WHERE status=[ô]Enviando[ô][Ô])
CONEXAO.Close
End select
End If

End Sub

vamos lá existe as inconsistências dita anteriormente

no insert falta os nomes dos campos

e depois no UPDATE faltou um where para indicar o que atualizar

no caso do update veja um exemplo

se eu possuo o seguinte em uma tabela

id - nome - cargo
01 - Marcelo - encarregado
02 - Joao - Caixa
03 - Pedro - balconista

derrepente quero atualizar o pedro para garçon, então tenho de indicar o id dele ou o nome para o update assim

UPDATE tabela SET cargo = [ô]garçon[ô] WHERE id = 03

ou pelo nome

UPDATE tabela SET cargo = [ô]garçon[ô] WHERE nome = [ô]Pedro[ô]

entendeu + ou -

MARCELO.TREZE 02/07/2012 15:18:23
#405337
então se deseja retornar o primeiro registro talvez o campo status não seja o correto

tente fazer tipo assim

SELECT TOP 1 * FROM ordem WHERE status=[ô]Enviando[ô]

LUIZCOMINO 02/07/2012 15:25:06
#405338

tente...


Dim SQL As String, CONEXAO As New ADODB.Connection, RS As Recordset

CONEXAO.Open [Ô]Driver={Microsoft Access Driver (*.mdb)};Dbq=[Ô] & App.Path & [Ô]\files\ordenaAlertas.mdb;Uid=Admin;Pwd=;[Ô]

CONEXAO.Execute ([Ô]INSERT INTO Ordem (Campo1, Campo2, Campo3) VALUES (2, [ô]comando .bat que envia alerta prioridade 2[ô], [ô]Aguardando[ô])[Ô])

Rs.CursorLocation =adUseClient [ô]Setar cursor no cliente

Set RS = CONEXAO.Execute([Ô]SELECT TOP 1 status FROM Ordem[Ô])

startVerifica1:

If Not (RS.EOF And RS.BOF) Then
Select Case RS!status
Case Is = [Ô]Enviando[Ô]
Sleep 10000
GoTo startVerifica1
Case Is = [Ô]Aguardando[Ô]
CONEXAO.Execute ([Ô]UPDATE Ordem SET status=[ô]Enviando[ô] WHERE id= [Ô] & txtnumeroid.text )
Shell App.Path & [Ô]    este.bat[Ô]
Sleep 10000
CONEXAO.Execute ([Ô]DELETE * FROM Ordem WHERE status=[ô]Enviando[ô][Ô])
CONEXAO.Close
End select
End If

End Sub
RAFALNX 02/07/2012 16:43:11
#405355
MARCELO-TREZE e LUIZCOMINO, muito obrigado pelas dicas, mas ainda ficou ainda uma dúvida, quando executo o click e na primeira linha estiver com o status=[Ô]enviando[Ô] ele faz o loop que preciso, ou seja até encontrar a primeira linha com [Ô]aguardando[Ô], porém quando o status da primeira linha está [Ô]aguardando[Ô] ele sai apagando todas as demais linhas que estão com esse status, ele deveria apagar só a primeira e encerrar.
MARCELO.TREZE 02/07/2012 16:47:35
#405356
como ficou o código agora poste pra gente

Página 1 de 2 [13 registro(s)]
Tópico encerrado , respostas não são mais permitidas