Visual Basic Foro
Programación => Bases de Datos => Mensaje iniciado por: YAcosta en Mayo 04, 2012, 01:25:35 pm
-
Saludos amigos.
Una consulta, tengo un script que crea una base de datos y lo tengo en un archivo sql. ¿como podria ejecutar esto desde VB6? es decir, quiero hacer una aplicación que cree una BD desde cero, entonces debe ejecutarse el script y luego conectarse a esa BD, mi problema esta en que no se como hacer correr un archivo del tipo MiScript.sql desde la misma aplicación sin usar programas manejadores de BD.
Gracias
-
Yo lo hago con un BAT asi:
@echo off
title=Espere un momento creando la base Datos...
color 47
echo Espere un momento creando la base Datos...
Ping -n 6 localhost >nul
cd C:\wamp\bin\mysql\mysql5.5.8\bin
mysql --user=root --password= < c:\bdhotel\control_hotel.sql
-
asi es yo realice uno hace años con sql 2000
en un bat luego lo converti a un exe
y ese exe era ejecutado desde vb
bueno yo lo ejecutaba con este:
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 Longel codogio del bat era asi:
@echo OFF
Title Creando la base de datos.
color F1
osql -S NOMBRESERVIDOR -E -i ARCHIVO.sql
echo.
echo se a creado correctamente la base de datos
echo ---------------------------------------------------------------------
sleep 1000
exit
creo que me paso un caso era en el ascii del dos que cuando lo creaba desde el bat la base de datos
y si contenian insert into con datos como por ejemplo la ñ o los acentos o caractereres especiales
se insertaba en la base de datos el ascii de dos
gracias
-
Gracias compañeros, buenas ideas.
Saludos
-
Yo copio el .sql y de ahí llamo al mysql y espero a que termine, lo usaba para hacer backups de datos, no de formato, aunque sirve igual :P
MousePointer = MousePointerConstants.vbHourglass
Dim archSQL As String, archTemp As String
' archSQL = "C:\a.sql" - Lo ponen con el CommonDialog o como quieran
archTemp = Mid$(archSQL, InStrRev(archSQL, "\"))
archTemp = App.Path & "\mysql\bin" & archTemp
Call FileCopy(archSQL, archTemp)
Call ShellWait(App.Path & "\mysql\bin\mysql.exe", "-u(user) -p(pass) -D(nombre de bd) -e ""\. " & archTemp & """, App.Path & "\mysql\bin")
MousePointer = MousePointerConstants.vbDefault
PD: La ruta del archivo temporal debe quedar sin espacios, de lo contrario les recomiendo usar GetShortPathName o algún artilugio similar
y en un modulo
Private Declare Function ShellExecuteExA Lib "shell32" (lpExecInfo As SHELLEXECUTEINFO) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Type SHELLEXECUTEINFO
cbSize As Long
fMask As Long
hwnd As Long
lpVerb As String
lpFile As String
lpParameters As String
lpDirectory As String
nShow As Long
hInstApp As Long
lpIDList As Long
lpClass As String
hkeyClass As Long
dwHotKey As Long
hIcon As Long
hProcess As Long
End Type
Private Const SEE_MASK_FLAG_NO_UI = &H400
Private Const SEE_MASK_NOCLOSEPROCESS = &H40
Private Const SEE_MASK_CLASSNAME = &H1
Private Const WAIT_TIMEOUT = &H102
Private Const SW_HIDE = 0
Public Sub ShellWait(ByVal sFile As String, ByVal sParams As String, ByVal sDir As String)
Dim Retval As Long, ShExInfo As SHELLEXECUTEINFO
With ShExInfo
.cbSize = Len(ShExInfo)
.fMask = 0 'SEE_MASK_FLAG_NO_UI Or SEE_MASK_CLASSNAME Or SEE_MASK_NOCLOSEPROCESS ' No recuerdo porque lo desactive...
.hwnd = 0
.lpVerb = "open"
.lpFile = sFile
.lpParameters = sParams
.lpDirectory = sDir
.nShow = SW_HIDE
End With
Retval = ShellExecuteExA(ShExInfo)
If Retval = 0 Then
' Error... reportenlo a su modo xD
Else
Do
DoEvents
Loop Until WaitForSingleObject(ShExInfo.hProcess, 0) < WAIT_TIMEOUT
End If
End Sub
-
Raulin quizá no te entendí bien, pero lo que yo quería era crear la BD desde cero, sin copiarla. Te explico breve un poco el escenario.
Llegaré a una pc y solo le instalare lo pertinente a la gestión del motor de base de datos (el motor en si y el odbc) pero hasta alli no tendre la bd, es mas, no tendré ni la estructura y no me sera posible volver a ella, tampoco puedo crearla yo y luego mandarle el archivo que seria lo mas facil, esto es por un tema muy particular.
En un tiempo lo que entregare sera una aplicación, solo el exe, se ejecuta el exe y aparece la BD con sus tablas lista para usarse.
No es para nada maleado, porque para algo maleado hay otras formas mas sencillas.
-
Claro, de hecho se puede hacer, eso y cualquier cosa.... lo que aclare fue por la llamada a mysql
"-u(user) -p(pass) -D(nombre de bd)" es opcional, lo que pasa es que no lo uso para hacer el backup (que uso una llamada similar)
Si tenes por ej algo asi
CREATE DATABASE db1; USE db1; CREATE TABLE.....Funciona igual, solo que te recomendaria quitar el parametro -D de la llamada y guala! FUnciona igual! Ademas esta hecho para que espere a que termine (en el caso de los backups que tenes que esperar a que inserte 1000 registro con otros 5000 relacionados... tipica tabla clientes-ventas)
-
Bacan, voy a verlo entro hoy y mañana, lo bueno es que la bd a crearse estara vacia, solo es crearla y crear 3 o 4 tablas, sin siquiera relaciones, ni meter SPs, ni nada.
-
Disculpa Yacosta en que gestor lo vas a usar el script?
bueno como te dije antes si usas sql server trata de solo ingresar la estructura de la base de datos sin datos
osea todas las tablas si tienes relaciones tambien normalaso, los disparadores, los procedimientos almacenados. Si insertas datos en las tablas por medio del script trata de no agregar caracteres especiales al menos que conoscas el caractes especial para dos.
has las pruebas para que veas como te va.
Gracias
-
Hola Cristian.
Lanzaste la pregunta del millon que pense no se iba a dar. :)
Lo voy a usar con Firebird, no tendrá caracteres especiales ni data, en esta ocasion no aprovechare las bondades del motor ya que no tendra SP ni triggers, necesito solo la base creada con 3 o 4 tablas, como si fuera un Access.
-
Aun así (con mi codigo) no importa si hay caracteres especiales que no se vean en DOS, porque lo lee el motor SQL directamente, solo tiene que ser compatible con el motor y listo :P
-
Hola Yacosta
Firebird ummmm creo que usas la version 2.1
aver chekea este script para Firebird 2.1
http://www.4shared.com/rar/LSANQi61/SQL.html
(http://www.4shared.com/rar/LSANQi61/SQL.html)
contraseña para acceder es: 123456
recomendable no ejecutar en el escritorio :D copialo a una raiz mas pequeña en cualquier disco de tu pc
Gracias
-
Hola Cristian.
No se genera la BD y el proyecto se queda colgado, He ejecutado separadamente el exe que llama el proyecto y este genera un error (can't format message) , hubiera sido bueno tener el código de EJE.exe.
Probare con el script que crea la BD a ver como me funca.
Gracias-.
-
Hola YAcosta
creo que se me fue especificar que el EJE.exe es el mismo que EJE.bat solo que esta compilado en EXE
ahora con respecto al error que te muestra cuando ejecutas el EJE.exe
dime que sistema operativo lo estas ejecutando?
el bat hace este llamamiento:
(PATH C:\Archivos de programa\Firebird\Firebird_2_1\bin)
ruta donde se encuentra isql.exe para hacer ejecutado en la linea de comandos.
(isql -u SYSDBA -p masterkey -b -i script.sql) quizás fíjate si estas usando el mismo usuario y contraseña del firebird.
Si no modifica la ruta de la creación de la base de datos en el script.sql dale una ruta de cualquier unidad menos la C por ejemplo CREATE DATABASE 'D:\Cristian.fdb' también la ruta en el proyecto de vb,
si lo vas ah ejecutar desde vb activar Call LlamarExe(App.Path & "\EJE.BAT", 0) y el que sigue lo comentas.
si te sigue saliendo el mismo error
agregame al messenger para guiarte mucho mejor con una asistencia remota mi msn es cristian_19a@hotmail.com
ami me funciona perfectamente
Gracias
-
Hola Cristian
Cierto, debí deducir por el nombre que era el mismo código que el bat y el error de hecho que ha sido porque lo ejecuté en Seven y la ruta del isql es otra, ese fue el error que cometí.
Ya me están llamando por aquí así que mañana lo pruebo en mi virtual XP y te comento como resulto.
Muchas gracias por tu paciencia.
Un abrazo.
-
Ok YAcosta chvr si estas en seven solo tienes que cambiar la ruta del isql del path en el bat ó (copiar el ejecutable isql.exe y fbclient.dll en la misma carpeta donde se encuentra el bat claro y borrar la linea del path)
y cambiar la ruta de la creación de la base de datos en una unidad diferente ala C por temas de restricciones de seven y cambiar la ruta de llamamiento de la base de datos en el vb
Gracias