MySQL Verbindung mit der Handy APP ohne Erfolg

Startseite Foren Deutsches LiveCode-Forum MySQL Verbindung mit der Handy APP ohne Erfolg

Schlagwörter: ,

Ansicht von 11 Antwort-Themen
  • Autor
    Beiträge
    • #9164
      it-basixs
      Teilnehmer

        Hallo zusammen.

        Ich bin neu hier und in LiveCode und habe mal als erstes eine kleine App für die Verbindung mit meiner MySQL Datenbank auf meinem Webhoster geschrieben bzw. das Tutorial für meine Zwecke umgeschrieben.

        Der externe Zugriff ist erlaubt und bereits freigegeben. Für die Standalone APP habe ich unter Permissons den Zugriff aufs Internet und Write Externen Storage aktiviert (unds auch alles andere). Minimum Android Version 4.1.

        Unter der LiveCode IDE funktioniert der Zugriff problemlos. Mit der App erhalte ich nicht mal eine Rückmeldung (answ error / info) ob die Verbindung hergestellt werden konnte oder eben nicht.

        Um zu testen ob die App ins Internet kommt, habe ich zu Testzwecken auch einen Webbrowser zum Stack hinzugefügt. Das klappt, also gehe ich davon aus das die App grundsätzlich die benötigten Rechte hat.

        Nun meine Frage. Wer hätte das Gedacht ;-). Was mache ich falsch bzw. wo muss ich eventuell noch Einstellungen vornehmen, damit ich auch übers Handy (meines hat Android 6.0) auf die Datenbank zugreifen kann?!

        Danke im vorraus für Eure hoffentlich zahlreichen Tritte in den Allerwertesten! 😉

        MfG

        Andreas

      • #9166
        Klaus Major
        Administrator

          Hi Andreas,

          willkommen im Forum!

          Ein paar Fragen:
          Community Version oder Livecode Indy?
          Es gibt keine Fehlermeldung?
          Aber Du hast doch eine eingebaut „if the result…“ und so?
          Kannst Du bitte mal Dein Verbindungsskript hier posten? Ohne PWD natürlich!

          Gruß

          Klaus

        • #9168
          it-basixs
          Teilnehmer

            Community Version in der Version 9.0.2, muss das erstmal testen…

            Aber Du hast doch eine eingebaut „if the result…“ und so?

            Ja, hab ich Siehe unten. Der gesamte Code funktioniert in der IDE unter Windows 10 wunderbar, nur eben nicht auf dem Handy. Alles unwichtige habe ich mal aus dem Code gelöscht, damit das hier nicht zu Verwirrungen führt. Des Weiteren habe ich auch eine APP direkt mit dem LiveCode MySQL Tutorial unverändert erstellt und aufs Handy geladen, leider gleiches Ergebnis. In der IDE Funktioniert es als APP auf dem Handy nicht!

            -- use a global variable to hold the connection ID so other scripts can use it
            global gConnectionID
            global dbServ
            global dbName
            global dbUser
            global dbPass
            
            command OpenMySQL   
               ## Zugangsdaten kommen aus Textfeldern...
               put field "dbServ" into dbServ
               put field "dbName" into dbName
               put field "dbUser" into dbUser
               put field "dbPass" into dbPass
               
               ## Bis hierhin, kein Problem 
               answer info dbServ & cr & dbName & cr & dbUser & cr & dbPass
               
               -- connect to the database
               put revOpenDatabase("mysql", dbServ, dbName, dbUser, dbPass) into tResult
               	
               -- check if it worked and display an error message if it didn't
               -- & set the connection ID global
            
               ## Leider keinerlei Rückmeldungen obwohl es hier steht...
               if tResult is a number then
                  put tResult into gConnectionID
                  answer info "Connected to the database." & cr & "Connection ID = " & gConnectionID
               else
                  put empty into gConnectionID
                  answer error "Unable to connect to the database:" & cr & tResult
               end if
            end OpenMySQL
            
            on hiliteChanged
               put the hilitedItemName of me into navBar
             
               if navBar = "option" then
                  show group "Settings"
               else
                  hide group "Settings"
               end if
            
               if navBar = "members" then
                  show group "grdUser"
                  put "Anwesenheit" into field "navText"
                  
                  ## Datenbank öffnen
                  OpenMySQL
                  
                  if gConnectionID is an integer then
                     ## Query the database for data
                     put revQueryDatabase(gConnectionID, "SELECT LastLogInDate, UserName FROM Members WHERE PKID NOT LIKE '1' AND IsActive Like '-1' AND LID NOT LIKE '0'") into theCursor   
                     
                     if theCursor is an integer then
                        ConvertSQLCursorToArray theCursor, theDataGridArray
                        put the result into theError
                        
                        ## grdData löschen
                        set the dgData of group "grdUser" to empty
                        
                        if theError is empty then
                           ## The cursor was successfully converted to an array.
                           ## Assign it to the data grid. The 'firstname' and 'lastname' columns
                           ## from the database cursor will appear in the matching columns
                           ## in the data grid.
                           set the dgData of group "grdUser" to theDataGridArray
                        end if
                        
                        ## Close the database cursor 
                        revCloseCursor theCursor
                     end if
                     
                     ## Close the database connection
                     revCloseDatabase gConnectionID
                  else
                     answer "Error connecting to the database:" && gConnectionID & "."
                  end if
               else
                  hide group "grdUser"
               end if
               
            end hiliteChanged
            
            command ConvertSQLCursorToArray pCursor, @pOutArrayA
               local i
               local theFields
               local theError
               
               ## Get the names of all the columns in the database cursor
               put revDatabaseColumnNames(pCursor) into theFields
               if theFields begins with "revdberr," then
                  put item 2 to -1 of theFields into theError
               end if
               
               if theError is empty then
                  put 0 into i
                  ## Loop through all rows in cursor
                  repeat until revQueryIsAtEnd(pCursor)
                     add 1 to i
                     
                     ## Move all fields in row into next dimension of the array
                     repeat for each item theField in theFields
                        put revDatabaseColumnNamed(pCursor, theField) into pOutArrayA[i][ theField ]
                     end repeat
                     
                     revMoveToNextRecord pCursor
                  end repeat
               end if
               
               return theError
            end ConvertSQLCursorToArray
          • #9170
            Klaus Major
            Administrator

              Hm, sieht alles korrekt aus:

              put revOpenDatabase(„mysql“, dbServ, dbName, dbUser, dbPass) into tResult

              Und diese Meldung siehst Du nicht:

              answer error „Unable to connect to the database:“ & cr & tResult

              ?
              Schau mal in das resultierende APK, ob alle Datanbanktreiber enthalten sind.
              Ich selber besitze kein Handy o.ä., kann so etwas daher nicht testen.

              ——————————————————————————

              Aber mal was zu Deinem SQL, müsste LIKE nicht mit % oder _ verwendet werden?
              … where nachname LIKE ‚%eier“
              So habe ich es zumindest mal gelernt.

              Kleiner Tip am Rande: Mr. Boole is our friend!

              ## if navBar = „option“ then
              ## show group „Settings“
              ## else
              ## hide group „Settings“
              ## end if
              ## vs:
              set the visible of grp „Setting“ to (navbar = „option“)

              🙂

              Gruß

              Klaus

            • #9172
              it-basixs
              Teilnehmer

                Und diese Meldung siehst Du nicht:

                answer error „Unable to connect to the database:“ & cr & tResult

                Nein, leider, sonst hätte ich ja zumindest einen Fehlercode.

                Schau mal in das resultierende APK, ob alle Datanbanktreiber enthalten sind.

                Wie mach ich das, hab leider keine Ahnung von LiveCode, das sind meine ersten Gehversuche…

                set the visible of grp „Setting“ to (navbar = „option“)

                Danke, ich steh auf kurze Befehlszeilen…

              • #9174
                Klaus Major
                Administrator

                  OK, also geht schon der Versuch zu verbinden in die Hose, bzw. LC stopt an der Stelle.

                  Soweit ich weiß, ist ein APK eine ZIP Datei „in disguise“. Also mal duplizieren und als Endung .zip dranschreiben, oder direkt mit WinRAR, 7-Zip oder einem anderen Entpack-Programm versuchen zu öffnen. Dann in dem Inhalt nachsehen, ob Du irgendwo einen Anhaltspunkt finden kannst.

                  Hier noch ein Tip, wie man Skripte besser lesbar macht, indem man verschachtelte IT THEN ELSE Klauseln aufs Mindeste reduziert. Zunächst alle AUSCHLUSS-Kriterien abhandeln, siehe die ersten zwei IF THEN Klauseln.

                  on hiliteChanged
                     put the hilitedItemName of me into navBar
                     set the visible of grp "Setting" to (navbar = "option")
                     
                     if navBar <> "members" then
                        hide group "grdUser"
                        exit hilitechanged
                     end if
                     
                     show group "grdUser"
                     put "Anwesenheit" into field "navText"
                     ## Datenbank öffnen
                     OpenMySQL
                     
                     if gConnectionID is NOT an integer then
                        answer "Error connecting to the database:" && gConnectionID & "."
                        exit hilitechanged
                     end if
                     
                     ## Query the database for data
                     put revQueryDatabase(gConnectionID, "SELECT LastLogInDate, UserName FROM Members WHERE PKID NOT LIKE '1' AND IsActive Like '-1' AND LID NOT LIKE '0'") into theCursor   
                     
                     if theCursor is an integer then
                        ConvertSQLCursorToArray theCursor, theDataGridArray
                        put the result into theError
                        
                        ## grdData löschen
                        set the dgData of group "grdUser" to empty
                        
                        if theError is empty then
                           ## The cursor was successfully converted to an array.
                           ## Assign it to the data grid. The 'firstname' and 'lastname' columns
                           ## from the database cursor will appear in the matching columns
                           ## in the data grid.
                           set the dgData of group "grdUser" to theDataGridArray
                        end if
                        
                        ## Close the database cursor 
                        revCloseCursor theCursor
                     end if
                     
                     ## Close the database connection
                     revCloseDatabase gConnectionID 
                  end hiliteChanged
                • #9176
                  it-basixs
                  Teilnehmer

                    Vielen Dank für Deine Tipps…

                    Melde mich zurück, sobald ich die APK durchsucht habe.

                    CU Andreas

                  • #9178
                    Klaus Major
                    Administrator

                      Ich habe schon des öfteren gehört, daß „Search for required inclusion when saving the standalone applikation“ nicht immer zufriedenstellend arbeitet.

                      Also mal „Select inclusion…“ anklicken und selber die Datenbanktreiber anklicken bei „Inclusions“. Ist auf jeden Fall einen Versuch wert.

                      Oder es mal so versuchen:

                      ...
                      TRY
                         put revOpenDatabase("mysql", dbServ, dbName, dbUser, dbPass) into tResult
                      CATCH den_Fehler
                         answer "Problem:" && den_Fehler
                         exit to top
                      end try
                      ...
                    • #9180
                      it-basixs
                      Teilnehmer

                        Hab gerade die APK entpackt, es sieht so aus, als wären da tatsächlich keine DB Treiber dabei. Zumindest kann ich keine erkennen.

                        Inhalt:
                        AndroidManifest.xml
                        classes.dex
                        resources.arsc

                        ..\lib\armeabi
                        librevandroid.so

                        ..\META-INF
                        CERT.RSA
                        CERT.SF
                        MANIFEST.MF

                        ..\res
                        ..\res\drawable
                        icon.png

                        ..\res\layout
                        livecode_inputcontrol.xml

                        ..\res\xml
                        nfc_tech_filter.xml

                      • #9182
                        Klaus Major
                        Administrator

                          Da haben sich unserer Postings überschnitten.
                          Bitte mal meinen letzten Absatz lesen und ausprobieren.

                        • #9184
                          it-basixs
                          Teilnehmer

                            Ja, DANKESCHOeN.Das war es!

                            Jetzt sind die DB Treiber im Paket enthalten und die Verbindung klappt.

                            Wieder was dazu gelernt…

                            Lieben herzlichen Danke Klaus.

                          • #9186
                            Klaus Major
                            Administrator

                              Gern geschehen!

                              Ich habe hier direkt mal wieder einen Kommentar dazu abgegeben:
                              https://quality.livecode.com/show_bug.cgi?id=21223

                          Ansicht von 11 Antwort-Themen
                          • Du musst angemeldet sein, um auf dieses Thema antworten zu können.