Italian Connessione MySql ... Help

marco.canta

Active Member
Licensed User
Longtime User
Ciao, ho bisogno del vostro aiuto ...

Sto cercando di realizzare un'applicazione che mi visualizza i dati che sono all'interno di un database Mysql presente su un server remoto.

Ho letto, o meglio ho provato a leggere e capire il tutorial in Inglese, ma non mi è stato di aiuto, o meglio non ho capito la parte PHP. Da quel poco che sono riuscito a capire dovrebbe fare da anello di congiunzione .... giusto ?

Chi mi puo' aiutare ? .... come e dove va inserita la parte PHP ?

Grazie
Marco
 

ivanomonti

Well-Known Member
Licensed User
Longtime User
Ciao, ho bisogno del vostro aiuto ...

Sto cercando di realizzare un'applicazione che mi visualizza i dati che sono all'interno di un database Mysql presente su un server remoto.

Ho letto, o meglio ho provato a leggere e capire il tutorial in Inglese, ma non mi è stato di aiuto, o meglio non ho capito la parte PHP. Da quel poco che sono riuscito a capire dovrebbe fare da anello di congiunzione .... giusto ?

Chi mi puo' aiutare ? .... come e dove va inserita la parte PHP ?

Grazie
Marco

Ciao marco, io in questi giorni sto cominciando a mettere giù una base mysql, ovviamente le strade sono 2

1) accesso diretto
2) creare una sorta di webservice, in parole povere una pagina php che accede al database e ti consegna i dati in 3 soluzioni, stringa, json, xml, puoi usare molti esempi che trovi sul web e poi usare in B4A un socket http per inviare richiesta e ricevere i dati (qui non sono pronto).

io credo che entro in questo argomento in settimana, ma apro un post del progetto MIMM Sos.
 

giannimaione

Well-Known Member
Licensed User
Longtime User
ciao Marco,

sul forum avevo gia pubblicato qualcosa del genere:
B4X:
'Activity module
Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Dim hc As HttpClient
End Sub

Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.

End Sub

Sub Activity_Create(FirstTime As Boolean)
    hc.Initialize("hc")
    Dim req As HttpRequest
    Dim web As String
    Dim query As String
'il database , login e password sono dichiarati in demo.php
'address è una tabella, mentre firstname e lastname sono due campi
    query="select firstname , lastname from address"
    'query="insert into address (firstname , lastname) values ('aa','bbb')"

    web="http://giannimaione.altervista.org/demo.php"
    req.InitializePost2(web, query.GetBytes("UTF8"))
    hc.Execute(req, 1)
    'hc.Execute(req,2)
End Sub
Sub hc_ResponseError (Response As HttpResponse, Reason As String, StatusCode As Int, TaskId As Int)
    Msgbox("errore","")
End Sub
Sub hc_ResponseSuccess (Response As HttpResponse, TaskId As Int)
If TaskId=1 Then
    Dim res As String
    res = Response.GetString("UTF8")
    Dim parser As JSONParser
    parser.Initialize(res)

    Dim countries As List
    countries = parser.NextArray 'returns a list with maps
    For i = 0 To countries.Size - 1
        Dim t1,t2 As String
        t1 = m.Get("lastname")
        t2=m.Get("firstname")
        Msgbox(t1,t2)
    Next
    Response.Release
End If
    ExitApplication
End Sub
Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub
il PHP (demo.php) è quello suggerito da Erel

se hai difficoltà, chiedi pure
 

marco.canta

Active Member
Licensed User
Longtime User
In Visual Basic e Real Basic ho sempre fatto accessi diretti all'host contenete il file MySql ...
Un acesso diretto anche con adroid sarebbe fantastico .... ma non ho idea di come trutturare il programma .

Da quel poco cheho capito il file PHP andrebbe caricato su di un dominio di appoggio, anche che non sial quello che contiene il file mysql ... giusto ?

Grazie
Marco
 

ivanomonti

Well-Known Member
Licensed User
Longtime User
In Visual Basic e Real Basic ho sempre fatto accessi diretti all'host contenete il file MySql ...
Un acesso diretto anche con adroid sarebbe fantastico .... ma non ho idea di come trutturare il programma .

