Jump to content
Sign in to follow this  
x_soldier

[Resolvido] VB IF

Recommended Posts

x_soldier

Boas Amigos,

VB não é a minha praia de maneira que estou com uma dificuldade que deverá ser básica, se alguém me pudesse ajudar agradecia :)

Tenho o seguinte código que faz update a uma BD Access e o que pretendo é que não só escreva o OK quando faz o processo como quando não faz Update escreve-se o NOK.

Sub Button5_Click()
   Set conn = New ADODB.Connection
   Set rs = New ADODB.Recordset

   rs.CursorType = adOpenKeyset
   rs.LockType = adLockOptimistic

  conn.ConnectionString = "Provider=MSDASQL.1;Password=VanFor;Persist Security Info=True;Data Source=VanFor_Teste"
   conn.Open
   rs.ActiveConnection = conn

   Set c = Sheets("Dividendos_Inserir").Range("B1").End(xlDown)
   For i = 2 To c.Row
               connstr = "SELECT * FROM Agregados where Periodo='" & Sheets("Dividendos_Inserir").Cells(i, 1) _
                       & "' And CodigoISIN='" & Sheets("Dividendos_Inserir").Cells(i, 2) & "'"

   rs.Open connstr
   Do While Not rs.EOF
           rs.Fields("CuponDivNValores").Value = Sheets("Dividendos_Inserir").Cells(i, 3)
           rs.Fields("CuponDivImporteEfectivo").Value = Sheets("Dividendos_Inserir").Cells(i, 4)
           rs.Update
           rs.MoveNext
           Sheets("Dividendos_Inserir").Cells(i, 5) = "OK"
           Sheets("Dividendos_Inserir").Cells(i, 5) = "NOK"
       Loop
   rs.Close
   Next i
       conn.Close
End Sub

Desde já agradeço

Abraço

Edited by thoga31
GeSHi

Share this post


Link to post
Share on other sites
nelsonr

O que pretendes é colocar NOK quando por exemplo dá erro ao atualizar os campos?

Podes usar um try... catch na area de atualização de campos, e colocar o OK depois do update (que estaria dentro do try) e o NOK no catch.

Algo do tipo (nao testado):

try
 rs.Fields("CuponDivNValores").Value = Sheets("Dividendos_Inserir").Cells(i, 3)
 rs.Fields("CuponDivImporteEfectivo").Value = Sheets("Dividendos_Inserir").Cells(i, 4)
 rs.Update
 Sheets("Dividendos_Inserir").Cells(i, 5) = "OK"
catch
 Sheets("Dividendos_Inserir").Cells(i, 5) = "NOK"
end try
rs.MoveNext

Share this post


Link to post
Share on other sites
nelsonr

Não precisavas criar outro topico. Um moderador logo movia.

Em vez do try catch, podes usar o On error goto label.

Algo do tipo (não testado):

on error goto erro
rs.Fields("CuponDivNValores").Value = Sheets("Dividendos_Inserir").Cells(i, 3)
rs.Fields("CuponDivImporteEfectivo").Value = Sheets("Dividendos_Inserir").Cells(i, 4)
rs.Update
Sheets("Dividendos_Inserir").Cells(i, 5) = "OK"
goto continuar

erro:
Sheets("Dividendos_Inserir").Cells(i, 5) = "NOK"

continuar:
on error goto 0
rs.MoveNext

Edited by nelsonr

Share this post


Link to post
Share on other sites
x_soldier

Não precisavas criar outro topico. Um moderador logo movia.

Em vez do try catch, podes usar o On error goto label.

Algo do tipo (não testado):

on error goto erro
rs.Fields("CuponDivNValores").Value = Sheets("Dividendos_Inserir").Cells(i, 3)
rs.Fields("CuponDivImporteEfectivo").Value = Sheets("Dividendos_Inserir").Cells(i, 4)
rs.Update
Sheets("Dividendos_Inserir").Cells(i, 5) = "OK"
goto continuar

erro:
Sheets("Dividendos_Inserir").Cells(i, 5) = "NOK"

continuar:
on error goto 0
rs.MoveNext

Obrigado :)

No caso não é quando dá erro mas sim quando não insere porque a query não devolve nada.

Obrigado pela atenção :)

Share this post


Link to post
Share on other sites
nelsonr

Então podes por de outra forma:

if not rs.EOF then
  Sheets("Dividendos_Inserir").Cells(i, 5) = "OK"
  Do While Not rs.EOF
  rs.Fields("CuponDivNValores").Value = Sheets("Dividendos_Inserir").Cells(i, 3)
  rs.Fields("CuponDivImporteEfectivo").Value = Sheets("Dividendos_Inserir").Cells(i, 4)
  rs.Update
  rs.MoveNext
  Loop
else
 Sheets("Dividendos_Inserir").Cells(i, 5) = "NOK"
endif

Share this post


Link to post
Share on other sites
x_soldier

Então podes por de outra forma:

if not rs.EOF then
  Sheets("Dividendos_Inserir").Cells(i, 5) = "OK"
  Do While Not rs.EOF
     rs.Fields("CuponDivNValores").Value = Sheets("Dividendos_Inserir").Cells(i, 3)
     rs.Fields("CuponDivImporteEfectivo").Value = Sheets("Dividendos_Inserir").Cells(i, 4)
     rs.Update
     rs.MoveNext
  Loop
else
 Sheets("Dividendos_Inserir").Cells(i, 5) = "NOK"
endif

És o maior :D

Muito Obrigado....

Deixo aqui o código para algum nabo como eu!!

Sub InsertDividendos()
   Set conn = New ADODB.Connection
   Set rs = New ADODB.Recordset

   rs.CursorType = adOpenKeyset
   rs.LockType = adLockOptimistic

  conn.ConnectionString = "Provider=MSDASQL.1;Password=VanFor;Persist Security Info=True;Data Source=VanFor_Teste"
   conn.Open
   rs.ActiveConnection = conn

   Set c = Sheets("Dividendos_Inserir").Range("B1").End(xlDown)
   For i = 2 To c.Row
               connstr = "SELECT * FROM Agregados where Periodo='" & Sheets("Dividendos_Inserir").Cells(i, 1) _
                       & "' And CodigoISIN='" & Sheets("Dividendos_Inserir").Cells(i, 2) & "'"



  rs.Open connstr
  If Not rs.EOF Then
  Sheets("Dividendos_Inserir").Cells(i, 5) = "OK"
  Do While Not rs.EOF
         rs.Fields("CuponDivNValores").Value = Sheets("Dividendos_Inserir").Cells(i, 3)
         rs.Fields("CuponDivImporteEfectivo").Value = Sheets("Dividendos_Inserir").Cells(i, 4)
         rs.Update
         rs.MoveNext
  Loop
Else
 Sheets("Dividendos_Inserir").Cells(i, 5) = "NOK"
End If
   rs.Close
   Next i
   conn.Close
End Sub

Edited by thoga31
GeSHi

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.