Axwald

Verfasste Forenbeiträge

Ansicht von 15 Beiträgen - 1 bis 15 (von insgesamt 89)
  • Autor
    Beiträge
  • als Antwort auf: Mehrere Datenbanken #47804
    Axwald
    Teilnehmer

      Hallo,

      am Besten gleich nach “revOpenDatabase” – in jedem Fall bevor Du drauf zugreifst 🙂

      Viel Spaß!

      als Antwort auf: Mehrere Datenbanken #47796
      Axwald
      Teilnehmer

        Hallo,

        mach eine weitere SQLite-DB namens “test.db”.
        Darin 1 Tabelle namens “t_test”, mit ein paar Werten.

        Führe die folgenden Statements in Deiner normalen SQLite aus:

        ATTACH DATABASE 'my:\path\test.db' AS "TestDB";

        Der angegebene Pfad sollte aber stimmen …
        Das bindet die “test.db” in Deine Datenbank ein, unter dem Alias “TestDB” – die normalen Tabellen bleiben unter dem Alias “main” erhalten (resp. “temp”, wenn Du mit temporären Tables arbeitest). So sprichst Du das dann an:

        SELECT * FROM "TestDB"."t_test";

        Voila, Deine Daten. Getestet.

        ACHTUNG: Die Doppel-Quotes (“) im obigen Code MÜSSEN mit BackTicks (numToChar(96)) ersetzt werden!

        Viel Spaß!`

        als Antwort auf: Probleme mit sqlite #47791
        Axwald
        Teilnehmer

          Hallo,

          “Status” könnte ein “reserved word” sein. Also besser die Feld- & Tabellen-Namen (Lernstand, Aufgabe, Status …) immer in Backticks (numToChar(96)) setzen, gerade SQLite ist da recht heikel!

          Abgesehen davon:

          Mit der “(:1,:2)”-Notation bin ich schon so oft in Probleme gelaufen, ich verwende die nicht mehr.
          Wenn ich SQL schreibe, mach ich das so:

          Zuerst formuliere ich die Query in HeidiSQL, mit Dummy-Argumenten, bis das SQL sauber läuft.

          Dann kopiere ich die Query in den Text-Editor, wo ich die Zeilenlängen anpasse & meine Dummy-Argumente mit:
          ” & myX & ”
          ersetze. Dann füge ich per Makro das “put … into strSQL” sowie die Quotes & Zeilenumbrüche (” & \) ein.

          Das kopiere ich nun wiederum in den LC-Editor, wo ich dann die “myX” mit den aktuellen Variablen-Namen ersetze.

          Vorteil: Ich bekomme einen kompletten “strSQL”, den ich mir beim Debuggen anschauen kann.
          LC macht auch nix anderes – es baut eine nurText SQL-Query, und schickt die zum Server. Und in Deinem Fall siehst Du nur mit einem Netzwerk-Sniffer, was es da eigentlich schickt :/

          Viel Spaß!

          als Antwort auf: Datei auf Mobile löschen #47587
          Axwald
          Teilnehmer

            Hallo,

            ich bin dem jetzt mal nachgegangen & habe noch ein paar interessante Sachen gefunden:

            – Das hatten wir hier schon mal 🙂
            – Meine Lösung von damals funktioniert auf moderneren Androids nicht mehr, warum auch immer.
            – Datei löschen habe ich gar nicht hingekriegt.
            – Die Android-URL-Implementation hat noch ein paar andere böse Bugs, z.B.
            get URL ("ftp:// ... /folder/")
            (also ein simples Datei-Listing) hat unterschiedliche Ausgaben unter Win & Android …

            Daraufhin habe ich mich mal zurückgelehnt, und mir angeschaut, was ich eigentlich mit FTP mache, und wie:

            FTP ist ja ein prinzipiell unsicheres System, mit im Klartext übertragenen Passwörtern. Will ich, daß da jemand etwas löschen kann? Eher nicht, oder?
            Und so sehe ich, daß inzwischen seitens meiner Programme eh nur lesend zugegriffen wird:
            – Lesen von (verschlüsselten) Einstellungsdateien, und
            – Download von Elementen (Stacks, Hilfsprogramme, Dokumentation) die eh alle OpenSource sind.

            Die vom Programm verwendeten User haben für die betr. FTP-Verzeichnisse gar kein Schreibrecht mehr. (Das hatte ich für meinen Test natürlich geändert.)
            Meine Error-Logs übertrage ich inzwischen über ein LC-Server-Script, eine früher verwendete rudimentäre Telemetrie (Arbeitszeit-Tracking im Kundenauftrag) hat still & leise die Funktion eingestellt 🙂

            Daher ging ich davon aus, libURL/Android würde, wie gewohnt, wenigstens halbwegs funktionieren. Tut es scheinbar nicht mehr.
            “Ist eh überholt, nimm doch tsNet”, lese ich im Forum & auf der Mailing-Liste dazu. Klar, fette Kohle verlangen für eine halbherzige Implementation des OpenSource-Tools cURL, die dazu wahrscheinlich auch nur auf Apple-Hardware richtig läuft – das ist auch ein Geschäftsmodell.

            Tut mir leid, daß ich nicht weiter helfen konnte. Viel Spaß!

            als Antwort auf: Datei auf Mobile löschen #47574
            Axwald
            Teilnehmer

              Hallo,

              ich konnte das nachstellen. Die LibURL für Android hat bei FTP einige Aussetzer.

              put "This is a test." into URL (myBaseFtpPath & "test.txt")

              erzeugt zwar eine “test.txt”, aber die ist leer. (myBaseFTPPath ist eine gültige FTP-Adresse mit username:passwort@domain/ordner/ …)

              put CR & "We can write to it!" after URL (myBaseFtpPath & "test.txt")

              tut auch nix. In beiden Fällen bleibt “the result” leer (= BUG)!

              delete URL (myBaseFtpPath & "test.txt")

              antwortet mit “not implemented”, wie beschrieben.

              Bisher war mir das nicht aufgefallen – ich hatte immer einfach fertige Files (aus “specialFolderPath(“temporary”)”) kopiert. Aber das erklärt auch ein mysteriöses Problem in meinem neuen ErrorHandling, das auf Android noch nicht hinhaut – jetzt weiß ich, warum!

              Sobald ich einen WorkAround habe, poste ich den hier 🙂

              Viel Spaß!

              als Antwort auf: Ermittlung des eigenen Filenamens #47570
              Axwald
              Teilnehmer

                Hallo,

                Du schriebst:

                mit einem einzigen Splashscreen- standalone-File sollen durch dessen einfaches Umbenennen die verschiedensten Anwendungsfiles gestartet werden……

                Kann mir nicht helfen, das riecht nach Problemen. Würde ich vermeiden. Alternative:

                Benutze Start-Parameter, also:
                mySA.exe -Mode1

                Im “PreOpenstack”/ “Openstack”-Handler dann:
                switch
                case ($1 is empty)  --  no parameter
                answer "Kein Parameter!"
                break
                case ($1 begins with "mode")  --  a "mode param"
                answer "Parameter:" && char -1 of $1
                dispatch "StartIt" to this stack with char -1 of $1
                break
                default
                answer "Ungültiger Parameter!"
                quit
                end switch

                “on StartIt theMode” verzweigt dann zu Deinen “verschiedensten Anwendungsfiles”.

                Oder Du gibst gleich den Pfad des Anwendungsfiles an:
                mySA.exe -"D:/myStacks/myStack1.rev"

                und dann im “PreOpenstack”/ “Openstack”-Handler:
                if ($1 is not empty) then go stack $1 in new window

                In “$0” steht übrigens der komplette Datei-Pfad des gerade gestarteten Stacks/ der StandAlone 😉

                Viel Spaß!

                als Antwort auf: Android Standalone kann nicht generiert werden. #47569
                Axwald
                Teilnehmer

                  Hallo,

                  was für ein @%, nur um LC beizubringen, wo es das SDK finden kann!

                  Es wird Dir wahrscheinlich nicht viel helfen (da ich mit LC 6.7.10 nur 32bit-APKs generiere) aber hier sind meine Pfade:

                  • SDK root: C:\Program Files (x86)\Android\android-sdk
                  • JDK path: C:\Program Files\Java\jdk1.8.0_144

                  Ich habe noch den SDK Manager 25.2.5 laufen. Hier ein Pic, auf dem nur “installiert” gezeigt wird.

                  Was steht bei Dir im “JDK Path”?

                  Viel Spaß!

                  als Antwort auf: Datei auf Mobile löschen #47564
                  Axwald
                  Teilnehmer

                    Guko,

                    ich schau mir das mal auf Android an. Kann aber ein paar Tage dauern.

                    2 mögl. Fehlerquellen fallen mir noch ein:

                    1.) Neuere Android-Versionen blocken ungesicherte Verbindungen. FTP könnte da darunter fallen – aber es geht hier nur ums löschen, richtig? Downloaden kannst Du die Datei?

                    2.) WLAN – ein häufiges Problem sind öffentl. Hotspots/ der Gast-Zugang der Fritzbox: Da ist oft per default nur “Surfen & Mail” erlaubt, Datenbank- und FTP-Zugriffe werden geblockt.

                    Viel Spaß!

                    PS: Um Punkt 1.) zu beheben (der ist auch in 9.6.3 noch ungepatcht):

                    In [LC-Programmordner]/Runtime/Android/ gibt es eine “Manifest.xml”. In dieser ist eine Zeile einzufügen:
                    Nach der Zeile ${CUSTOM_URL_FILTER} kommt das hier rein:
                    android:usesCleartextTraffic="true",
                    bevor dem End-Tag für “activity”.

                    Diesen Patch (der aus der Community kam) hat LC Ltd. lange zurückgehalten, extra für die Bezahl-Versionen. Er sorgt dafür, daß eine damit kompilierte Android-APK auch http (und ftp) benutzen darf.

                    als Antwort auf: Datei auf Mobile löschen #47561
                    Axwald
                    Teilnehmer

                      Schönes Neues,

                      also: FTP ist case-sensitive, also schön auf korrekte Groß/ Kleinschreibung achten! Dann:

                      put "x45B3" into myUser
                      put "TiSekrete!" into myPW
                      put "myDomain.org/myFolder/myFile.txt" into myFile
                      put "ftp://" & myUser & ":" & URLEncode(myPW) & \
                      "@" & myFile into myURL
                      delete URL myURL
                      get the result
                      if it is not empty then answer error it titled "OUCH!"

                      Sollte “myFile” Umlaute etc. enthalten, könntest Du das so schreiben:

                      "@" & URLEncode(myFile) into myURL

                      Aber das würde ich sowieso vermeiden – FTP-Server sind oft uralte, organisch gewachsene Unix-Tools & reagieren manchmal unvorhersehbar auf alles, was nicht Basis-ASCII ist 🙂

                      Und dann sollte natürlich sichergestellt sein, daß myUser in myFolder überhaupt löschen darf!

                      Als letztes: Neuere LC-Versionen (so ab V7 …) sind notorisch Bug-verseucht, speziell unter Android, Linux und Windows. Immer nochmal mit einer älteren Version testen.

                      Viel Spaß!

                      als Antwort auf: Android Standalone kann nicht generiert werden. #47560
                      Axwald
                      Teilnehmer

                        Schönes Neues,

                        der in den Preferences einzutragende Pfad ist genau der, der Dir auch im “Android SDK Manager” ganz oben als “SDK Path” angezeigt wird, in den Prefs stehen dann halt Slashes statt Backslashes.
                        (Es ist der Pfad zu dem Verzeichnis, in dem der SDK Manager wohnt 🙂 )

                        Es war auch lange so, daß auch eines der Uralt-SDKs installiert sein mußte, ich glaube es war API 15. Bei mir sind auch noch API 7 & 8 installiert (neben den neuen, 28/29).

                        Viel Spaß!

                        als Antwort auf: get url geht nicht unter win10 #47534
                        Axwald
                        Teilnehmer

                          Hallo,

                          klingt wie eine StandAlone (“das Programm”). Falls Du damit eine httpS-URL holen willst, brauchst Du die “revsecurity.dll” im gleichen Verzeichnis wie Deine .exe. Ansonsten sollte es da keine Probleme geben.

                          Zum Thema “Programm läuft weiter nach Beenden” – soweit ich mich erinnern kann, nimm “quit” statt “close this stack” in der StandAlone. Evtl. (speziell unter Android) noch ein “lock messages” davor …

                          Das ist problematisch unter Win – LC läßt auch gerne mal Dateien offen, aus denen es gelesen hat! Ist eben ein Apple-Programm, & die anderen Plattformen sind nur halbherzig mitgeschleppte Alibis, damit man das “CrossPlatform”-Label draufpappen kann …

                          Schöne Feiertage!

                          als Antwort auf: Answer-Befehl #46371
                          Axwald
                          Teilnehmer

                            Hallo,
                            2 Sachen, die mir auffallen:

                            1.) Du bist arg sparsam mit den Leerzeichen:

                            &vLieferant& ... &return& ...
                            fld "fArchiv"of cd "Hauptmenü"  ... into fld"xy"

                            Gut möglich, daß sich da der Interpreter von LC “verschluckt”. Der versucht, den Text mittels Leerzeichen in Wörter zu verwandeln, und dann daraus etwas sinnvolles zu erstellen. Wenn das nicht klappt, probiert er es mit raten (“der Interpreter ist fehlertolerant”), und da können komische Sachen ‘rauskommen 🙂

                            2.) Hast Du schon einmal die Livecode-Preferences erneuern lassen? Unter Windows in:
                            C:\Users\[Username]\AppData\Roaming\RunRev\Preferences
                            als “livecode.rev” oder, für LC 7+, als “livecode7.rev”.
                            Die zerschießt LC gerne mal, und dann macht das Programm komische Sachen wie das, was Du beschreibst 😉
                            Einfach umbenennen, LC legt dann beim nächsten Start eine Neue an.

                            Viel Spaß!

                            als Antwort auf: Erste Variable einrichten #38175
                            Axwald
                            Teilnehmer

                              Hallo,

                              scheinbar gibt es kleine Unklarheiten bzg. Variablen. Ich versuche das mal ganz kurz zu erklären:

                              In den Einstellungen: 2 Methoden!
                              Sowohl im Haupt-Menü als auch im Menü des Skript-Editors gibt es den Punkt “Edit/ Preferences”, der das Fenster für die Einstellungen öffnet. Dort, im Tab “Script Editor”, gibt es ein Kästchen für “Strict Compilation Mode”. Dieses legt fest, wie “Lokale Variablen” erzeugt werden:
                              – aus = “on-the fly”: einfaches Zuweisen eines Wertes genügt, um eine Variable zu erzeugen (“local X” geht aber auch), oder
                              – an = “explizit”: jede Variable MUSS vor Benutzung mittels “local X”initialisiert werden (die “klassische” Methode).

                              on test1  --  "on the fly":
                                 put "1 - Heute ist" into myText  --  einfach Wert zuweisen
                                 put the long system date into myDatum
                                 put myText && myDatum  --  => Message box
                              end test1
                              
                              on test2  --  "explizit":
                                 local myText, myZahl  --  zuerst deklarieren,
                                 put "2 - Heute ist" into myText  --  dann Wert zuweisen!
                                 put the long system date into myDatum
                                 put myText && myDatum  --  => Message box
                              end test2

                              Wie gesagt, das gilt nur für “Lokale Variablen” – die anderen benutzen immer “explizit”! Um das wiederum zu verstehen, sollten wir die 3 Arten von Variablen klarstellen:

                              1.) Lokale Variablen:
                              Diese leben innerhalb eines Handlers – also zwischen “on X” (oder “command X”, oder “function X”) und “end X”, und haben auch nur hier Gültigkeit. Die beiden “myText” im obigen Beispiel sind also 2 verschiedene Variablen – und haben auch verschiedene Werte.

                              Lokale Variablen entstehen abhängig von der oben beschriebenen Einstellung:
                              – “on-the fly”: einfaches Zuweisen eines Wertes initialisiert & füllt sie, und
                              – “explizit”: “local X” initialisiert X, aber es hat noch keinen Wert.

                              2.) Skript-Lokale Variablen:
                              Diese leben innerhalb eines Skriptes – also z.B. im Skript eines Buttons, einer Card usw., und haben Gültigkeit innerhalb diesen ganzen Skriptes. Sie müssen immer mittels “local X” initialisiert werden, und zwar ausserhalb eines Handlers. Ein Card-Skript, analog zu obigem Beispiel:

                              local l_datum
                              
                              on openCard
                                 put the long system date into l_Datum
                              end openCard
                              
                              on test1  --  "on the fly":
                                 put "1 - Heute ist" into myText  --  einfach Wert zuweisen
                                 put myText && l_Datum  --  => Message box
                              end test1
                              
                              on test2  --  "explizit":
                                 local myText, myZahl  --  zuerst deklarieren,
                                 put "2 - Heute ist" into myText  --  dann Wert zuweisen!
                                 put myText && l_Datum  --  => Message box
                              end test2

                              Auch Skript-Lokale Variablen entstehen erst, wenn sie initialisiert werden – also wenn zum ersten Mal ein Handler in diesem Skript aufgerufen wird. Einen Wert erhalten Sie erst, wenn er zugewiesen wird (hier im “openCard”-Handler, also beim ersten Aktivieren dieser Card). Bis dahin sind sie leer – die “explizit”-Methode.
                              Aufgrund des unterschiedlichen Verhaltens empfiehlt es sich, Skript-Lokale Variablen gesondert zu benamsen.

                              3.) Globale Variablen:
                              Diese verhalten sich fast genau wie Skript-Lokale Variablen, nur der Gültigkeitsbereich ist die “Engine” – also das Programm selbst. Das ist die LiveCode-IDE, oder eine StandAlone. Und eingeschlossen sind alle Stacks, die darunter laufen!

                              Abweichungen zu Skript-Lokal:
                              Definiert werden sie nicht mit “local X”, sondern mittels “global X”.
                              Und damit sie für ein Skript sichtbar sind, müssen Sie in jedem dieser Skripte nochmal explizit definiert werden – evtl. schon vorhandene Werte in der Variable werden erst so verfügbar!

                              Ich hoffe, zur allgemeinen Verwirrung beizutragen im Stand gewesen zu sein!
                              Viel Spaß!

                              als Antwort auf: Steuerelemente ändern, CSV-Daten bearbeiten in HTML5 #37704
                              Axwald
                              Teilnehmer

                                Hmm,

                                aber das sollte doch gehen:

                                   put URL ("binfile:" & theDataFilePath) into URL \
                                         ("ftp://" & theUser & ":" & URLEncode(thePassword) & "@" & theFtpFilePath)

                                (Vorausgesetzt, in einer HTML-Anwendung funktioniert “URL” überhaupt …)

                                Viel Spaß!

                                als Antwort auf: mobileComposeMail #37204
                                Axwald
                                Teilnehmer

                                  Hallo Oliver,

                                  wie schon woanders bemerkt, ein mobiler Messanger OHNE SERVER ist fast unmöglich. Deine Geräte sind nicht im selben lokalen Netzwerk (wo Du sie evtl. mittels Broadcast finden könntest), und im Internet mußt Du mit ständig wechselnden IP-Adressen rechnen (Roaming, Funkzellenwechsel etc.) – wie sollen die sich da finden?

                                  MIT SERVER hast Du 2 Möglichkeiten:

                                  1. Die Clients melden sich regelmäßig beim Server, der sich dann die IP des Clients merkt, und wie ein DNS-Server arbeitet: Wenn Du “Frieda” eine Msg schicken willst, fragt Dein Client zuerst den Server nach “Friedas” IP, mittels derer er dann versuchen kann, eine direkte Socket-Verbindung aufzubauen.
                                    Nachteil: Nur Punkt-zu-Punkt-Verbindungen, und geht auch nur, solange “Frieda” eine eigene, öffentliche IP hat, UND solange der ISP das auch zulässt. WLAN-Verbindungen funktionieren (wegen NAT) grundsätzlich nicht, wenn Du nicht überall Port-Weiterleitungen einrichten kannst.
                                    Vorteil: Sicher & praktisch verzögerungsfrei.
                                    Bemerkung: Das ist praktisch DynDNS, sollte also sogar mit einem freien DynDNS-Server (= ohne eigenen Server) funktionieren – aber die Chancen, daß “Frieda” tatsächlich von außen via Sockets erreichbar ist, dürfte gegen Null gehen. Zumindest in der DE-Realität.
                                  2. Die Clients melden sich regelmäßig bei einem Server,und holen ggf. vorliegende Msgs ab. Wenn Du “Frieda” eine Msg schicken willst, wirft Dein Client die einfach auf den Server.
                                    Nachteil: Serverseitig recht aufwenig, und: die Sicherheit hängt von der Serverprogrammierung & -Administration ab. Verzögerungen durch die Wartezeit bis zum nächsten “nach Post gucken”.
                                    Vorteil: Das läßt sich mit einfachem Http(s) realisieren (GET, POST) und sollte damit immer & überall funktionieren.

                                  Du siehst, das ist nicht so einfach.

                                  Falls Du Dich doch für Methode 1 interessierst, google nach “Livecode socket server”. Da gibt es einige vergleichsweise einfache Implementationen: Setze einen eigenen Socket-Server auf Deinem Gerät auf, das mit Deinem Socket-Client ebenda reden kann. Wenn das (mit der lokalen IP) funktioniert, freie DynDNS-Server gibt es genug – schau Dir an, wann es übers Internet geht, und wann nicht.
                                  Solltest Du das weiter verfolgen wollenn und über einen eigenen Server verfügen, mach Dich mal zu “http tunneling” schlau – damit könnte man evtl. die besprochenen Probleme umgehen 😉

                                  Bei Methode 2 – da kannst Du möglicherweise auch eine bestehende Messenger-Infrastruktur nutzen & nur Deinen eigenen Client schreiben, der dann via API mit dem Server spricht. Ist jetzt nicht so mein Thema, aber da sollte es einiges an Anbietern geben.

                                  Viel Spaß!

                                Ansicht von 15 Beiträgen - 1 bis 15 (von insgesamt 89)