Newsgroup: it.comp.lang.visual-basic
Titolo: [MySql] Esportare database.

Ciao, in un progetto VB6 che utilizza ADO per accedere a MySql, vorrei 
integrare la possibilità di esportare un database o una tabella.
Ho provato con Shell "mysqldump -u user -ppasswd dbname > dbname.sql" ma non 
funziona nulla, lo stesso comando effettuato dal prompt di ms-dos va a buon 
fine.
Potete indicarmi la strada giusta e soprattutto quale potrebbe essere il 
metodo piu' efficace per eseguire questo tipo di operazione.
Grazie
Fabio 

prezzemolo wrote:

Non conosco assolutamente MySQL però, da quello che hai scritto, il 
problema potrebbe essere la mancanca del path relativo al comando 
mysqldump.
Quindi:
Shell "(percorso completo)\mysqldump -u user -ppasswd dbname > dbname.sql"
a meno che, la directory dove risiede "mysqldump" non sia stata inserita 
nella variabile d'ambiente PATH.
Ciao
-- 
Gianluca Cannalire
Microsoft MVP/MCP - Visual Basic
http://www.visual-basic.it
http://community.visual-basic.it/gianluca

 nella variabile d'ambiente PATH.
Avevo pensato alla stessa cosa. Poi però mi sono ricordato che con 
MySql è importantissimo (per tante altre cose) inserire il percorso dei 
binari nella PATH, per cui ho dimenticato di postare.
Ciao
Alberto
-- 
Autore di
"Petting for Dummies"

 dei binari nella PATH, per cui ho dimenticato di postare.
Ciao Alberto,
immaginavo che MySQL potesse utilizzare la variabile PATH.
A questo punto la palla passa a 'prezzemolo' che potrebbe illuminarci sul 
significato di "non funziona nulla" ;)


 Ciao
Nella fase di installazione di mysql ho incluso la directory bin Windows 
PATH infatti, se dal prompt dei comandi digito
mysqldump -u user -ppasswd dbname > dbname.sql
funziona.
Lo stesso comando lanciato da Start -> Esegui non sortisce alcun effetto, 
vedo solo che si apre e si chiude rapidamente la finestra nera del prompt.
Ho inserito il path completo nel comando shell ed ho lo stesso risultato, 
(prompt che si apre e chiude rapidamente).
Speriamo di potere risolvere.
Saluti
Fabio

 (prompt che si apre e chiude rapidamente).
Prova con le "". Se non basta aggiungi l'estensione (.exe o .com, ora non 
ricordo, dopo il nome dell'eseguibile)
Start -> Esegui -> "mysqldump.exe -u user -ppasswd dbname > dbname.sql"
hth,
Lokar
-- 
Sito Comune: 
http://www.it-lang-vb.net/
Manifesto: 
http://www.it-lang-vb.net/docs/Manifesto.txt
Statuto: 
http://www.it-lang-vb.net/docs/Statuto.txt
UGIdotNET - 
http://www.ugidotnet.org

Per esportare il database esegui "PhpMyAdmin" o lancia via browser 
"
127.0.0.1/mysql
" se hai i PATH configurati
Poi selezioni il database ,
selezioni le tabelle ,
alla fine selezioni ....ESPORTA...
Ciao
MrPHP 


Ho provato ma niente da fare. Non capisco però perchè dal prompt funziona.
P.S. MrPHP volevo dirti che la funzione dovrei integrarla dentro un progetto 
VB6.
Grazie a chi può essermi d'aiuto
Saluti
Fabio

 funziona.
Hai provato ad includere tutto il percorso completo di "mysqldump.exe" ?



Si, l'ho fatto, il path completo č questo:
"C:\Programmi\MySQL\MySQL Server 4.1\bin\mysqldump.exe"
Ho provato anche ad omettere la password e mi si apre il prompt di dos con 
la richiesta della password e poi si chiude subito senza eseguire il dump. 
Per cui ho la certezza che il comando va in esecuzione, il problema ritengo 
quindi non č nel percorso.
Continuo a cercare.
Saluti
Fabio