Da quel poco cheho capito il file PHP andrebbe caricato su di un dominio di appoggio, anche che non sial quello che contiene il file mysql ... giusto ?

Grazie
Marco

Non proprio, dipende dal server che per motivi di sicurezza di solito non fanno fare query da server diversi dal localhost.

Ma se ti fa piacere io ho incominciato a fare un app desktop con RealStudio e mysql e devo incominciare a interfacciare la mia app (MIMM Sos), io l'accesso lo farò diretto senza intermedi, possiamo lavorarci insieme, sempre se ti gusta la cosa.

Io ho un server register e ho la possibilità di fare connessioni mysql dirette.

Ciao, mia nik su skype ivanomonti, questo invito vale per tutti coloro che vogliono sperimentare questa cosa.
 

ivanomonti

Well-Known Member
Licensed User
Longtime User
Allora ho creato 2 app per fare la connessione, una usa solo la libreria MYSQL un altra usa la libreria ado, ma come vuole il buon dio, ogni tanto mi sfasa il cervello.

Java

B4X:
Sub Process_Globals

End Sub

Sub Globals
   ' http://www.basic4ppc.com/forum/additional-libraries-classes-official-updates/22291-mysql-library-jdbc.html#post129399
   Dim Button1 As Button
   Dim ListView1 As ListView
End Sub

Sub Activity_Create(FirstTime As Boolean)
   Activity.LoadLayout("Main")
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub Button1_Click
   Dim db As MYSQL
    Dim L As List
   db.setDatabase("server","schema","user","password")
   L = db.Query("Select * from t_000_schede")
    If L.IsInitialized=False Then
        Msgbox("Records Not Found","Warning")
        Return
   Else
      For i = 0 To L.Size
         ListView1.AddSingleLine(L.Get(i))
      Next
   End If
End Sub

Questa con ado

B4X:
'Activity module
Sub Process_Globals
   'These global variables will be declared once when the application starts.
   'These variables can be accessed from all modules.

End Sub

Sub Globals
   Dim AdoConn As AdoConnection
   Dim AdoRec As AdoRecordset
   Dim Result As Int
   Dim ResultS As String

   Dim Button1 As Button
   Dim EditText1 As EditText
End Sub

Sub Activity_Create(FirstTime As Boolean)

   Activity.LoadLayout("Main")
   
End Sub

Sub AdoConnectionError (Message As String, State As String, ErrorCode As Int)
   Log("AdoConnectionError : " & CRLF & "Error message : " & Message & CRLF & "State : " & State & CRLF & "Error code : " & ErrorCode)
End Sub

Sub AdoRecordsetError (Message As String, State As String, ErrorCode As Int)
   Log("AdoRecordsetError : " & CRLF & "Error message : " & Message & CRLF & "State : " & State & CRLF & "Error code : " & ErrorCode)
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub


Sub Button1_Click

   AdoConn.ConnectionString("server","port"," UTF-8","schema","user","password")
   AdoConn.ConnectionTimeout=1
   AdoConn.LoginTimeout=1
   AdoConn.SocketTimeout=1
   
   AdoConn.InitializeEvent
   AdoConn.Open

   AdoRec.InitializeEvent
   AdoRec.Connection=AdoConn
   AdoRec.SqlStatement=EditText1.Text
   AdoRec.Open

   If AdoRec.isClosed Then
      Msgbox("isClose","")
   Else
      Msgbox("mmmmm","")
   End If

   If AdoRec.RecordCount>0 Then
   Do While Not(AdoRec.EOF)
   Log(AdoRec.Field("a01"))
   AdoRec.MoveNext
   Loop
   End If

   Msgbox("Record " & AdoRec.MaxRecords,"")

   AdoRec.Close
End Sub


Ricordo anche che nel manifesto deve essere messo questo... testo originale

This is my second library very similiar to MSSQL.


There are only three functions.

1) setDatabase("Server IPNUMBER (not name)","databasename","username","password")
2) Query("select * from tablename") --> return rows as a LIST
3) TableList --> return table names rows as a LIST.

You can also write create, update or delete queries.
You must copy MYSQL.jar, MYSQL.xml files to your addititonal library folder.

You should download jdbc driver from Mysql site:
Download jdbc driver

After you must copy mysql-connector-java-5.1.22-bin.jar file to your additional library folder.

You must add Manifest

AddPermission("android.permission.INTERNET")
AddPermission("android.permission.ACCESS_NETWORK_S TATE")

Maybe you need to allow access to MySQL;

mysql> grant all privileges on *.* to root@'%' with grant option;
you can change username root to another one.

Fine testo originale Link http://www.basic4ppc.com/forum/additional-libraries-classes-official-updates/22291-mysql-library-jdbc.html#post129399

Il risultato e sempre lo stesso nessun record, anzi sembra che non ci sia connessione, ma se faccio lo stesso con pocket desktop, quindi senza webservice tutto funziona (realStudio) in quanto il server mysql e aperto anche da accessi fuori localhost.

Chi vuole provare questi 2 codici e dirmi se funzionano, nel frattempo aspetto la risposta da register per vedere se non è una loro limitazione, anche se il messaggio di connessione avvenuta è "mmmmmmm" quindi ok.

Thank

Mi hanno risposto per questo cambiamento ma non trovo differenza

Once I changed the above line, it worked fine and displayed the data in the listview as it should. You might want to check the info you have in this line or permissions???? db.setDatabase("server ipnumber (not name)","databasename","username","password")
 
Last edited:

marco.canta

Active Member
Licensed User
Longtime User
Domani mattina provero i tuoi codici :D

Questa sera ho fatto qualche prova con la libreria MYSql ... ma mi da un mancato collegamen ... ha credo non riesca a collegarsi all'Host (DB4free.net)

Con RealBAsic, apro lo stesso file MySQL tranquillamente.
 

ivanomonti

Well-Known Member
Licensed User
Longtime User
Domani mattina provero i tuoi codici :D

Questa sera ho fatto qualche prova con la libreria MYSql ... ma mi da un mancato collegamen ... ha credo non riesca a collegarsi all'Host (DB4free.net)

Con RealBAsic, apro lo stesso file MySQL tranquillamente.

la classe java funziona su un android 2.2 e non sul mio samsung s2 con 4.0.xx mmmm mi mette paura con le incompatibilità dei dispositivi, cazzuola.

chi può provare ne sarei grato.
 

ivanomonti

Well-Known Member
Licensed User
Longtime User
Fatto il test che non avevo fatto usando l'emulatore, java funziona benissimo, l'incopatibilità sta nel sistema o libreria, avendo testato solo su Android 4.0.3 non recupera i dati anche se la connessione funziona.

Vediamo l'autore della libreria che può fare.


Pertanto chiedo chi può testare su divice reali mi fa un piacere in modo che vediamo fino a dove diventa incompatibile.
 

marco.canta

Active Member
Licensed User
Longtime User
Buonasera ... finalmente sono riuscito a fare qualche prova.
Ho provato con un Samnsung S3 android 4.1 .... sembra che apra il collegamento a database, ma non riesce a leggere i record.
Mi ritorna sempre l'errore "Records Not Found","Warning".

Vorrei riuscire a risolvere il problema, ma non so quale strada prendere.
 

marco.canta

Active Member
Licensed User
Longtime User
Oggi sto facendo un po di prove con ADO ... seguendo l'esempio di IVANOMONTI ... la connessione avviene cosi' come l'apertura del record ... ma mi torna come risultato recordcount = -1 .... e nel database ci sono 368 record.
.... qualche novita' in merito ??
 

fox96

Member
Licensed User
Longtime User
In vb 6 recordcount da -1 dipende se il cursore è lato client o lato server.
Non ho gli strumenti per fare le prove da puoi passare al .eof anche senza il recordcount.
 

frac3sco

Member
Licensed User
Longtime User
ciao ragazzi,
poi siete riusciti ad accedere al db di mysql, anzi avete trovato il modo più performante e sicuro per accedere ai record?
 

marco.canta

Active Member
Licensed User
Longtime User
Ciao, io ho usato l'esempio "ado" di ivanomonti riesco a leggere tranquillamente a leggere i dati del mio MySql, ho ancora qualche problemino sulla modifica dei dati.

B4X:
AdoRec.FieldSet("Longitudine", txtLongitudine.Text)
AdoRec.Update


