Seite 2 von 2

Verfasst: 12.09.2007 22:56
von Kiffi
scholly hat geschrieben:Warum funktioniert das ohne "BEGIN TRANSACTION" und
"COMMIT", welche roherter ja empfohlen/gefordert hatte ?
BEGIN TRANSACTION und COMMIT können eingesetzt werden,
müssen aber nicht.

Transaktionen haben folgende Vorteile:

* Datenbankmanipulationen können mit einem ROLLBACK (anstelle eines
COMMITs) rückgängig gemacht werden

* Datenbankmanipulationen (Insert und Update) werden erheblich
beschleunigt. Das macht sich z.B. dann bemerkbar, wenn Du viele Daten
auf einmal in Deine Datenbank füllst (so wie Deine CSV -> DB - Aktion).

Also: Datenbankmanipulationen laufen auch ohne Transaktionen
(allerdings dann auch ohne oben genannten Vorteile).

Übrigens: Bei einem Select bringen Transaktionen goarnix. :-)

Grüße ... Kiffi

Verfasst: 12.09.2007 23:31
von scholly
so macht das Lernen Spatz :)

danke... scholly

Verfasst: 13.09.2007 13:55
von scholly
moin, moin...

:( Das war ja zu schön um wahr zu sein...
Beim Durchlauf des kompletten CSV-Files wurden alle Datensätze verschluckt, die ein " ' " ( 27, halbes Hochkomma, SHIFT #) hatten, wie z.B in Guns 'n' Roses.
Un wat nu ?

etwas hilflos... scholly

Verfasst: 13.09.2007 14:02
von Kiffi
scholly hat geschrieben:Un wat nu ?
beim Insert und Update von Feldern, die ein ' beinhalten, musst Du dieses
verdoppeln.

Code: Alles auswählen

Feld = ReplaceString(Feld, "'", "''")
Grüße ... Kiffi

Verfasst: 13.09.2007 20:19
von scholly
Gartenarbeit fertig...
Kiffis Anweisung (wär ich nie drauf gekommen) umgesetzt...
Erfolgserlebnis !

Der Abend fängt gut an ;)

bis denne... scholly

Verfasst: 13.09.2007 21:28
von Kiffi
scholly hat geschrieben:(wär ich nie drauf gekommen)
... ist aber verständlich, wenn man sich folgendes vor Augen führt:

Textfelder werden im Query bekanntermaßen mit einfachen Hochkommata
eingeschlossen:

Code: Alles auswählen

Insert Into TestTable (MeinTextFeld) Values ('IrgendEinText')
kommt nun ein Guns 'n' Roses daher, sähe das so aus:

Code: Alles auswählen

Insert Into TestTable (MeinTextFeld) Values ('Guns 'n' Roses')
für SQLite sieht das nun so aus, als ob Du 2 Texte ('Guns ' und ' Roses') in
ein Textfeld einfügen willst. Zusätzlich hängt zwischen beiden Texten noch ein
einsames n herum. Das führt unweigerlich zu Problemen.

Grüße ... Kiffi

Verfasst: 13.09.2007 23:50
von scholly
Das hatte ich über eine Debug-Zeile bemerkt, aber jetzt steht da ja

Code: Alles auswählen

Insert Into TestTable (MeinTextFeld) Values ('Guns ''n'' Roses')
wenn ich nicht irre, und so eine "Maskierung" kam mir ersma Spanisch vor, weil ich da eher in PB-Bahnen dachte :)

bis denne... scholly

Zündende Idee gesucht ;)

Verfasst: 28.09.2007 20:17
von scholly
moin, moin...

Ich bleib mal in dem Thread, weil es eigentlich immer noch um die Wandlung des .csv geht.

Nach der Wandlung habe ich ja in dem Sqlite-File einen Table mit 22 Spalten.
Nun will ich aus dem Inhalt von 4 Spalten (Medium, Genre, Artist und Owner)
je einen TreeGadget-Node mit Items (z.B. Namen der DVDs, etc) füllen.
Natürlich will ich die entsprechenden Werte nicht bei jedem Einlesen der DB ermitteln, sondern möglichst schon beim Konvertieren was machen.

Welches wäre für mich der sinnvollste Weg zum Ziel?

mDv... scholly

Re: Zündende Idee gesucht ;)

Verfasst: 29.09.2007 18:28
von Kiffi
scholly hat geschrieben:Welches wäre für mich der sinnvollste Weg zum Ziel?
nehmen wir an, Deine Haupt-Tabelle sähe so aus:

Code: Alles auswählen

ID | Titel                | Genre
---+----------------------+------
1  | Das Bourne-Ultimatum | Action
2  | Schwesterherz        | Drama
3  | Tuyas Hochzeit       | Drama
4  | Die letzte Legion    | Action
5  | Beim ersten Mal      | Komödie
dann solltest Du für 'Genre' eine Extra-Tabelle anlegen:

Code: Alles auswählen

ID | Genre
---+--------
1  | Action
2  | Komödie
3  | Drama
und in der Haupttabelle nur noch die IDs der Genre-Tabelle eintragen:

Code: Alles auswählen

ID | Titel                | Genre
---+----------------------+------
1  | Das Bourne-Ultimatum | 1
2  | Schwesterherz        | 3
3  | Tuyas Hochzeit       | 3
4  | Die letzte Legion    | 1
5  | Beim ersten Mal      | 2
Somit hast Du einen schnellen Zugriff auf die Genre-Liste, ohne die
Haupttabelle durchsuchen zu müssen.

Grüße ... Kiffi

Verfasst: 29.09.2007 19:36
von scholly
Das wäre also:

- CSV zeilenweise einlesen und
+ Zeile komplett in Table_main überführen
+ gewünschte Datenfelder (Spalten) in Arrays einlesen

- Arrays sortieren
- doppelte Einträge entfernen
- jedes Array in einen eigenen Table überführen

Was wäre denn hinterher von den beiden folgenden Möglichkeiten schneller um z.B. alle Sci-Fi-Filme ins LIG zu holen ?

- einen Table "Table_scifi" auslesen und anhand der IDs der Filme das LIG füllen
- Table_main direkt mit select * from main where genre like '%Sci-Fi%' Filtern und ins LIG überführen ?

mdv... scholly