B4A en español - Juan Antonio Villalpando
(BASIC4Android)
-- Tutorial de B4A --
Volver al índice del tutorial
____________________________
108.- Conectar con MySQL.
Se trata de comunicarnos con una base de datos remota MySQL.
Disponemos de la siguente pantalla.
Además agregamos la librería WebViewExtras en una versión mayor o igual a la 1.30.
Creamos es código...
Código B4A |
Sub Process_Globals
// Juan Antonio Villalpando
// juana1991@yahoo.com
// http://kio4.com
End Sub
Sub Globals
Dim Label1, Label2 As Label
Dim EditText1, EditText2, EditText3 As EditText
Dim WebView1 As WebView
Dim WebViewExtras1 As WebViewExtras
Dim orden As String
Dim Nombre, Edad, Ciudad, Nombre2 As String
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("Layout1")
WebViewExtras1.addJavascriptInterface(WebView1, "B4A")
WebViewExtras1.addWebChromeClient(WebView1, "")
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub btnEnviar_Click
Nombre = EditText1.Text
Edad = EditText2.Text
Ciudad = EditText3.Text
orden= "INSERT INTO personas (Nombre, Edad, Ciudad) VALUES ('" & Nombre & "','" & Edad & "','" & Ciudad & "')"
orden= orden.Replace (" ","%20")
WebView1.LoadUrl("http://kio4.com/appinventor/php/basedatosmysql.php?orden=" & orden)
End Sub
Sub btnBorrarNombre_Click
Nombre = EditText1.Text
orden= "DELETE FROM personas WHERE Nombre='" & Nombre & "'"
orden= orden.Replace (" ","%20")
WebView1.LoadUrl("http://kio4.com/appinventor/php/basedatosmysql.php?orden=" & orden)
End Sub
Sub btnActualiza_Click
Nombre = EditText1.Text
Nombre2 = EditText2.Text
orden= "UPDATE personas SET Nombre='" & Nombre & "' WHERE Nombre='" & Nombre2 & "'"
orden= orden.Replace (" ","%20")
WebView1.LoadUrl("http://kio4.com/appinventor/php/basedatosmysql.php?orden=" & orden)
End Sub
Sub btnVertabla_Click
orden= "SELECT * FROM personas ORDER BY Nombre"
orden= orden.Replace (" ","%20")
WebView1.LoadUrl("http://kio4.com/appinventor/php/basedatosmysql.php?orden=" & orden)
End Sub
Sub WebView1_PageFinished (Url As String)
Dim Javascript As String
Javascript="B4A.CallSub('Process_HTML', false, document.documentElement.outerHTML)"
Log("PageFinished: "&Javascript)
WebViewExtras1.executeJavascript(WebView1, Javascript)
Log("FIN")
End Sub
Sub Process_HTML(Html As String)
Label1.text = Html
End Sub
|
Queremos INSERTAR EN la tabla personas los Valores de Nombre, Edad y Ciudad
orden= "INSERT INTO personas (Nombre, Edad, Ciudad) VALUES ('" & Nombre & "','" & Edad & "','" & Ciudad & "')"
Cuidado con las comillas 'simple' y las comillas "dobles"
Cambiamos los espacios por su código %20
orden= orden.Replace (" ","%20")
ya se podríamos tener problemas al enviar la orden con espacios.
Ejecutamos la orden enviándola a la web.
WebView1.LoadUrl("http://kio4.com/appinventor/php/basedatosmysql.php?orden=" & orden)
_________________
- Archivo PHP.
En nuestro servidor web necesitaremos un archivo PHP, concretamente: basedatosmysql.php, que tome el valor de la orden y la ejecute para insertar los valores en la tabla persona.
Como bien digo, este archivo debe estar en nuestro servidor web, en mi caso: http://kio4.com/appinventor/php/basedatosmysql.php
Si lo estás haciendo con WAMP http://localhost/basedatosmysql.php
basedatosmysql.php (Copiar este archivo en C:\wamp\www)
|
<?php
// Juan Antonio Villalpando
// juana1991@yahoo.com
// http://kio4.com
$databasehost = "localhost";
$databasename = "ciudadanos";
$databaseusername ="root";
$databasepassword = "1234";
$con = mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error());
mysql_set_charset("utf8");
mysql_select_db($databasename) or die(mysql_error());
$llegan=$_GET;
$peticion=$llegan['orden'];
// echo $peticion;
$hacer = mysql_query($peticion);
///////////////////////////////////////////////////////////////////////////////
// En los casos que hay SELECT y se debe enviar una respuesta actúa este código
if (substr($peticion, 0, 6) == 'SELECT') {
$resultado = mysql_query("SHOW COLUMNS FROM personas");
$numerodefilas = mysql_num_rows($resultado);
if ($numerodefilas > 0) {
while ($rowr = mysql_fetch_row($hacer)) {
for ($j=0;$j<$numerodefilas;$j++) {
$en_csv .= $rowr[$j].", ";
}
$en_csv .= "\n";
}
}
print $en_csv;
}
///////////////////////////////////////////////////////////////////////////////
?>
|
Fijate que el nombre y contraseña son los que le pusistes a la base de datos.
Conectamos con la base de datos:
$con = mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error());
Tomamos GET la información que nos llega:
$llegan=$_GET;
Tomamos la orden que nos ha llegado
$peticion=$llegan['orden'];
$peticion=INSERT INTO personas (Nombre, Edad, Ciudad) VALUES('Juan','22','Puerto Real')
Hacemos, ejecutamos esa petición
$hacer = mysql_query($peticion);
Ya está, esa orden INSERTARÁ EN la tabla personas los VALORES indicados.
Podemos comprobarlo entrando en nuestra base de datos mediante http://localhost/phpmyadmin
________________________________________________________________________________
En las órdenes de INSERTAR, BORRAR, ACTUALIZAR no necesitamos que nos devuelva valores,
pero en las órdenes de Vertabla y BuscarNombre, nos deberá devolver los datos de toda la tabla o del Nombre requerido.
Tanto una como otra necesitan de la orden SELECT, así que en el archivo PHP cuando llegue petición con la palabra SELECT, realizará esta parte del código...
|
///////////////////////////////////////////////////////////////////////////////
// En los casos que hay SELECT y se debe enviar una respuesta actúa este código
if (substr($peticion, 0, 6) == 'SELECT') {
$resultado = mysql_query("SHOW COLUMNS FROM personas");
$numerodefilas = mysql_num_rows($resultado);
if ($numerodefilas > 0) {
while ($rowr = mysql_fetch_row($hacer)) {
for ($j=0;$j<$numerodefilas;$j++) {
$en_csv .= $rowr[$j].", ";
}
$en_csv .= "\n";
}
}
print $en_csv;
}
///////////////////////////////////////////////////////////////////////////////
|
Lo que hace es comprobar si la orden de llegada comienza por la palabra SELECT
if (substr($peticion, 0, 6) == 'SELECT') {
Si es así, realiza el código siguiente, pone los datos obtenido en formato CSV, todo eso es poner coma, cambio de línea... no es necesario entender esta parte del código.
Lo cierto que al final tendremos la variable $en_csv que tendrá la información que queremos en formato CSV
Eso se envía a nuestra aplicación mediante print
Y esto saldrá en la WebView.
Queremos que la información que sale en la WebView también la podamos obtener en una variable o directamente en la Etiqueta Label1, para ello necesitamos utilizar WebViewExtras y esta parte del código...
WebViewExtras1.addJavascriptInterface(WebView1, "B4A")
WebViewExtras1.addWebChromeClient(WebView1, "")
Sub WebView1_PageFinished (Url As String)
Dim Javascript As String
Javascript="B4A.CallSub('Process_HTML', false, document.documentElement.outerHTML)"
Log("PageFinished: "&Javascript)
WebViewExtras1.executeJavascript(WebView1, Javascript)
Log("FIN")
End Sub
Sub Process_HTML(Html As String)
Label1.text = Html
End Sub
________________________________
|