German scrollview mit Daten füllen

Discussion in 'German Forum' started by tudorf, Jul 29, 2012.

  1. tudorf

    tudorf Active Member Licensed User

    Hallo
    Ich habe im Designer ein Scrollview erstellt und möchte den Inhalt einer Datei komplett zuweisen. Ich habe keine Ahnung von SQL. Ich verstehe nicht wie ich an die Daten komme. Wie komme ich an die Daten über die DBUtil? Auch bei DBUtil ist immer nur die Rede von SQL. Gibt es eine Möglichkeit ohne SQL eine einfache Datei zu bearbeiten? Die Tutorial und die Beispielprogramme habe ich durchgeschaut aber verstehe nur Bahnhof.
    Danke Tudorf
     
  2. cmweb

    cmweb Active Member Licensed User

    Um was für eine Datei geht es denn?

    Wie sieht deren Inhalt aus?

    SQL benötigst Du nur für Datenbanken.

    Herzliche Grüße

    Carsten

    Gesendet von meinem GT-N7000 mit Tapatalk 2
     
  3. tudorf

    tudorf Active Member Licensed User

    Hallo Carsten
    Ich möchte in einer Datei Daten zum Geocachen speichern. Also Textfelder (GC-Code, Längen- und Breitengrad, Bescheibung und Hinweis) natürlich mit gültigen Feldnamen. Die Datei wird später evtl mal 20 Datensätze haben. Ich finde aber das auch eine Datei mit evtl 50 oder 100 Datensätze nicht sehr groß ist. Hinzu kommt noch ein Feld im Scrollview das sich beim Aufruf berechnet. Die Entfernung zwischen den gespeicherten Koordinaten und meiner aktuellen Position. Idelaerweise aufsteigend sortiert. Für so eine kleine Datei SQL einzusetzen ist für mich als wenn man mit Kanonen auf Spätzen schiesst.

    Ich arbeite seit über 30 jahren mit Datenbanken ohne SQL zu vermissen. Die gesamte Firmensoftware bei uns ist von mir. Mit etlichen Dateien und etlichen tausend Datensätzen in den Dateien. Am liebsten sind mir kleine Dateien z.B. im dbase-Format. Wenn ich so einen Datenbankteiber einbinden könnte hätte ich später mal die Möglichkeit direkt auf meine Firmendaten zuzugreifen. Aber das ist z.Z. nicht gplant.

    Es gibt hier im Forum viele tolle Beispiele. Sie zeigen alle was alles machbar ist. Alles ist Codemäßig optimiert und so überladen dass ich den Kern nicht sehe oder verstehe.

    Wahrscheinlich liegt es bei mir am Alter. In meiner Schulzeit gab es keine Computer. Alles habe ich mir selber beigebracht. Ich bin nur Hobbyprogrammierer. Englischunterricht hatte ich bis 1975 und brauche auch kein Englisch. Deshalb sind mir die englischsprachigen Unterlagen keine große Hilfe.

    Ich hoffe, das mir keine meine blöden Fragen übel nimmt.

    MfG Tudorf
     
  4. cmweb

    cmweb Active Member Licensed User

    Hi,

    Sind die Daten dann kommasepariert, also CSV?

    Dann einfach mit file.readlist die Datei einlesen und die Liste dann in einer for-next-Schleife abarbeiten, Zeile für Zeile die Daten extrahieren und weiter verarbeiten...

    Herzliche Grüße

    Carsten

    Gesendet von meinem GT-N7000 mit Tapatalk 2
     
  5. tudorf

    tudorf Active Member Licensed User

    Hallo Carsten
    Eine CSV-Datei ist ungünstig. Da es sich um Freie Eingabetexte handelt können auch Komma vorkommen.

    Ich weiß das das dbase-Format uralt ist. Aber man kann so einfach auf einzelne Datensätze gehen und einzelne Felder lesen und schreiben. Text, Numerisch, Datum, Logisch sogar BLOB war da schon möglich. Ich trauere dem auch nicht hinterher nur SQL verstehe ich nicht.

    Ich wollte mit folgenden Code versuchen an die Inhalte zu kommen. GCcode, infotext sind Felder in meiner SQL-Datenbank. Erstellt mit SQ-Light.

    Sub Activity_Create(FirstTime As Boolean)
    If File.Exists(DBFileDir, DBFileName) = False Then
    If FirstTime Then
    File.Copy(File.DirAssets, DBFileName, DBFileDir, DBFileName)
    SQL1.Initialize(DBFileDir, DBFileName, True)
    End If
    Else
    If FirstTime Then
    SQL1.Initialize(DBFileDir, DBFileName, True)
    End If
    End If
    Dim Cursor As Cursor
    Cursor = SQL1.ExecQuery("SELECT GCcode, infotext FROM table1")
    For i = 0 To Cursor.RowCount - 1
    Cursor.Position = i
    Log(Cursor.GetString("GCcode"))
    Log(Cursor.GetInt("infotext"))
    Next
    Cursor.Close
    End Sub

    Leider wird auf meinem Rechnet unter dem Emulator die Datenbank nicht gefunden. Wenn ich zuhause arbeite ist mein S3 über WLan angeschlossen und ich arbeite mit der Bridge. In der Firma habe ich kein WLan. Daher der Emulator.

    Die Variablen File.DirRootExternal und File.DirInternal weisen auf Verzeichnisse auf dem Handy hin. Bei der Zuwesiung von
    DBFileDir = "Basic4Android\Wagner\Files" und
    DBTableName = "mystery" ergibt der Aufruf " File Not found."

    Ich habe auch kein Beispiel gefunden wo ein Verzeichnis vorgegeben wurde oder das Prgramm auf eine datenbank zugreift. Selbst das Beispiel DBUtils erstellt eine Datei und füllt diese per Programm mit Beispieldaten. Für eine Demo ist das OK, hat aber mit einer späteren Anwendung nicht gemeinsam.

    Wie kann ich auf eine Datenbank unter dem Emulator zugreifen ?

    Gruß Martin
     
  6. cmweb

    cmweb Active Member Licensed User

    Ich kann Dir irgendwie nicht folgen.

    SQL verstehst Du nicht, hast aber eine SQL Datenbank?

    dBase kenne ich wiederum nicht so gut. Ob man per Basic4Android dBase Datenbanken nutzen kann, weiß ich nicht...

    Herzliche Grüße

    Carsten

    Gesendet von meinem GT-N7000 mit Tapatalk 2
     
  7. tudorf

    tudorf Active Member Licensed User

    Hallo Carsten

    Mein ursprüngliche Frage war, obe eine Alternative Datei zu SQL gibt.

    - CSV halte ich für unglücklich. Man könnte zwar komma im Text separieren und durch einen andern Platzhalter ersetzen und später das selbe wieder rückwärts. Halte ich aber für eine Notlösung
    - Ein Dateiformat wie dbase schein es nicht zu geben. Also ein einfaches Format das Aussieht wie in Excel, Die Auifsteigenden Zahlen sind die Sätze und die Spalten a b usw. sind die Feldnamen (die man ja auch umbenennen kann). Dann kann dan mit einfachen Befehlen goto(satz), get(Inhalt_von_feld_a), put(Inhalt_von_feld_a,neuer_inhalt) auf alle Inhalte zugreifen.
    - SQL. Nun da werde ich mich wohl mit beschäftigen müssen.

    andere Alternativen habe ich nicht gefunden.

    Trotzdem danke
    Martin
     
  8. tudorf

    tudorf Active Member Licensed User

    Hallo
    Ich kann nun über SQL auf die Daten zugreifen. Zumindest werden die Daten über Log(Cursor.GetString("GCcode")) ausgegeben.

    Leider ist mein Scrollview leer. Mein Programm habe ich mal angehängt.

    Danke für eine kurzfristge Hilfe.
    MfG Martin
     

    Attached Files:

  9. cmweb

    cmweb Active Member Licensed User

    Kann ich leider nicht testen, weil die Datenbank fehlt...

    Herzliche Grüße

    Carsten
     
  10. tudorf

    tudorf Active Member Licensed User

    Sorry. Anbei die Zip mit Datenbank.
    MfG Martin
     

    Attached Files:

  11. cmweb

    cmweb Active Member Licensed User

    In dieser Zeile

    Code:
    ScvGC.Panel.AddView(l, TotalColumnWidth(i), RowHeight * NumberOfRows, _
          ColumnWidth_1(i), RowHeight_1)
    sind TotalColumnWidth(i) sowie ColumnWidth_1(i) jeweils 0.

    Dementsprechend sind zwar Deine Labels gefüllt, aber sie sind halt 0 dpi breit, ergo nicht sichtbar.

    Herzliche Grüße

    Carsten
     
  12. klaus

    klaus Expert Licensed User

    Wie schon von cmweb erwähnt fehlt die Rechnung der TotalColumnWidth(i) sowie ColumnWidth_1(i) Werte.
    Damit zwischen den Labels Linien angezeigt werden werden die Labels um die Liniendicke ColLoneWidth verschoben.
    ColumnWidth entspricht der Spaltenbreite
    ColumnWidth_1 entspricht der Labelbreite (Spaltenbreite minus Linienbreite)
    TotalColumnWidth entspricht der Linkskoordinate der Labels oder auch der kumulierten Spaltenbreite.

    Beiliegend findest Du eine geänderte Version des Programms mit obiger Änderung.
    Habe auch die Kopfzeile und einen Schieber zum waagrechten verschieben der ScrollView zugefügt.

    Beste Grüsse.
     

    Attached Files:

  13. tudorf

    tudorf Active Member Licensed User

    Danke an euch beiden. Auf der Basis mache ich mal weiter.
    MfG Martin
     
  14. tudorf

    tudorf Active Member Licensed User

    Hallo
    Ich habe nochmal ein Verständnisproblem.

    Ich möchte eine selectierte Zeile ändern. Dafür habe ich ein neues Activity "Edit" mit Edittexten angelegt. Nach drücken auf den Button"save" sollen die neuen daten gespeichert und zum Hauptfenster "Main" zurückgekehrt werden.

    Nun habe ich 2 Fragen.
    - Obwohl im Activity "Main" Variablen unter Process_Globals definiert sind kennt das Activity "Edit" diese nicht. z.B. SQL, DBTableName usw. Warum ?

    - Beim Speichern ist das Edittext nicht definiert obwohl die DIM Anzeigung an unterschiedlichen Stellen eingefügt wurde.

    Ist dieser Aufbau mit einzelnen Activitys falsch oder ungünstig? Das Beispiel SQLSample hat mehrer Layouts und brint das aktuelle immer nach oben.

    Martin
     

    Attached Files:

    Last edited: Aug 2, 2012
  15. cmweb

    cmweb Active Member Licensed User

    Zur ersten Frage.

    Die Variable SQL muss von der anderen Activity aus mit Main.SQL angesprochen werden.

    Die zweite Frage verstehe ich ad hoc nicht...

    Herzliche Grüße

    Carsten

    Gesendet von meinem GT-N7000 mit Tapatalk 2
     
  16. klaus

    klaus Expert Licensed User

    Du musst die Variabledefinitionen in Edit.Process_Globals raus nehmen, doppelte Definition !
    Dann musst Du im anderen Activitymodul den Process globalen Variablen das Prefix Main. vorsetzen:
    Code:
    Sub btnSave_Click
        
    Dim txt As String

        
    Msgbox(EditGCcode.Text,"aufruf")
        
        txt=
    "UPDATE "& Main.DBTableName&" Set "& Main.ColumnName(1) &" = '" & EditGCcode.Text
        
        Main.SQL1.ExecNonQuery(txt)    

        
    Activity.Finish

    End Sub
    Dim EditGCcode As EditText muss aus obiger Routine auch raus, doppelte Definition !
    In der Edit Layoutdatei musst du den EditText View Namen auf EditGCcode setzten und nicht EditText1 und nicht nur den EventName !
    Du darfst nur einen Eintrag ändern, den mit dem ID des selektierten Eintrages, in Deinem Code werden ALLE Einträge mit dem gleichen Wert geändert !
    Beiliegend eine neue Version mit noch einigen anderen Änderungen.

    Beste Grüsse.
     

    Attached Files:

  17. tudorf

    tudorf Active Member Licensed User

    Danke für die Antwort.

    Die doppte Definition war klar. Ich wußte mir nur nicht anders zu helfen.

    Danke Martin
     
  18. tudorf

    tudorf Active Member Licensed User

    Ich habe die SQL-Datei geändert und die ColumnName und ColumnWidth angepasst. In der Exportierten SCV-Datei sind die neuen Felder vorhanden. B4A kennt sie aber nicht.

    Kann ich unter dem Debugger die Datenbank ansehen ? Wo liegt das Problem ?

    Martin
     

    Attached Files:

  19. klaus

    klaus Expert Licensed User

    Was hast Du geändert die zip Datei in Deinem letzten Post ist genau die gleiche wie in Post 14 ?

    Beste Grüsse.
     
  20. tudorf

    tudorf Active Member Licensed User

    Anbei nochmal die neue Datei von heute morgen.
    Das Auslesen der Daten erfolgt über ein Array. Das habe ich wie folgt geändert.

    Dim NumberOfColumns As Int : NumberOfColumns = 9
    Dim ColumnName(NumberOfColumns) As String
    ColumnName(0) = "ID"
    ColumnName(1) = "GCcode"
    ColumnName(2) = "infotext"
    ColumnName(3) = "laenge"
    ColumnName(4) = "breite"
    ColumnName(5) = "norda"
    ColumnName(6) = "nordb"
    ColumnName(7) = "osta"
    ColumnName(8) = "ostb"
    Dim ColumnWidth(NumberOfColumns) As Int
    ColumnWidth(0) = 50dip
    ColumnWidth(1) = 100dip
    ColumnWidth(2) = 100dip
    ColumnWidth(3) = 150dip
    ColumnWidth(4) = 100dip
    ColumnWidth(5) = 100dip
    ColumnWidth(6) = 100dip
    ColumnWidth(7) = 100dip
    ColumnWidth(8) = 100dip
    Weiterhin natürlich die SQL. Die neuen Felder sind auch in der SQL. Weiterhin Felder mit anderen Namen die auch nicht funktionieren. Auch die umstellung von INT auf TEXT brauche nichts.

    Weiterhin habe ich alle Mystery.db auf meiner HD gelöscht um sicher zu stellen dass ich keine falsche (alte) Datei anspreche. Verzeichnis überprüft, ist auch OK.

    Wie komme ich an die Datei unter B4A im Debugger um die Felder direkt auszulesen?
    Martin
     

    Attached Files:

Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice