+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 8 su 8

Come estrarre dati da DataBase Aruba

  1. #1
    Ciao a tutti, apro questa discussione per chiedervi un consiglio su come potrei migliorare il codice su cui sto lavorando.

    Vi spiego brevemente quello che vorrei fare.

    Dopo aver acquistato un hosting Aruba con 5 DataBase Mysql ho creato una tabella da cui un utente, collegato al sito web, può recuperare alcuni dati.
    Sul web funziona tutto perfettamente ma mi piacerebbe molto riuscire a creare un programma Desktop che permetta di fare la stessa cosa.
    Il problema sta nel fatto che Aruba (e non solo) non permette la connessione ai DataBase da remoto.
    Nonostante questo impedimento, tramite PHP e Visual Basic .NET sono riuscito a collegarmi al DataBase ma ho problemi nell'estrazione dei dati perché la tabella in questione è composta da 19 colonne e 36000 righe. I dati che riesco ad estrarre senza problemi sono: numero delle colonne, numero delle righe e nomi delle colonne ma non riesco ad estrarre tutti i valori di una o più colonne perché ci metterebbe tantissimo tempo.
    Vi riporto di seguito i codici PHP e Visual Basic .NET che ho scritto.
    Codice PHP:
    <?PHP
        
    // Imposto i dati per la connessione
        
    define ("HOST","*********");
        
    define ("USER","*********");
        
    define ("PASS","*********");
        
    define ("DB","*********");
        
        
    // Connessione con il server e DataBase
        
    $con mysqli_connect(HOST,USER,PASS,DB) or die ("Errore di connessione! ") . mysqli_error();
        
        
    // Seleziono i nomi di tutte le colonne della tabella dei dati
        
    $query1 mysqli_query ($con,"SHOW COLUMNS FROM tabella");
        
        
    // Seleziono tutti i dati della tabella ed individuo il numero delle colonne e delle righe
        
    $query2 mysqli_query ($con"SELECT * FROM tabella ORDER BY id");
        
    $num_colonne mysqli_num_fields($query2); // Numero colonne
        
    $num_righe mysqli_num_rows($query2); // Numero righe
        
        // Stampo a video il numero delle colonne e delle righe. I due valori sono separati tra loro dal carattere speciale "{"
        
    echo $num_colonne "{" $num_righe "{";
        
        
    // Estraggo i nomi delle colonne e li stampo a video. I valori sono separati tra loro dal carattere speciale "!"
        
    while ($result1 mysqli_fetch_array($query1))
        {
            echo 
    $result1[0] . "!";
        }
        
        
    // Estraggo tutti i valori e li stampo a video. I valori sono separati tra loro dal carattere speciale "|"
        
    while ($result2 mysqli_fetch_array($query2))
        {
            for (
    $a 0$a $num_colonne$a ++)
            {
                echo 
    $result2[$a] . "|";
            }
        }
    ?>
    Codice Visual Basic. Net
            Try
                ' INIZO: RECUPERO DALLA PAGINA PHP TUTTI I DATI DA INSERIRE NELLA TABELLA
                Dim uri As New Uri("http://localhost/TEST_VB_NET/Test_VB_NET_LOCALE.php")
                Dim id As String = "id"
    
                If uri.Scheme = Uri.UriSchemeHttp Then
                    Dim request As HttpWebRequest = HttpWebRequest.Create(uri)
                    request.Method = WebRequestMethods.Http.Post
                    request.ContentLength = id.Length
                    request.ContentType = "application/x-www-form-urlencoded"
    
                    Dim writer As New StreamWriter(request.GetRequestStream())
                    writer.Write(id)
                    writer.Close()
    
                    Dim response As HttpWebResponse = request.GetResponse()
                    Dim reader As New StreamReader(response.GetResponseStream())
                    Dati = reader.ReadToEnd()
                    response.Close()
    
                    MsgBox("OK! La lettura dei dati è avvenuta con successo!")
                    ' FINE: RECUPERO DALLA PAGINA PHP TUTTI I DATI DA INSERIRE NELLA TABELLA
    
                    ' Individuo la posizione del primo separatore del numero delle colonne
                    Dim Pos_Sep_Col As Integer = Dati.IndexOf("{")
    
                    ' Estraggo il numero delle colonne della tabella dati ed elimino il valore ed il separatore dalla lista dei dati
                    Num_Colonne = Mid(Dati, 1, Pos_Sep_Col)
                    Dati = Dati.Remove(0, Pos_Sep_Col + 1)
    
                    ' Individuo la posizione del primo separatore del numero delle colonne
                    Dim Pos_Sep_Righe As Integer = Dati.IndexOf("{")
    
                    ' Estraggo il numero delle righe della tabella dati ed elimino il valore ed il separatore dalla lista dei dati
                    Num_Righe = Mid(Dati, 1, Pos_Sep_Righe)
                    Dati = Dati.Remove(0, Pos_Sep_Righe + 1)
    
                    ' Inizio: Inserisco in un array i nomi di tutte le colonne
                    Dim Nomi_Colonne() As String
                    ReDim Nomi_Colonne(CInt(Num_Colonne))
    
                    For a As Integer = 1 To CInt(Num_Colonne)
                        Dim Pos_Sep_Col1 As Integer = Dati.IndexOf("!") ' Individuo la posizione del separatore del nome delle colonne (Il conteggio parte da 0)
                        Dim Nomi_Colonne_PHP As String = Mid(Dati, 1, Pos_Sep_Col1)
                        Dati = Dati.Remove(0, Pos_Sep_Col1 + 1)
    
                        Nomi_Colonne(a) = Nomi_Colonne_PHP ' Nomi di tutte le colonne inserito nell'array "Nomi_Colonne"
                    Next
                    ' Fine: Inserisco in un array i nomi di tutte le colonne
                End If
    
            Catch ex As Exception
                MsgBox("Errore!!!")
            End Try
    
    Secondo voi come potrei migliorare i codici? Oppure come potrei operare?
    Grazie mille a tutti e scusate se sono stato un po lungo nello spiegarmi.
    Ciao

  2. #2
    Beh, se scarichi 36000 righe, comunque devi mettere in conto un po' di tempo, non può essere certo una cosa immediata.

    Potresti limitare queste 36000 righe ad un numero più accettabile, scaricando solo quelle che vedi in un determinato momento e scaricando quelle che ti servono quando cambi la visualizzazione (una sorta di paginazione).
    ℹ️ Leggi di più su AntonioG ...

  3. #3
    patel45 non è in linea Scolaretto
    Quote Originariamente inviato da samurai.sette Visualizza il messaggio
    Il problema sta nel fatto che Aruba (e non solo) non permette la connessione ai DataBase da remoto.
    Non ho capito questo punto, a che serve allora ?

  4. #4
    @Patel ... il DB è visto localmente dalle applicazioni server residenti su Aruba (ovvero dal web server), non dalle applicazione esterne.
    ℹ️ Leggi di più su AntonioG ...

  5. #5
    Non so se Aruba te lo permette, ma potresti scrivere un webservice e installarlo lato server per avere accesso più immediato ai dati del DBMS
    ℹ️ Leggi di più su AntonioG ...

  6. #6
    L'avatar di _alka_
    _alka_ non è in linea Very Important Person
    Quote Originariamente inviato da samurai.sette Visualizza il messaggio
    Secondo voi come potrei migliorare i codici? Oppure come potrei operare?
    Da quello che vedo, stai cercando di recuperare i dati via PHP per visualizzarli in una pagina Web che poi vai a scaricare dall'applicazione VB.NET.

    L'approccio mi sembra corretto dal punto di vista della modalità adoperata, ossia quella di disporre di un'applicazione server in grado di accedere ai dati che viene interrogata da un'applicazione client la quale può così scaricarne una copia.

    Mi pare però che tu stia usando PHP per realizzare una versione "custom" dei tuoi dati, complicando quindi il lavoro di importazione da parte dell'applicazione VB.NET.

    Per risolvere questo problema, io modificherei il formato di serializzazione dei dati passando a uno standard tipo JSON oppure XML, che hanno senz'altro una struttura più rigida e facilmente realizzabile lato server e interpretabile dal client.

    Se hai un elevato numero di operazioni di estrazioni che devi poter fare, con diversi parametri e diversi valori, allora forse ti conviene invece implementare un Web Service SOAP, così come ti è stato suggerito: oltre a un formato rigido e facile da usare per i dati, hai anche una "struttura" standard per le varie operazioni possibili e loro parametrizzazione su cui poter contare.

    Ciao!
    ℹ️ Leggi di più su _alka_ ...

  7. #7
    Ciao ragazzi, grazie mille per tutte le risposte. Non mi sarei mai immaginato così tante risposte in così poco tempo.

    Il discorso della "impaginazione" andrebbe bene solo in parte perché la visualizzazione dei dati della tabella deve poter avvenire sia in forma tabellare che grafica (grafico a linee). Con la visualizzazione tabellare l'idea della "impaginazione" sarebbe perfetta ma nella visualizzazione grafica no perché se l'utente volesse vedere il grafico con tutti dati si ripresenterebbe il problema.

    Sugli altri punti (WebService, JSON e XML) devo informarmi un pochino e vedere cosa riesco a fare. A tal proposito sapreste dirmi dove potrei trovare buoni informazioni?

    Detto questo vi ringrazio di nuovo, siete stati gentilissimi. Ciao!

  8. #8
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Invece di rileggere i dati mostrati a video puoi fare anche un'estrazione dal database a un file di testo, lato server, quindi in PHP. Dal client (VB.Net) può poi essere eseguito il trasferimento via Ftp. Entrambe le operazioni possono essere schedulate ad intervalli prestabiliti.
    ℹ️ Leggi di più su Brontolo ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Risposte: 2
    Ultimo Post: 20-04-2014, 13:30
  2. Risposte: 1
    Ultimo Post: 17-05-2009, 23:05
  3. Estrarre un database
    Da cippalippa nel forum Visual Basic .Net
    Risposte: 18
    Ultimo Post: 18-02-2008, 09:49
  4. [ACCESS] estrarre dati da database esterno
    Da niclo nel forum Microsoft Access
    Risposte: 9
    Ultimo Post: 11-12-2007, 22:18
  5. Risposte: 0
    Ultimo Post: 23-03-2006, 15:54