Ir para conteúdo
Fórum Script Brasil

Carolina Marinho

Membros
  • Total de itens

    22
  • Registro em

  • Última visita

Posts postados por Carolina Marinho

  1. Oi Fulvio, boa tarde!

    Pensei nessa possibilidade também, o problema é que eu to fazendo isso tudo via VB 6, e assim fica beeeeem complicado...

    A solução que eu achei foi:

    Gerar um SEQUENCIAL na tabela;

    ALTER TABLE DBO.tabela

    ADD SEQUENCIAL BIGINT

    Incrementar esse SEQUENCIAL;

    declare @secuence BIGINT ;

    set @secuence = '0';

    update DBO.tabela

    set @secuence = SEQUENCIAL = @secuence + 1

    E comparar o TELEFONE;

    select * from tabela as a

    inner join

    (select MAX(SEQUENCIAL) AS SEQUENCIAL ,TELEFONE from tabela

    group by telefone) as b

    on a.SEQUENCIAL = b.SEQUENCIAL

    ORDER BY A.TELEFONE

    Isso me deu o resultado esperado, mas corro o risco de um timeout em algum lugar... :)

    Muito obrigada, Fulvio!!! Vou testar a sua solução e verificar o menor tempo de execução!

  2. Bom dia,

    tenho uma tabela com 22 campos, onde o campo TELEFONE possui registros duplicados. Preciso pegar todos os campos da tabela mas que o TELEFONE não se repita.

    Exemplo:

    NOME_CLIENTE | ENDERECO | TELEFONE | CPF

    MARIA DA SILVA | RUA DO SABÃO 23, 505 | 12345678 | 123.456.789-0

    JOSE DE SOUZA | RUA 13 48, CASA 2 | 12345678 | 987.654.321-0

    Os telefones são iguais. Eu preciso pegar os 4 campos da tabela mas somente um registro, não importando qual deles (MARIA ou JOSE)

    alguém pode me ajudar?

  3. 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...

  4. 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

  5. Também não tem...

    Achei uma solução válida, mas pra ser feita no SQL

    IF EXISTS (SELECT 1 
        FROM INFORMATION_SCHEMA.TABLES 
        WHERE TABLE_TYPE='BASE TABLE' 
        AND TABLE_NAME='nomedatabela') 
            SELECT 'tablename exists.' 
    ELSE 
            SELECT 'tablename does not exist.'

    Isso serviu pra mim. Mas, mesmo assim, eu ainda prefiro no VB <_<

  6. Kuroi, acabei vendo o favorito errado :unsure:

    ficou assim:

    servidor = "WA-TAURUS"
        BancoDados = "SGC"
        cnTaurus.Provider = "SQLOLEDB"
        cnTaurus.Properties("Data Source").Value = servidor
        cnTaurus.Properties("Initial Catalog").Value = BancoDados
        cnTaurus.Properties("User ID").Value = "*****"
        cnTaurus.Properties("Password").Value = "*****"
        cnTaurus.Open
        
        Set rsTaurus = New ADODB.Recordset
        Set rsTaurus.ActiveConnection = cnTaurus
    
    
    Dim cat As New ADOX.Catalog
    Dim tbl As New ADOX.Table
    Dim existe As Boolean
    
    Set cat.ActiveConnection = cnTaurus
    
    existe = False
    
    For Each tbl In cat.Tables
        If Tabela = "TBD_ODONTO_DATA_CARGA" Then
            existe = True
        End If
    Next

    Continua dando o mesmo erro, agora na linha 'Dim cat As New ADOX.Catalog'

  7. Kuroi, fiz o seguinte:

    Dim db As DAO.Database
    Dim existe As Boolean
    Dim Tabela As DAO.TableDef
    
    
    existe = False
    
    Set db = DBEngine.OpenDatabase("D:\Banco_de_Dados_WA\SGC.mdf")
    
    
    
    For Each Tabela In db.TableDefs
    
        If Tabela = "TBD_ODONTO_DATA_CARGA" Then
            existe = True
        End If
    
    Next

    mas dá erro "Used-defined type not defined" na linha 'Dim db As DAO.Database'

  8. Preciso de uma rotina que verifique se uma tabela existe no banco de dados (estou usando sql server), caso exista, faz o select nessa tabela, caso não exista (o que daria erro no VB), seja realizado um outro procedimento...

    Gostaria de saber qual condição usar.

  9. Boa tarde!

    Eu tenho uma rotina genérica (servidores, bancos e tabelas diferentes, dependendo da solicitação do usuário) que tira informações do banco de dados e insere numa planilha do excel, mas essas informações podem ter acentos ( ex: ã, é, á...).

    Em algumas tabelas, as palavras tem acento e em outras, não.

    Utilizei o Select Case para fazer a compração, mas precisaria retirar os acentos, caso eles existam...

    Alguém sabe se isso é possível?

    Para facilitar o entendimento:

    Select Case UCase(Trim(ws_file.Range("B" & contA4).Value))
                 Case "OCUPADO"
                          ws_file.Range(ActualCol & contA4).Value = ocupado
                 Case "não ATENDE"
                          ws_file.Range(ActualCol & contA4).Value = naoatende
                 Case "SECRETARIA ELETRONICA"
                          ws_file.Range(ActualCol & contA4).Value = secretaria
                 Case "TENTATIVA SEM SUCESSO"
                          ws_file.Range(ActualCol & contA4).Value = tentsemsucesso
              End Select

    Na quarta linha do código, não é "não ATENDE" e sim "N A O ATENDE" sem os espaços. O forum tá editando para 'não'.

  10. Ocultar a plan2 funcionou usando o Set.

    As colunas continuam sendo ocultadas até a H. :angry: :angry: :angry: :angry: :angry: :angry: :angry: :angry: :angry:

    Mas eu to achando que as colunas estão travadas, ou ligadas, ou qualquer coisa do tipo, porque se eu mudo, por exemplo, pra ("I:M") funciona

  11. Nomeei a planilha como Plan2 mesmo, e não funcionou, continua dando o mesmo erro.

    é preciso utilizar

    Set ws_file = wb_file.Worksheets(numero da planilha)
    ??? Coloquei assim:
    Rows("23:34").Select
    Selection.EntireRow.Hidden = True
    
    Columns("C:E").Select
    Selection.EntireColumn.Hidden = True
    
    Plan2.Visible = xlSheetHidden

    E continua escondendo as colunas de C a H

  12. Kuroi, como os usuários desse sistema usam monitores de 15", eu fui testando e ficou assim:

    Private Sub Form_Load()
        frmCadastro.Height = Screen.Height
        frmCadastro.Width = Screen.Width
        frmCadastro.Move 0, 0
        
        frmGerenciamento.Height = Screen.Height
        frmGerenciamento.Width = Screen.Width
        frmGerenciamento.Move 0, 0
    
        frmPrincipal.Height = Screen.Height
        frmPrincipal.Width = Screen.Width
        frmPrincipal.Move 0, 0
        
        Picture2.Width = Screen.Width - 270
        Picture1.Width = Screen.Width - 170
        Picture1.Height = Screen.Height - 170
        cmd_sair.Left = cmd_sair.Left - 300
        frmGerenciamento.Picture1.Height = Screen.Height - 200
        frmGerenciamento.Picture1.Width = Screen.Width - 200
        frmCadastro.frm_dados_agente.Width = Screen.Width - 425
        frmCadastro.frm_banco.Width = Screen.Width - 425
        frmCadastro.frm_observacao.Width = Screen.Width - 425
        frmCadastro.txt_observacao.Width = frmCadastro.frm_observacao.Width - 600
    End Sub

    Tá funcionando, e centralizado (quase perfeito), mas vou tentar o que você falou.

    Muito obrigada!

  13. Boa tarde!

    Criei um log de eventos onde é registrado cada clique dado pelo usuário, mas gostaria também de gravar o que foi digitado nos text box, sem que seja necessário salvar.

    Para tentar facilitar o entendimento de voces, é um sistema de vendas, onde o operador digita o nome do cliente, endereço, telefone, essas coisas. Os dados são gravados no banco de dados após pressionado o botao salvar.

    Consegui fazer isso:

    Private Sub txtagencia_Click()
        
        strOutFileName = "C:\Documents and Settings\carol\Desktop\NET 2.0\Logs\Log_OP_" & gblNOME_USUARIO & Format(Now(), "DDMMYYYY") & ""
        
        Open strOutFileName For Append As #2
        Write #2, "Clique na caixa de texto Agencia (Tela Complementar)", Now()
        Write #2,
        Close #2
    End Sub

    Se o operador clicar no text box txtagencia, será salva a msg no arquivo de log, mas o que ele digitou lá eu não to conseguindo salvar...

    Alguém pode ajudar?

    Obrigada!

×
×
  • Criar Novo...