Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Tempo excedido durante update


Carolina Marinho

Pergunta

Pessoal, boa tarde!

Não estou conseguindo fazer um update simples em uma tabela, está dando 'tempo excedido'. Já tentei aumentar o tempo de comando e nada... Se eu pego a querie pelo immediate e rodo direto no banco, funciona como esperado...

Alguém pode ajudar?

Private Sub Form_Load()

Dim usuario, senha, servidor, BancoDados As String
Dim sql As String
Dim sql_update As String
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset

servidor = "TI01"
BancoDados = "master"
cn.Provider = "SQLOLEDB"
cn.Properties("Data Source").Value = servidor
cn.Properties("Initial Catalog").Value = BancoDados
cn.Properties("User ID").Value = "usuario"
cn.Properties("Password").Value = "senha"

cn.Open
   
Set rs = New ADODB.Recordset
Set rs.ActiveConnection = cn

sql = "SELECT * From Base_WA_140909"
sql = sql & " WHERE (TXT_NOME_CIDADE = 'TANGUA') AND (CLASSE_SUBCLASSE > '02') AND "
sql = sql & " (EST_CLIENTE = '0') OR (EST_CLIENTE = '3')"

rs.Open sql, cn
rs.MoveFirst

Do While Not rs.EOF
    numeroCliente = rs.Fields("NUMERO_CLIENTE").Value
    If IsNull(rs.Fields("telefone").Value) Then
        sql_update = "UPDATE Base_WA_140909 SET TELEFONE = '00000000' WHERE NUMERO_CLIENTE = '" & numeroCliente & "'"
        cn.CommandTimeout = 120
        cn.Execute sql_update, , adExecuteNoRecordsSet
    End If
    rs.MoveNext
Loop
End Sub

Editado por Carolina Marinho
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

carolina, essa constante adExecuteNoRecordsSet existe mesmo?? eu sei q tem a adExecuteNoRecords, sera q você não errou na digitacao??

e ele demora mesmo os 120 segundos antes de dar a mensagem??

sera q a sua conexao ta funcionando certinho?? você consegue fazer select?? outros updates funcionam??

Link para o comentário
Compartilhar em outros sites

  • 0

kuroi,

Descobri o que está acontecendo, mas não sei resolver...

Antes de fazer o update, eu fechei o rs e funcionou perfeitamente.

Sim, minha conexão funciona, eu consigo fazer select numa boa, o problema (eu acho) é que eu estou tentando fazer um update no registro que o select tá...

fiz assim pra testar:

Do While Not rs.EOF
    numeroCliente = rs.Fields("NUMERO_CLIENTE").Value
    numeroDoc = rs.Fields("NUM_DOC").Value
    If Not IsNull(numeroDoc) Then
        If Not IsNumeric(numeroDoc) Then
            rs.Close
            variavel_a_testar = numeroDoc
            If TestaRegExp("[^0-9]+", variavel_a_testar) = False Then
            numeroDoc = aString
            Update_documento
            End If
        End If
    Else
    numeroDoc = "00000000"
    Update_documento
    End If
    rs.MoveNext
Loop

Function Update_documento()
    
    Set cn_update = New ADODB.Connection
    Set rs_update = New ADODB.Recordset

    Banco_de_dados = "xxxxxx"
    servidor = "xxxxxxxxxxx"

    cn_string = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=" & Banco_de_dados & ";Data Source=" & servidor '  & " User ID=*****;Password=********" 

    Set cn_update = New ADODB.Connection

    With cn_update
        .Open cn_string
        .CommandTimeout = 120
    End With

    txt_sql = "Update_Documento " & numeroCliente & ", '" & numeroDoc & "'"
    cn_update.CommandTimeout = 120
    cn_update.Execute txt_sql, , adExecuteNoRecordsSet


End Function

Assim funcionou, só que quando volta pro loop, dá erro dizendo que tá fechado (claro....). Isso mostra que o erro é o select aberto...

Enfim, pensei em duas soluções, mas não sei executar nenhuma delas...

1- Criar uma matriz com colunas NUMERO_CLIENTE, NUMERO_DOC, NUMERO_TELEFONE (são os campos que eu preciso) que vai salvar os dados do select, para que eu possa fechá-lo antes do update;

2- Disseram que, por padrão, o VB trava qualquer execução na tabela que está sendo ultilizada, mas que tem como destravar, possibilitando o select ativo e o update.

Espero ter conseguido explicar...

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...