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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      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.