Dudas Scripts en Mysql

Tus preguntas. Algoritmos o Grupos de Comandos formando Programas Escripts.
Responder
learvit
Mensajes: 8
Registrado: 19 Feb 2010, 18:09

Re: dudas sobre en el scrip

Mensaje por learvit »

Oie amigo, sabras como agregar este script para ejecutarte en una base de datos SQL en AUTOIT

Logicamente el SQL se ejecuta remoto con los datos siguientes (ejemplo
IP: 10.15.20.30
Dbuser: sa
DbPass: loqueasea
Db: selec_one

tengo instalado en los equipos el cliente de conectividad de SQL

CONSULTA SQL QUE SE DESEA AGREGAR AL AUTOIT

update gen_clientes
set credito='S'
where id_cliente=111



tengo el siguiente autoit

#include <GUIConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 506, 169, 193, 125)
$Input1 = GUICtrlCreateInput("Input1", 168, 48, 233, 21)
$No = GUICtrlCreateLabel("No. de Cliente", 88, 48, 71, 25)
$Button1 = GUICtrlCreateButton("Liberar", 152, 104, 75, 25, 0)
$Button2 = GUICtrlCreateButton("Suspender", 240, 104, 75, 25, 0)
$Button3 = GUICtrlCreateButton("Salir", 328, 104, 75, 25, 0)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit

Case $Input1
EndSwitch
WEnd


COMO METO LA CONSULTA SQL AL AUTOIT??? PUEDES APOYARME?

SALUDOS Y GRACIAS
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: dudas sobre en el scrip

Mensaje por Chefito »

Mmmm.....eso en mi tierra no es hacer nada de código. Simplemente has cogido el código generado por el Koda y ya está :smt011 .
Muy mal muy mal. Hay que esforzarse algo hombre :smt024 .
Yo no he tocado bbdd en autoit, pero viendo el código facilmente puedes sacar como abrir una bbdd y mandar una consulta.
Supongo que sería algo así:

Código: Seleccionar todo

Local $sqlCon = ObjCreate("ADODB.Connection")
$sqlCon.Open("Driver={SQL Server};Server=10.15.20.30;Database=selec_once;Uid=sa;Pwd=loquesea;")
Local $rs = ObjCreate("ADODB.Recordset")
$rs=$sqlCon.Execute("aquí iría la consulta sql") 
Puede que no funcione ya que como he dicho antes no he programado en autoit nada de bbdd, y además no lo he probado.

Mira también estos enlaces donde hay unas udfs para el mysql:

http://www.autoitscript.com/forum/index ... 20814&st=0

http://www.autoitscript.com/forum/index ... 85617&st=0

Y la proxima vez intenta hacer algo más :smt016 .

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2085
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: dudas sobre en el scrip

Mensaje por BasicOs »

Chefito escribió: Mira también estos enlaces donde hay unas udfs para el mysql:http://www.autoitscript.com/forum/index ... 20814&st=0
  1. El mysql es lo mejor para guardar datos, puedes ejecutar MYSQL en local gratis para hacer pruebas si instalas el XXAMP aqui: http://www.apachefriends.org/en/xampp-windows.html y lo dejas en segundo plano funcionando,
  2. Para configurar la base de datos y prepararla para AUTOIT, puedes acceder a la base de datos para diseñarla con esta herramienta visual aqui: http://www.mysql.com/products/workbench/ (también lo puedes hacer con los comandos MYSQL desde AUTOIT directamente )
    Imagen
  3. Y si deseas además de usar un programa en autoit, también tener un panel resumen remoto y personalizado de la base de datos que usas que puedas usar desde el movil o desde otro PC en internet lo puedes hacer como .html o .php con PHP http://docs.php.net/manual/es/intro-whatis.php
Todo es gratuito GPL etc..

Del enlace que te dió CHEFITO tienes esto:
#1 Inicia una conexión, haz un SELECT, escribe el valor que devuelve la consulta de los nombres (user_name) de los registros que tienen user="RODRIGUEZ" a un fichero de texto a 'C:\test.txt' (en este caso los nombres de pila "user_name", entonces finaliza la conexión

Código: Seleccionar todo

$sql = _MySQLConnect("sa","sa","mydb","mywebsite.com")
$var = _Query($sql,"SELECT * FROM mytable WHERE user = 'RODRIGUEZ'")
With $var
While NOT .EOF
FileWriteLine("c:\test.txt",.Fields("user_name").value & @CRLF)
.MoveNext
WEnd
EndWith
_MySQLEnd($sql)
El mismo ejemplo pero que devuelve la consulta de la lista de las ciudades de MEXICO, es decir da los (nombre_ciudad) de los registros que tienen [pais="MEXICO" ] junto con el número de habitantes
$var = _Query($sql,"SELECT * FROM mytable WHERE pais = 'MEXICO'")
With $var
While NOT .EOF
FileWriteLine("c:\test.txt",.Fields("nombre_ciudad").value & " tiene " &.Fields("total_habitantes").value & " habitantes" & @CRLF)
#2 Inicia una conexión, añadir un registro, borrar un registro, finalizar al conexión a la base de datos

Código: Seleccionar todo

dim $values[5]
$values[0] = "col1"
$values[1] = "col2"
$values[2] = "col3"
$values[3] = "col4"
$values[4] = "";make sure u have one extra blank element

$sql = _MySQLConnect("sa","sa","mydb","mywebsite.com")
_AddRecord($sql, 'mytable', $values, $values) 
;this executes a query ("INSERT INTO mytable (col1, col2, col3, col4) VALUE (col1, col2, col3, col4)
;which adds a record where col1, col2, col3, and col4 have the value "col1", "col2" etc
_DeleteRecord($sql, "mytable", "username", "user")
;that executes a MySQL query ("DELETE FROM mytable WHERE username = 'user';)
_MySQLEnd($sql)
"sa","sa","mydb","mywebsite.com" es "usuario" "contraseña" "nombre de la base de datos" "mi dirección local o remota donde está el servidor" , si es local sería 127.0.0.1
Salu2:)
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Dudas Scripts en Mysql

Mensaje por Chefito »

Jejejeje...muy interesante BasicOs. Algún día me voy a tener que volver a meter con base de datos :smt001 .
Lo que pasa es que acabé hasta la gorra ya que hubo una época en que la moda era hacer programas con base de datos, y se hicieron muchos :smt024 .
Yo en vb hice muchos, con dao y con ado (incluso algo de rdo), pero casi todo con access ya que atacaba siempre en modo local (monopuesto).
Recuerdo que una vez, hace muuuchoooo tiempo me instalé el mysql para saber como se podía atacar esa base de datos (y porque la gente decía que era una muy buena base de datos y encima gratuíta). Lo que pasa que no me interesó mucho porque como ya he dicho trabajaba en modo local, y esta base de datos es para trabajar en modo remoto.
Recuerdo que en aquella época utilizaba un programa llamado mysql control center (la cual no estaba mal) o algo así para gestionar la base de datos, pero he visto la imagen del interface mysql workbench y parece muy chulo. No se si existiría cuando yo la instalé. Puede que no :smt003 .
Lo dicho, algún día habrá que probar a trabajar con mysql y autoit aunque solo sea en modo local :smt003 .

Saludos y gracias por la explicación.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
learvit
Mensajes: 8
Registrado: 19 Feb 2010, 18:09

Re: dudas sobre en el scrip

Mensaje por learvit »

Chefito escribió:Mmmm.....eso en mi tierra no es hacer nada de código. Simplemente has cogido el código generado por el Koda y ya está :smt011 .
Muy mal muy mal. Hay que esforzarse algo hombre :smt024 .
Yo no he tocado bbdd en autoit, pero viendo el código facilmente puedes sacar como abrir una bbdd y mandar una consulta.
Supongo que sería algo así:

Código: Seleccionar todo

Local $sqlCon = ObjCreate("ADODB.Connection")
$sqlCon.Open("Driver={SQL Server};Server=10.15.20.30;Database=selec_once;Uid=sa;Pwd=loquesea;")
Local $rs = ObjCreate("ADODB.Recordset")
$rs=$sqlCon.Execute("aquí iría la consulta sql") 
Puede que no funcione ya que como he dicho antes no he programado en autoit nada de bbdd, y además no lo he probado.

Mira también estos enlaces donde hay unas udfs para el mysql:

http://www.autoitscript.com/forum/index ... 20814&st=0

http://www.autoitscript.com/forum/index ... 85617&st=0

Y la proxima vez intenta hacer algo más :smt016 .

Saludos.
No pues si solo agrege el codigo del Koda para que se dieran una idea de la ventana que estoy tratando de echar a andar, sinceramente no tengo nada de experiencia con el autoIT lo unico que eh podido generar son instaladores desatendidos :smt043 pero nadamas, de ahi en fuera no se ni papa de como poder agregar ese query al autoit me gustaria mucho me pudieran ayudar yo soy administrador de una base de datos en SQL server 2003 y por ese query tan simple y sencillo aveces ni vida tengo fuera de mi trabajo por que me requeiren aqui para ejecutarlo. Por eso les pido me si les es posible me apoyen a generar esa simple ventanita y que ejecute el query, se los agradecere eternamente
learvit
Mensajes: 8
Registrado: 19 Feb 2010, 18:09

Re: Dudas Scripts en Mysql

Mensaje por learvit »

Buenas noches, hoy logre hacer un poco mas con algo de investigacion y dandole vueltas a lo mismo hasta que logre hacer conectar el AutoIT con el SQL

tengo el siguiente codigo...

Código: Seleccionar todo

#include <_SQL.au3>
#include <array.au3>

Opt ("trayIconDebug",1)

Msgbox(0,"","Start the Script and load the error handler")
     _SQL_RegisterErrorHandler();register the error handler to prevent hard crash on COM error

    $oADODB = _SQL_Startup()
    If $oADODB = $SQL_ERROR then Msgbox(0 + 16 +262144,"Error",_SQL_GetErrMsg())


    If _SQL_Connect(-1,"10.40.50.00","test","sa","pass") = $SQL_ERROR then 
        Msgbox(0 + 16 +262144,"Error",_SQL_GetErrMsg())
        _SQL_Close()
       
    EndIf



Msgbox(0,"","And now the same data returned as a string")

    Local $vString
	If _SQL_GetTableAsString(-1,"INSERT INTO BBKS (ID,ComputerName,Status,Error) Where ID='6' VALUES ('','','Online','');",$vString) = $SQL_OK then    
        Msgbox(0,"Data as a String",$vString)
		_SQL_Close()
    Else
        Msgbox(0 + 16 +262144,"SQL Error",_SQL_GetErrMsg() )
		_SQL_Close()
    EndIf


Ahora, quiero insertar este query...

Código: Seleccionar todo

update bbks
set Status='Offline'
where id=111
pero ya le hice de muchas formas y no logro que cambie el estatus de una tabla que ya tiene un estatus previo.

alguna sugerencia???
saludos
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2085
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: Dudas Scripts en Mysql

Mensaje por BasicOs »

¿Algo así? En el mismo editor Mysql como mysql front y en los otros te hacen solo el comando mysql, o con la ayuda.
Así sin la ayuda puede ser algo así como update bbks set bbks.status='Offline' where id='111',
$sql = _MySQLConnect("sa","sa","mydb","mywebsite.com")
$var = _Query($sql,"update bbks set bbks.status='Offline' where id='111'")
With $var
While NOT .EOF
FileWriteLine("c:\test.txt",.Fields("status").value & @CRLF) ;vuelca a un fichero de texto los offline
.MoveNext
WEnd
EndWith
_MySQLEnd($sql)
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Dudas Scripts en Mysql

Mensaje por Chefito »

Prueba después de conectar a poner esto:

Código: Seleccionar todo

_SQL_Execute($oADODB,"update bbks set Status='Offline' where id=111")
Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
learvit
Mensajes: 8
Registrado: 19 Feb 2010, 18:09

Re: Dudas Scripts en Mysql

Mensaje por learvit »

Chefito escribió:Prueba después de conectar a poner esto:

Código: Seleccionar todo

_SQL_Execute($oADODB,"update bbks set Status='Offline' where id=111")
Saludos.

Excelente, gracias a tu info ya e avanzado bastante en mi progamita, una pregunta mas,, como puedo hacer una consulta SQL y que me arroje solo el query, es que tengo esto..

Código: Seleccionar todo

Local $vString
			$Noclienteinput = GUICtrlRead($Input1)
			If _SQL_GetTableAsString(-1,"SELECT computername,Status FROM BBKS WHERE ID="& $Noclienteinput &";",$vString) = $SQL_ERROR then Msgbox(0 + 16 +262144,"Error",_SQL_GetErrMsg()) = $SQL_OK then 
				_SQL_Close()
        MsgBox(0 + 262144 + 64, "Estatus de un Cliente", "S=Vigente, P=Suspendido "& $vString &"")
Local $vString = ("")

EndIf
Pero me arroja en nombre de la tabla y resultado del query... Y me gustaria solo extraer el Query o bien hacer el resultado del query una variable para que

S=Vigente
P=Suspendido

Por que ese Query me arroja una S o una P entonces quisiera poder tomar esa S y si es S que muestre la palabra ¡VIGENTE!

GRacias por su apoyo y saludos
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2085
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: Dudas Scripts en Mysql

Mensaje por BasicOs »

Puedes introducir donde está el campo con ese dato _iif(), y reemplaza en el string en linea el dato que dices, es un ejemplo de su uso

Código: Seleccionar todo

#include <Misc.au3>

Dim $i_Count, $i_Index
$dato="S" ; aqui se recuperaría el dato desde la base de datos o abajo directamente...
For $i_Index = 1 To 2
   MsgBox(4096, "Count", "Aqui van más datos " & String($i_Index) & _
          " Esta esta ley está " & _Iif($dato="S", "Vigente", _Iif($dato="P", "Suspendido", "otro dato")) & " aqui")
Next

Exit
Salu2:)
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2085
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: Dudas Scripts en Mysql

Mensaje por BasicOs »

Aquí va una facilidad más para incluir la base de datos mysql con el ejecutable del Script (por ejemplo con fileinstall()).
Esta es la base de datos mysql incluida en 127.0.0.1 con el xampp portable, esto sería como localhost. Solo hay que añadirle user y pass al mysql en el xampp (VIA navegador), y claro también hay que crear o copiar la base de datos con sus campos. :smt023 . http://portableapps.com/apps/development/xampp
Salu2:)
Añado este enlace a un post también con info de Mysql que está en otro lugar: http://www.emesn.com/autoitforum/viewto ... ysql#p7273
learvit
Mensajes: 8
Registrado: 19 Feb 2010, 18:09