Mi genera un errore :
-------------------------------------
AdoRecordSetError :
Error Message : result set not updatable (referenced table has no primary keys). This result set must come from a statement that was created with a result set type of ResultSet. CONCUR_UPDATABLE, the quey must select only on table, can not use fuctions and must select all primary keys from that table. See the JDBC2.1 API Specification, section 5.6 for more details.
-------------------------------------

Qualcuno mi puo aiutare ??
Grazie Marco
 

frac3sco

Member
Licensed User
Longtime User
Allora ho creato 2 app per fare la connessione, una usa solo la libreria MYSQL un altra usa la libreria ado, ma come vuole il buon dio, ogni tanto mi sfasa il cervello.

Java

B4X:
Sub Process_Globals

End Sub

Sub Globals
   ' http://www.basic4ppc.com/forum/additional-libraries-classes-official-updates/22291-mysql-library-jdbc.html#post129399
   Dim Button1 As Button
   Dim ListView1 As ListView
End Sub

Sub Activity_Create(FirstTime As Boolean)
   Activity.LoadLayout("Main")
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub Button1_Click
   Dim db As MYSQL
    Dim L As List
   db.setDatabase("server","schema","user","password")
   L = db.Query("Select * from t_000_schede")
    If L.IsInitialized=False Then
        Msgbox("Records Not Found","Warning")
        Return
   Else
      For i = 0 To L.Size
         ListView1.AddSingleLine(L.Get(i))
      Next
   End If
End Sub

Questa con ado

B4X:
'Activity module
Sub Process_Globals
   'These global variables will be declared once when the application starts.
   'These variables can be accessed from all modules.

End Sub

Sub Globals
   Dim AdoConn As AdoConnection
   Dim AdoRec As AdoRecordset
   Dim Result As Int
   Dim ResultS As String

   Dim Button1 As Button
   Dim EditText1 As EditText
End Sub

Sub Activity_Create(FirstTime As Boolean)

   Activity.LoadLayout("Main")
  
End Sub

Sub AdoConnectionError (Message As String, State As String, ErrorCode As Int)
   Log("AdoConnectionError : " & CRLF & "Error message : " & Message & CRLF & "State : " & State & CRLF & "Error code : " & ErrorCode)
End Sub

Sub AdoRecordsetError (Message As String, State As String, ErrorCode As Int)
   Log("AdoRecordsetError : " & CRLF & "Error message : " & Message & CRLF & "State : " & State & CRLF & "Error code : " & ErrorCode)
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub


Sub Button1_Click

   AdoConn.ConnectionString("server","port"," UTF-8","schema","user","password")
   AdoConn.ConnectionTimeout=1
   AdoConn.LoginTimeout=1
   AdoConn.SocketTimeout=1
  
   AdoConn.InitializeEvent
   AdoConn.Open

   AdoRec.InitializeEvent
   AdoRec.Connection=AdoConn
   AdoRec.SqlStatement=EditText1.Text
   AdoRec.Open

   If AdoRec.isClosed Then
      Msgbox("isClose","")
   Else
      Msgbox("mmmmm","")
   End If

   If AdoRec.RecordCount>0 Then
   Do While Not(AdoRec.EOF)
   Log(AdoRec.Field("a01"))
   AdoRec.MoveNext
   Loop
   End If

   Msgbox("Record " & AdoRec.MaxRecords,"")

   AdoRec.Close
End Sub


Ricordo anche che nel manifesto deve essere messo questo... testo originale

This is my second library very similiar to MSSQL.


There are only three functions.

1) setDatabase("Server IPNUMBER (not name)","databasename","username","password")
2) Query("select * from tablename") --> return rows as a LIST
3) TableList --> return table names rows as a LIST.

You can also write create, update or delete queries.
You must copy MYSQL.jar, MYSQL.xml files to your addititonal library folder.

You should download jdbc driver from Mysql site:
Download jdbc driver

After you must copy mysql-connector-java-5.1.22-bin.jar file to your additional library folder.

You must add Manifest

AddPermission("android.permission.INTERNET")
AddPermission("android.permission.ACCESS_NETWORK_S TATE")

Maybe you need to allow access to MySQL;

mysql> grant all privileges on *.* to root@'%' with grant option;
you can change username root to another one.

