Autor Tema: Ejecutar script  (Leído 9166 veces)

0 Usuarios y 1 Visitante están viendo este tema.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Ejecutar script
« 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
Me encuentras en YAcosta.com

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:Ejecutar script
« Respuesta #1 en: Mayo 04, 2012, 02:33:14 pm »
Yo lo hago con un BAT asi:

Código: (PHP) [Seleccionar]
@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
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

cristian_19a

  • Kilobyte
  • **
  • Mensajes: 80
  • Reputación: +28/-3
    • Ver Perfil
Re:Ejecutar script
« Respuesta #2 en: Mayo 04, 2012, 02:54:17 pm »
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:
Código: (VB) [Seleccionar]
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:
Código: (PHP) [Seleccionar]
@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
« última modificación: Mayo 04, 2012, 02:58:10 pm por cristian_19a »

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Ejecutar script
« Respuesta #3 en: Mayo 04, 2012, 03:22:47 pm »
Gracias compañeros, buenas ideas.

Saludos
Me encuentras en YAcosta.com

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Ejecutar script
« Respuesta #4 en: Mayo 04, 2012, 03:37:18 pm »
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

Código: (vb) [Seleccionar]
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
Código: (vb) [Seleccionar]
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

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Ejecutar script
« Respuesta #5 en: Mayo 05, 2012, 12:02:22 am »
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.
Me encuentras en YAcosta.com

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Ejecutar script
« Respuesta #6 en: Mayo 05, 2012, 02:05:33 pm »
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

Código: [Seleccionar]
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)

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Ejecutar script
« Respuesta #7 en: Mayo 05, 2012, 03:13:55 pm »
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.
Me encuentras en YAcosta.com

cristian_19a

  • Kilobyte
  • **
  • Mensajes: 80
  • Reputación: +28/-3
    • Ver Perfil
Re:Ejecutar script
« Respuesta #8 en: Mayo 05, 2012, 04:33:59 pm »
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

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Ejecutar script
« Respuesta #9 en: Mayo 05, 2012, 07:19:29 pm »
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.
Me encuentras en YAcosta.com

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Ejecutar script
« Respuesta #10 en: Mayo 05, 2012, 07:49:08 pm »
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

cristian_19a

  • Kilobyte
  • **
  • Mensajes: 80
  • Reputación: +28/-3
    • Ver Perfil
Re:Ejecutar script
« Respuesta #11 en: Mayo 06, 2012, 05:24:15 am »
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

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

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Ejecutar script
« Respuesta #12 en: Mayo 06, 2012, 11:58:42 pm »
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-.
Me encuentras en YAcosta.com

cristian_19a

  • Kilobyte
  • **
  • Mensajes: 80
  • Reputación: +28/-3
    • Ver Perfil
Re:Ejecutar script
« Respuesta #13 en: Mayo 07, 2012, 02:24:15 am »
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
« última modificación: Mayo 07, 2012, 02:41:58 am por cristian_19a »

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Ejecutar script
« Respuesta #14 en: Mayo 07, 2012, 02:54:45 am »
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.
Me encuentras en YAcosta.com