IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

vb6 et SQL Server


Sujet :

VB 6 et antérieur

  1. #1
    Membre averti
    Homme Profil pro
    Analyste bidouilleur
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Analyste bidouilleur

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Par défaut vb6 et SQL Server
    Bonjour,

    J'ai un petit souci : Un portable doit partir le soir avec la derniere version de la base de donnée celui ci ne sera connecté a aucun reseau.

    Le serveur SQL Server 2000.
    Le portable SQL Server 2005 express edition + vista

    J'ai donc fait un bout de code afin de récupéré une sauvegarde de la base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
     
    private sub form_load()
     
        Set en = rdoEnvironments(0)
        en.CursorDriver = rdUseOdbc
     
        Set cn = en.OpenConnection(dsName:="", prompt:=rdDriverNoPrompt, Connect:="uid=sa;pwd=mdp;driver={SQL Server};" & "server=monbeauserver;database=mabase;")
     
        cn.QueryTimeout = 100000
     
        Set cn2 = en.OpenConnection(dsName:="", prompt:=rdDriverNoPrompt, Connect:="uid=sa;pwd=mdp;driver={SQL Server};" & "server=localhost;database=mabase;")
        cn.QueryTimeout = 100000
     
    end sub
     
    Private Sub Command1_Click()
        Dim requete As String
        Dim result As rdoResultset
        Dim requete2 As String
        Dim result2 As rdoResultset
     
       On Error GoTo Command1_Click_Error
     
        requete = "BACKUP DATABASE ma_base TO DISK=N'\\(Un serveur public)\PERMANENCE\save.bak'"
        lbl_info = "Sauvegarde de la base exploitation "
        Form1.Refresh
        cn.Execute (requete)
     
        requete = " USE master " _
                & " SELECT 'kill',spid " _
                & " From sysprocesses " _
                & " WHERE dbid=db_id('mabase') "
     
        Set result = cn2.OpenResultset(requete)
     
        While Not result.EOF
            requete2 = result(0) & " " & result(1)
            Set result2 = cn2.OpenResultset(requete2)
            result.MoveNext
        Wend
     
        lbl_info = "Rapatriement du fichier DATA"
        Form1.Refresh
        FileCopy "z:\save.bak", "d:\save.bak"
     
         requete = "RESTORE DATABASE mabase FROM DISK=N'D:\save.bak' with replace "
         lbl_info = "Restauration de la base"
         Form1.Refresh
     
         cn2.Execute (requete)
     
        cn2.Close
     
     
        MsgBox ("Mise a jour du portable terminée avec succés")
     
    End Sub

    Probleme N° 1 -> Le timeout n'est pas pris
    Probleme N° 2 -> La restauration ne marche pas : sous l'entreprise manager la base est signalé comme étént en cours de restauration et on ne peut plus y acceder.

    Par contre si je lance la requete de restauration sous l'analyseur de requete la restauration se deroule bien.

    Par contre le systeme est pas figé et je suis preneur de toute autre solution


    Merci d'avance a tous et une mega bonne journée !!!!
    A bientot,
    Ntotor

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur VB6 et tout neuf en .Net
    Inscrit en
    Avril 2005
    Messages
    377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VB6 et tout neuf en .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 377
    Par défaut
    Bonjour Ntotor,

    Personnellement pour faire une sauvegarde et restauration avec SQLServeur (2000 ou 2005) j'utilise les objet DMO founis avec SQLServeur.

    Référence à jouter au projet : Microsoft SQLDMO Object library

    Voici un petit exemple : c'est du copier-coller qui ne doit pas marcher tel-quel, mais cela te donnera une idée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    Option Explicit
     
    Private mSQLServer       As SQLDMO.SQLServer
    Private mSQLBackup       As SQLDMO.Backup
    Private mSQLRestore      As SQLDMO.Restore
     
    Private Sub Sauvegarder()
      Set mSQLServer = New SQLDMO.SQLServer
      With mSQLServer
        .LoginSecure = True  'Identification Windows NT
        .LoginTimeout = 30
        .Connect "MonServeur", "", ""
      End With
     
     
      Set mSQLBackup = New SQLDMO.Backup
      With mSQLBackup
        .Initialize = True 'Une seule sauvegarde par support de sauvegarde
        .PercentCompleteNotification = 1
        .Database = "MaBase"
     
        'Attention : il faut utiliser .ShortPath car SQLServer n'aime pas les noms avec des espaces
        .Files = Fs.BuildPath(FolderSvg.ShortPath, .Database & ".bdd")
        .BackupSetDescription = App.Title & " " & App.Major & "." & App.Minor & "." & App.Revision
     
        .SQLBackup mSQLServer
      End With
    End Sub
     
    Private Sub Restaurer()
      Set mSQLServer = New SQLDMO.SQLServer
      With mSQLServer
        .LoginSecure = True  'Identification Windows NT
        .LoginTimeout = 30
        .Connect "MonServeur", "", ""
      End With
     
     
      Set mSQLRestore = New SQLDMO.Restore
      With mSQLRestore
        .Action = SQLDMORestore_Database
        .PercentCompleteNotification = 1
        .Database = "MaBase"
     
        .Files = "Mon fichier de sauvegarde"
     
        'Remplacement de la base de données par une autre
        .ReplaceDatabase = True
     
        'Construction de la chaine pour changer l'emplacement de la base de données
        Set Rep = QueryResultToRecordset(.ReadFileList(mSQLServer))
        If Not Rep Is Nothing Then
          RelocateFiles = ""
          Rep.Filter = "Type = 'D'"  'Seulement le fichier des données, pas le log '#SQL#
          RelocateFiles = RelocateFiles & "[" & Rep!LogicalName & "],[" & Rep!PhysicalName & "]," & _
                          "[" & Rep!LogicalName & "],[" & Trim(mSQLServer.Databases(.Database).FileGroups(1).DBFiles(1).PhysicalName) & "]"
          Rep.Filter = "Type = 'L'"  'Seulement le log '#SQL#
          RelocateFiles = RelocateFiles & ","
          RelocateFiles = RelocateFiles & "[" & Rep!LogicalName & "],[" & Rep!PhysicalName & "]," & _
                          "[" & Rep!LogicalName & "],[" & Trim(mSQLServer.Databases(.Database).TransactionLog.LogFiles(1).PhysicalName) & "]"
          .RelocateFiles = RelocateFiles
        End If
        .SQLRestore mSQLServer
      End With
    End Sub
     
    Public Function QueryResultToRecordset(ByRef QueryResults As SQLDMO.QueryResults) As ADODB.Recordset
      Dim rsResults                     As ADODB.Recordset
      Dim CptCol                        As Long
      Dim CptRow                        As Long
     
      If QueryResults.Columns = 0 Then
        Set QueryResultToRecordset = Nothing
        Exit Function
      End If
     
      'Création du recordset
      Set rsResults = New ADODB.Recordset
      For CptCol = 1 To QueryResults.Columns
        rsResults.Fields.Append QueryResults.ColumnName(CptCol), adVarChar, QueryResults.ColumnMaxLength(CptCol) + 2
      Next CptCol
     
      'Ajout des enregistrements
      rsResults.CursorLocation = adUseClient
      rsResults.Open , Nothing, adOpenKeyset, adLockOptimistic
      For CptRow = 1 To QueryResults.Rows
        rsResults.AddNew
        For CptCol = 1 To QueryResults.Columns
          Select Case QueryResults.ColumnType(CptCol)
          Case -7   ' SQLDMO_DTypeBit => booléen
            rsResults.Fields(CptCol - 1) = IIf(QueryResults.GetColumnBool(CptRow, CptCol), 1, 0)
          Case Else
            rsResults.Fields(CptCol - 1) = QueryResults.GetColumnString(CptRow, CptCol)
          End Select
        Next
        rsResults.Update
      Next CptRow
     
      Set QueryResultToRecordset = rsResults
      Exit Function
    End Function

  3. #3
    Membre averti
    Homme Profil pro
    Analyste bidouilleur
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Analyste bidouilleur

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Par défaut
    Merci beaucoup Najdar,

    Cela marche beaucoup mieux avec ton code !!!


    Beaucoup de merci encore et une tres bonne journée !

    A plus,
    Ntotor

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. application vb6 de sql server à oracle
    Par ess2007 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 15/04/2007, 17h13
  2. vb6 et sql server 2000
    Par tinhinan6 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 09/01/2007, 14h09
  3. probleme d'application client-serveur en vb6 et SQL server
    Par maxtin dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 15/08/2006, 14h19
  4. [VB6 MySQL / SQL Server]
    Par Essedik dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 31/03/2006, 23h08
  5. Réponses: 3
    Dernier message: 05/03/2003, 11h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo