ABRIR ARQUIVO .SQL, ATRIBUIR AO TEXT E EXECUTAR

 Tópico anterior Próximo tópico Novo tópico

ABRIR ARQUIVO .SQL, ATRIBUIR AO TEXT E EXECUTAR

VB / VBA

 Compartilhe  Compartilhe  Compartilhe
#485548 - 23/11/2018 13:13:47

TRTNCG
CAMPINA GRANDE
Cadast. em:Fevereiro/2004


Olá Amigos, Boa Tarde!

Bom gente me veio a necessidade de criar um módulo de executar script, tipo, alterei minha base criei, tabela, índices, procedimentos e etc, e preciso gerar um script para executar no meu cliente e atualizar a base dele, já consigo abrir o arquivo .sql e mostrar no texto, agora necessito executar como poderei fazer, tenho que ler linha a linha alguém teria algum exemplo, isso agilizaria bastante a rotina de atualização.




#485549 - 23/11/2018 13:29:17

JONESPARIS
ERECHIM
Cadast. em:Fevereiro/2006


Olá...

Abra a Sua conexão e abra ela usando a execução:

Dim Comando as String
Comando = ""
Comando = Text1.Text
Conexão.Execute Comando

Jones Paris

#485552 - 23/11/2018 14:24:31

TRTNCG
CAMPINA GRANDE
Cadast. em:Fevereiro/2004


Citação:
:
Olá...

Abra a Sua conexão e abra ela usando a execução:

Dim Comando as String
Comando = ""
Comando = Text1.Text
Conexão.Execute Comando


Então como é text é multiline o que acontece pe ser colocar desse jeito ele não vai pegar linha por linha vai executar tudo daí da erro, pois por exemplo se tenho duas linhas 1 - CREATE TABLE XXXXX  2-  CREATE GENERATOR LLLL

Ele vai levar em conta que é somente uma linha dando erro

Na verdade teria ue ler linhas separadas, ou seja linha a linha



#485553 - 23/11/2018 14:40:53

FABRICIOWEB
BELO HORIZONTE
Cadast. em:Novembro/2011


eu faço pelo comando do dos mesmo se for mysql assim ele cria todas as tabelas


Dim iFF As Integer
Dim sLinha1 As String
iFF = FreeFile
Open "C:\BACKUP1.BAT" For Output As iFF
Print #iFF, Chr(34) & "C:\\Program Files\\MySQL\\MySQL Server 5.6\\bin\\mysql.exe" & Chr(34) & "  --host=localhost --user=root --password= bancodedados <  " & Chr(34) & "local do seu arquivo mysql .sql" & Chr(34)
Print #iFF, "del c:\BACKUP1.bat"
Close iFF

Shell "c:\BACKUP1.bat", 1
    



#485554 - 23/11/2018 16:31:10

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Scripts SQL, por padrão possuem delimitadores de comando, geralmente o "ponto e vírgula"

_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#485633 - 28/11/2018 00:57:09

TRTNCG
CAMPINA GRANDE
Cadast. em:Fevereiro/2004


Essa é a solução.....

On Error GoTo Erro_SQL

    Dim TextoSQl As String
    Dim TextCount As Long, TextLineIndx As Long, TextLineLen As Long, i As Long
    Dim strBuffer As String
    Dim strBuffer2 As String
    
    TextCount = SendMessage(Text1.hWnd, EM_GETLINECOUNT, 0, 0)
    
    If TextCount > 1 Then
        
        If Conexao.State = 0 Then Conexao.Open
        
        Conexao.BeginTrans
        
        With Text1
            For i = 0 To TextCount - 1
                TextLineIndx = SendMessage(.hWnd, EM_LINEINDEX, i, 0)
                TextLineLen = SendMessage(.hWnd, EM_LINELENGTH, TextLineIndx, 0)
                strBuffer = Space(TextLineLen)
                Call SendMessageStr(.hWnd, EM_GETLINE, i, ByVal strBuffer)
                
                If Mid(Trim(strBuffer), 1, 2) <> "/*" And Trim(strBuffer) <> "SET SQL DIALECT 3;" And Mid(Trim(strBuffer), 1, 8) <> "SET TERM" And Trim(strBuffer) <> "^" Then
                        If InStr(strBuffer, ";") > 1 Then
                            Variavel = (Split(strBuffer, ";"))
                            strBuffer = Variavel(0)
                            If Len(strBuffer2) > 0 Then
                                If UCase("NEW.") = UCase(Mid(Trim(strBuffer), 1, 4)) Or Mid(Trim(strBuffer), 1, 7) = "SUSPEND" Then
                                    TextoSQl = strBuffer2 & Space(1) & strBuffer & ";END"
                                    Conexao.Execute TextoSQl
                                Else
                                    If Trim(Mid(strBuffer, 1, 3)) <> "END" Then
                                        TextoSQl = strBuffer2 & Space(1) & strBuffer
                                        MsgBox TextoSQl
                                        Conexao.Execute TextoSQl
                                    End If
                                End If
                                strBuffer2 = ""
                                Debug.Print TextoSQl
                            Else
                                TextoSQl = strBuffer
                                Debug.Print TextoSQl
                                Conexao.Execute TextoSQl
                            End If
                            
                        Else
                            If Mid(Trim(strBuffer), 1, 3) <> "END" Then
                                If strBuffer2 <> "" Then
                                    strBuffer2 = strBuffer2 & Space(1) & strBuffer
                                Else
                                    strBuffer2 = strBuffer2 & strBuffer
                                End If
                            End If
                        End If
                End If
            Next
        End With
        
        Conexao.CommitTrans
        
        If Conexao.State = 1 Then Conexao.Close

        MsgBox "Dados atualizados com sucesso!", vbInformation, "Informativo"

    Else
        MsgBox "O arquivo informado está vazio. Informe outro arquivo!", vbInformation, "Informativo"
    End If

Erro_SQL:
   If Err <> 0 Then
    If Banco.State = 1 Then Banco.Close
    Call Tratamento_Erro(Err.Number, Err.Description, Erl, Now, Me.Name, "Acao_Executar_Script", IDUsuarioLogado, HostnameMaquina, IPMaquina)
   End If



 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por TRTNCG em 28/11/2018 00:57:24