Re: Dudas Scripts en Mysql

Mensaje por learvit »

Hola, muchas gracias por sus valiosas opiniones, me han sido de mucha ayuda y he avanzado mucho en mi proyecto, la verdad el autoit esta GENIAL.. tengo otra consulta a los expertos..


Hago esta busqueda SQL

Código: Seleccionar todo

Local $vString
         $Noclienteinput = GUICtrlRead($Input1)
         If _SQL_GetTableAsString(-1,"SELECT computername,Status FROM BBKS WHERE ID="& $Noclienteinput &";",$vString) = $SQL_ERROR then Msgbox(0 + 16 +262144,"Error",_SQL_GetErrMsg()) = $SQL_OK then
            _SQL_Close()
        MsgBox(0 + 262144 + 64, "Resultados", & $vString &)
Local $vString = ("")

EndIf
Pero no logro sacar unicamente el dato de la tabla :smt009 saco el dato de tabla y ADEMAS tambien obtengo el nombre de las tablas que lo contienen Ejemplo:

ComputerName | status
Computer1 | S

como hago el query para obtener unicamente el dato de la tabla, sin necesidad de que me arroje los nombres de las tablas????
que solo me arroje el resultado.. Ejemplo?

Computer1 | S

gracias y saludos!!!! :smt023
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2085
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: Dudas Scripts en Mysql

