[erledigt] CSV nach SQLite überführen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

so macht das Lernen Spatz :)

danke... scholly
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag 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
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Gartenarbeit fertig...
Kiffis Anweisung (wär ich nie drauf gekommen) umgesetzt...
Erfolgserlebnis !

Der Abend fängt gut an ;)

bis denne... scholly
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag 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
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Zündende Idee gesucht ;)

Beitrag 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
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Zündende Idee gesucht ;)

Beitrag 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
a²+b²=mc²
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag 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
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Antworten