Seite 1 von 1

SQLite

Verfasst: 27.01.2013 20:36
von Pure_Beginner
Hallo Leute,

stecke wieder einmal fest.
Habe mit Hilfe von ES Grid geschafft eine Tabelle zu erstellt.
Nun möchte ich die Daten in SQLite speichern was ziemlich unlösbar erscheint zumindest für mich. :lol:

Leider schaffe ich es nicht einmal die Monate in der richtigen Reihenfolge abzuspeichern.

Hier mein code.

Code: Alles auswählen

Procedure  Speichern()
  Protected  db_name.s = "d:\" + Str(Jahr) +".db"
  Protected  SQL.s, k.i = 0
  
  Dim Monat.s(11)                                                     ;array für monatsnamen
  Monat(0) = "Januar"
  Monat(1) = "Februar"
  Monat(2) = "März"
  Monat(3) = "April"
  Monat(4) = "Mai"
  Monat(5) = "Juni"
  Monat(6) = "Juli"
  Monat(7) = "August"
  Monat(8) = "September"
  Monat(9) = "Oktober"
  Monat(10) = "November"
  Monat(11) = "Dezember"
  
  If FileSize(db_name) <= 0
    If CreateFile(0, db_name)
      CloseFile(0)
      If OpenDatabase(#JahrDB, db_name, "", "")
        
        For  k = 0 To 11
          SQL = "CREATE TABLE " + Monat(k) 
          SQL +  "( Hier inhalt der tabelle ????????)"
          
          
          If DatabaseUpdate(#JahrDB, SQL) = #False
            Debug DatabaseError()
            End
          EndIf
        Next
      Else
        Debug DatabaseError()
        End
      
    EndIf
    
  Else
    Debug db_name + " konnte nicht erstellt werden."
    End
  EndIf
Else ; Datenbank existiert bereits und wird geöffnet.
  If OpenDatabase(#JahrDB, db_name, "", "") = #False
    Debug DatabaseError()
    End
  EndIf
EndIf
EndProcedure
wäre für Hilfe sehr Dankbar

Grüße
Christian

Re: SQLite

Verfasst: 27.01.2013 20:56
von Kiffi
hier ist der Knackpunkt:

Code: Alles auswählen

[...]
  SQL +  "( Hier inhalt der tabelle ????????)"
[...]
die Felder musst Du schon selber definieren. Wir können ja nicht wissen,
was Du speichern möchtest.

Grüße ... Kiffi

Re: SQLite

Verfasst: 27.01.2013 21:10
von Pure_Beginner
Hallo Kiffi,

der Befehl drüber funktioniert schon nicht, die Monate werden nicht in der richtigen Reihenfolge gespeichert.
Das mit dem Knackpunkt stimmt, ich müsste wohl die Anzahl der Felder und Spalten ermitteln (counten) um dann die Daten zu speichern oder ?.
Dazu brauche ich wieder eine For Next Scheife in der Schleife in der Schleife und dabei steigt mein Hirn regelmäßig aus.

bin schon am verzweifeln

Christian

Re: SQLite

Verfasst: 27.01.2013 21:14
von NicTheQuick
Du willst für jeden Monat eine eigene Tabelle erstellen und für jedes Jahr eine eigene Datenbank?

Ich würde eher vorschlagen eine einzige Datenbank für alle Kalendereinträge zu nutzen.

Re: SQLite

Verfasst: 27.01.2013 21:19
von Pure_Beginner
@NicTheQuick,
das wird unübersichtlich, weil die Monate durchnummeriert sind 1 bis 31 oder eben Monatsende.
da kommen zu oft die selben Zahlen und Einträge vor.

Christian

Re: SQLite

Verfasst: 27.01.2013 21:34
von NicTheQuick
Unübersichtlich??

Es wäre eher mal an der Zeit, dass du dich ein bisschen einliest wie man so etwas mit einer Datenbank normalerweise macht.
Um Zeiteinträge zu speichern, rechnet man sie in eine Zahl um und speichert diese dann. Meistens wird der Unix Time Stamp dafür verwendet, wie sie auch die PB-Date-Funktionen nutzen. Oder für deinen vereinfachten Fall ohne Uhrzeiten macht man es eben so:

Code: Alles auswählen

Define.i jahr, monat, tag

jahr = 2013
monat = 2
tag = 27

Define.i datum

datum = (jahr * 12 + monat - 1) * 31 + (tag - 1)

Debug datum

;Rückrechnung
tag = (datum % 31) + 1
monat = ((datum / 31) % 12) + 1
jahr = datum / (31 * 12)

Debug "Tag: " + tag + ", Monat: " + monat + ", Jahr: " + jahr
Man speichert dann nur den Wert der Variablen 'datum' in der Datenbank. So kann man sogar immer noch alles chronologisch sortiert ausgeben lassen.

Ich verstehe auch nicht, was an welcher Stelle nicht in der richtigen Reihenfolge gespeichert wird und was da unübersichtlich werden soll.

Re: SQLite

Verfasst: 27.01.2013 21:37
von Kiffi
Pure_Beginner hat geschrieben:der Befehl drüber funktioniert schon nicht
Zu einem 'Create Table' gehört die Angabe mindestens eines Feldes. Sobald
dieses angegeben wird, funktioniert auch das 'Create Table'

Und bei Tabellennamen spielen Reihenfolgen sowieso keine Rolle.
Wofür brauchst Du sowas?

Grüße ... Kiffi

Re: SQLite

Verfasst: 27.01.2013 21:51
von Pure_Beginner
Danke für eure Tipps,

@Kiffi
sollte ich die DB je mit einem Editortool öffnen, wäre es schön alles geordnet in Monaten von oben nach unten vorzufinden.
Das erleichtert das Finden von Daten zu Fuß.


Nochmals Danke
Christian

Re: SQLite

Verfasst: 27.01.2013 21:59
von Kiffi
Pure_Beginner hat geschrieben:sollte ich die DB je mit einem Editortool öffnen, wäre es schön alles geordnet in Monaten von oben nach unten vorzufinden.
wenn dieses Tool die Tabellen alphabetisch sortiert, dann kannst Du
vor den Tabellennamen ja noch die Monatszahl schreiben.

Code: Alles auswählen

"CREATE TABLE " + RSet(Str(k+1), 2, "0") + "_" + Monat(k) [...]
Grüße ... Kiffi