Mensaje por BasicOs »

Es por el comando que estas usando _SQL_GetTableAsString, puedes "limpiar" el string con un stringsplit() cogiendo como separador el último campo (no se llama tablas sino "nombres de campos")... te puede ser util repasar una "introducción a campos y bases de datos".
Alternativamente puedes usar otros comandos como _query() y más que se exponen más arriba, u otras UDF en que ya te venga solo del dato que quieres,
Salu2:) :smt030
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2085
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: Dudas Scripts en Mysql

Mensaje por BasicOs »

MySQL_Real vs MysqlOdbc
De este enlace un pequeño script que muestra como usar mysql sin instalar el ODBC, usando solo una dll.
Creditos a ProgAndy http://www.autoit.de/index.php?page=Thr ... eadID=3435
También otro mirror del enlace en http://www.autoitscript.com/forum/index ... 85617&st=0

Código: Seleccionar todo

cs ----------------------------------------------------------------------------
    
    AutoIt Version: 3.2.8.1 (beta)
    Author:         Prog@ndy
    
    Script Function:
    MySQL-Plugin Demo Script
    
#ce ----------------------------------------------------------------------------

#include <array.au3>
#include "mysql.au3"

; arrancar MYSQL dll en el path, contenido tambien en @ScriptDir. En otro caso hay que escribir la ruta de la DLL. DLL se tiene que llamar libmysql.dll.
_MySQL_StartUp()
If @error Then Exit MsgBox(0, '', "")
MsgBox(0, "DLL Version:",_MySQL_Get_Client_Version()&@CRLF& _MySQL_Get_Client_Info())