Fine testo originale Link http://www.basic4ppc.com/forum/addi...ates/22291-mysql-library-jdbc.html#post129399

Il risultato e sempre lo stesso nessun record, anzi sembra che non ci sia connessione, ma se faccio lo stesso con pocket desktop, quindi senza webservice tutto funziona (realStudio) in quanto il server mysql e aperto anche da accessi fuori localhost.

Chi vuole provare questi 2 codici e dirmi se funzionano, nel frattempo aspetto la risposta da register per vedere se non è una loro limitazione, anche se il messaggio di connessione avvenuta è "mmmmmmm" quindi ok.

Thank

Mi hanno risposto per questo cambiamento ma non trovo differenza

Once I changed the above line, it worked fine and displayed the data in the listview as it should. You might want to check the info you have in this line or permissions???? db.setDatabase("server ipnumber (not name)","databasename","username","password")


ciao ragazzi,
vi chiedevo una cortesia, avreste qualche esempio dove si capisce anche come fare dei "insert into, update, delete" e come muoversi trai record con dei button?

forse chiedo troppo, ma prometto qui sul forum che se riesco a creare un esempio di connessio, completo dei dati che ho chiesto pubblico un esempio semplicissimo e utile per tutti i neo b4a . grazie


hello boys
I asked you a favor, you would have some examples where we can also understand how to make "insert into, update, delete" and move as you draw with the record button?
perhaps too much to ask, but I promise here on the forum if I can create a sample connec, full of data that I asked a very simple example public and useful for all new B4A. thanks
 

marco.canta

Active Member
Licensed User
Longtime User
Queste sono lerighe di comandi che utilizzo io, il modifica dati non funziona pero .... mi da errore come dicevo sopra.

B4X:
Sub Globals
  Dim AdoConn As AdoConnection
  Dim AdoRec As AdoRecordset
end sub
sub OpenDB
  AdoConn.ConnectionString("xxx.xxx.xxx.xxx","3306","UTF-8","nomeDB","UserID","Password")
  AdoConn.ConnectionTimeout=1
  AdoConn.LoginTimeout=1
  AdoConn.SocketTimeout=1
  AdoConn.InitializeEvent
  AdoConn.Open
  AdoRec.InitializeEvent
  AdoRec.Connection=AdoConn
  AdoRec.SqlStatement="select * from anagrafica order by Farmacia "
  AdoRec.Open
end sub
Sub ElencoClienti
  If AdoRec.RecordCount>0 Then
    ListView1.Clear
    Do While Not(AdoRec.EOF)
      ListView1.AddSingleLine (AdoRec.Field("Farmacia"))
      AdoRec.MoveNext
    Loop
  End If
End Sub
Sub SchedaCliente
  lblRagioneSociale.Text= AdoRec.Field("Farmacia")
  lblIndirizzo.Text = AdoRec.Field("Indirizzo")
  lblLocalita.Text = AdoRec.Field("Citta")
end Sub
---  Questa è la parte che mi da Errore ---
Sub ModificaDati
  AdoRec.FieldSet("Latitudine", txtLatitudine.Text)
  AdoRec.FieldSet("Longitudine",  txtLongitudine.Text)
  AdoRec.Update
end Sub

Ciao Marco
 

maxware

Well-Known Member
Licensed User
Longtime User
Ciao Marcoffio
Lavori per le Farmacie ??
Non conosco adoconnection ma se provi a sparargli una stringa del tipo
"Update anagrafica set latitudine='" & txtlatitudine.text & "',longitudine='" & txtlongitudine.text & "' where ....condizione "

Per la connessione mi sfugge una info
si riesce a fare anche con i database es, di Aruba che non sono "visibili" dall'esterno ?
Ciaoooo
Mamo
 

marco.canta

Active Member
Licensed User
Longtime User
Ciao Mamo, non lavoro direttamente per le farmacie, ma realizzo software per servizi per le farmacie e in questo caso un'applicazione per agenti che hanno come clienti le farmaci.

Io sto usando un MySql di Register.it ... l'esempio che ho riportato si connette a quel db ... se non ricordo male con aruba non riuscivo a connetermi, sono un po chiusi. I primi esperimenti li ho fatti con db4free.net (gratuito).

Provero' il tuo suggerimento !!!!

Ciao
Marco
 
Top