Alloro , risolto trovando in rete il seguente codice che
usa le API .
Codice testato e funzionante.
'****************************************************
'
' Mettere in un modulo .bas
'
'
Private Declare Function ShellExecute Lib "shell32.dll" Alias 
"ShellExecuteA" _
  (ByVal hWnd As Long, ByVal lpOperation As String, _
  ByVal lpFile As String, ByVal lpParameters As String, _
  ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Declare Function ShellExecuteForExplore Lib "shell32.dll" Alias 
"ShellExecuteA" _
    (ByVal hWnd As Long, _
    ByVal lpOperation As String, _
    ByVal lpFile As String, _
    lpParameters As Any, _
    lpDirectory As Any, _
    ByVal nShowCmd As Long) As Long
Public Enum EShellShowConstants
    essSW_HIDE = 0
    essSW_MAXIMIZE = 3
    essSW_MINIMIZE = 6
    essSW_SHOWMAXIMIZED = 3
    essSW_SHOWMINIMIZED = 2
    essSW_SHOWNORMAL = 1
    essSW_SHOWNOACTIVATE = 4
    essSW_SHOWNA = 8
    essSW_SHOWMINNOACTIVE = 7
    essSW_SHOWDEFAULT = 10
    essSW_RESTORE = 9
    essSW_SHOW = 5
End Enum
Private Const ERROR_FILE_NOT_FOUND = 2&
Private Const ERROR_PATH_NOT_FOUND = 3&
Private Const ERROR_BAD_FORMAT = 11&
Private Const SE_ERR_ACCESSDENIED = 5        ' access denied
Private Const SE_ERR_ASSOCINCOMPLETE = 27
Private Const SE_ERR_DDEBUSY = 30
Private Const SE_ERR_DDEFAIL = 29
Private Const SE_ERR_DDETIMEOUT = 28
Private Const SE_ERR_DLLNOTFOUND = 32
Private Const SE_ERR_FNF = 2                ' file not found
Private Const SE_ERR_NOASSOC = 31
Private Const SE_ERR_PNF = 3                ' path not found
Private Const SE_ERR_OOM = 8                ' out of memory
Private Const SE_ERR_SHARE = 26
Public Function ShellEx( _
        ByVal sFIle As String, _
        Optional ByVal eShowCmd As EShellShowConstants = essSW_SHOWDEFAULT, 
_
        Optional ByVal sParameters As String = "", _
        Optional ByVal sDefaultDir As String = "", _
        Optional sOperation As String = "open", _
        Optional Owner As Long = 0 _
    ) As Boolean
Dim lR As Long
Dim lErr As Long, sErr As Long
    If (InStr(UCase$(sFIle), ".EXE") <> 0) Then
        eShowCmd = 0
    End If
    On Error Resume Next
    If (sParameters = "") And (sDefaultDir = "") Then
        lR = ShellExecuteForExplore(Owner, sOperation, sFIle, 0, 0, 
essSW_SHOWNORMAL)
    Else
        lR = ShellExecute(Owner, sOperation, sFIle, sParameters, 
sDefaultDir, eShowCmd)
    End If
    If (lR < 0) Or (lR > 32) Then
        ShellEx = True
    Else
        ' raise an appropriate error:
        lErr = vbObjectError + 1048 + lR
        Select Case lR
        Case 0
            lErr = 7: sErr = "Out of memory"
        Case ERROR_FILE_NOT_FOUND
            lErr = 53: sErr = "File not found"
        Case ERROR_PATH_NOT_FOUND
            lErr = 76: sErr = "Path not found"
        Case ERROR_BAD_FORMAT
            sErr = "The executable file is invalid or corrupt"
        Case SE_ERR_ACCESSDENIED
            lErr = 75: sErr = "Path/file access error"
        Case SE_ERR_ASSOCINCOMPLETE
            sErr = "This file type does not have a valid file association."
        Case SE_ERR_DDEBUSY
            lErr = 285: sErr = "The file could not be opened because the 
target application is busy. Please try again in a moment."
        Case SE_ERR_DDEFAIL
            lErr = 285: sErr = "The file could not be opened because the DDE 
transaction failed. Please try again in a moment."
        Case SE_ERR_DDETIMEOUT
            lErr = 286: sErr = "The file could not be opened due to time 
out. Please try again in a moment."
        Case SE_ERR_DLLNOTFOUND
            lErr = 48: sErr = "The specified dynamic-link library was not 
found."
        Case SE_ERR_FNF
            lErr = 53: sErr = "File not found"
        Case SE_ERR_NOASSOC
            sErr = "No application is associated with this file type."
        Case SE_ERR_OOM
            lErr = 7: sErr = "Out of memory"
        Case SE_ERR_PNF
            lErr = 76: sErr = "Path not found"
        Case SE_ERR_SHARE
            lErr = 75: sErr = "A sharing violation occurred."
        Case Else
            sErr = "An error occurred occurred whilst trying to open or 
print the selected file."
        End Select
        Err.Raise lErr, , App.EXEName & ".GShell", sErr
        ShellEx = False
    End If
End Function
'****************************************************
'****************************************************
'
' Mettere in un form
'
'
Private Sub Command1_Click()
Dim x As Boolean
prg = "c:\Programmi\EasyPHP1-8\mysql\bin\mysqldump.exe"
par = "-u root -r c:\Programmi\EasyPHP1-8\mysql\bin\dbname.sql nomedb"
x = ShellEx(prg, essSW_SHOWMINNOACTIVE, par, , , Me.hWnd)
end sub
'****************************************************
le variabili rappresentate nel command  :
    prg = percorso dell'eseguibile
    par = parametri da passare all'eseguibile
            ( vedi che ho usato -r per ridirigere l' output )
Ciao.
N.B.
La funzione ShellEx la puoi usare anche per altri scopi :
'Per aprire una pagina internet
    'ShellEx "
http://www.tuosito.it
", , , , , Me.hWnd
'Per stampare un documento
    'ShellEx "C:\My Documents\Music\Brown Paper Bag.doc", , , , "print", 
Me.hWnd
'Per explorare una cartella
    'ShellEx "C:\My Documents\Music", , , , "explore", Me.hWnd
'Per aprire VB6, caricare ed eseguire un progetto
    'ShellEx _
       '""C:\Programmi\Microsoft Visual Studio\VB98\VB6.EXE"",_
       'essSW_SHOWMINNOACTIVE , _
       ' "/run C:\Programmi\Microsoft Visual Studio\VB98\JobReg\JobReg.vbp", 
_
       ', Me.hWnd

 Ciao.
Grazie, il codice  che mi ha passato MrPhP funziona, ma piu' illuminante č 
stata l'indicazione "ho usato -r per ridirigere l'output".
Infatti eseguendo semplicemente il comando con:
Shell "mysqldump -u user -ppasswd dbname -r c:\mypath\dbname.sql" funziona.
In pratica da dos utilizzavo '>' per ridirigere l'output e a quanto pare con 
shell non funziona.
Grazie ancora a tutti.
Saluti
Fabio