$MysqlConn = _MySQL_Init()

;Demo de Fallo:
MsgBox(0,"Fallo-Demo","Fallo-Demo")
$connected = _MySQL_Real_Connect($MysqlConn,"localhostdfdf","droot","","cdcol")
If $connected = 0 Then
    $errno = _MySQL_errno($MysqlConn)
    MsgBox(0,"Error:",$errno & @LF & _MySQL_error($MysqlConn))
    If $errno = $CR_UNKNOWN_HOST Then MsgBox(0,"Error:","$CR_UNKNOWN_HOST" & @LF & $CR_UNKNOWN_HOST)
Endif

; XAMPP cdcol
MsgBox(0, "XAMPP-Cdcol-demo", "XAMPP-Cdcol-demo")

$connected = _MySQL_Real_Connect($MysqlConn, "localhost", "root", "", "cdcol")
If $connected = 0 Then Exit MsgBox(16, 'Connection Error', _MySQL_Error($MysqlConn))

$query = "SELECT * FROM cds"
_MySQL_Real_Query($MysqlConn, $query)


$res = _MySQL_Store_Result($MysqlConn)

$fields = _MySQL_Num_Fields($res)

$rows = _MySQL_Num_Rows($res)
MsgBox(0, "", $rows & "-" & $fields)

; Acceso
MsgBox(0, '', "Methodo 1- Manual")
Dim $array[$rows][$fields]
For $k = 1 To $rows
    $rowPtr = _MySQL_Fetch_Row($res)
    $mysqlrow = _MySQL_Create_RowStruct($rowPtr, $fields)

    $lengths = _MySQL_Fetch_Lengths($res)
    $lenthsStruct = _MySQL_Create_LengthsStruct($lengths, $res)

    For $i = 1 To $fields
        $length = DllStructGetData($lenthsStruct, 1, $i)
        $fieldPtr = DllStructGetData($mysqlrow, 1, $i)
        $data = DllStructGetData(DllStructCreate("char[" & $length & "]", $fieldPtr), 1)
        $array[$k - 1][$i - 1] = $data
    Next
Next
_ArrayDisplay($array)

; Acceso 2
MsgBox(0, '', "Methodo 2 - registro a registro (linea a linea)")
_MySQL_Data_Seek($res, 0) ;para volver a empezar de cero
Do
$row1 = _MySQL_Fetch_Row_StringArray($res)
If @error Then ExitLoop
_ArrayDisplay($row1)
Until @error

MsgBox(0, '', "Methodo 3 - Todo en un 2D Array")
$array = _MySQL_Fetch_Result_StringArray($res)
_ArrayDisplay($array)

; Campos - informaciones
MsgBox(0, '', "Acceso a  informaciones de campo")
Dim $arFields[$fields][3]
For $i = 0 To $fields - 1
    $field = _MySQL_Fetch_Field_Direct($res, $i)
    $arFields[$i][0] = _MySQL_Field_ReadValue($field, "name")
    $arFields[$i][1] = _MySQL_Field_ReadValue($field, "table")
    $arFields[$i][2] = _MySQL_Field_ReadValue($field, "db")
Next
_ArrayDisplay($arFields)

; Consulta liberada
_MySQL_Free_Result($res)

; Cerrar la conexión
_MySQL_Close($MysqlConn)
; MYSQL beenden
_MySQL_ShutDown()
Adjuntos
mysql.zip
Mysql dll y ejemplos
(1.57 MiB) Descargado 313 veces
Responder