Startseite › Foren › Deutsches LiveCode-Forum › csv in sqlite importieren
- Dieses Thema hat 16 Antworten und 3 Teilnehmer, und wurde zuletzt aktualisiert vor 4 Jahren, 3 Monaten von foto2004.
-
AutorBeiträge
-
-
August 28, 2020 um 17:34 Uhr #22488
Hallo gemeine. wie bringe ich csv Datei in eine SQLite DB rein?
Eine CSV in ein DataGrid reinzubringen ist ja nicht schwer aber bei der SQLite beißt es bei mir aus.
-
August 28, 2020 um 17:53 Uhr #22490
Wie gut sind Deine Kenntniss in SQL? 😎
-
August 29, 2020 um 06:10 Uhr #22503
naja bin jetzt kein Experte aber habe schon Einges mit mySQL und früher mit MS SQL gemacht.
Ist jetzt nicht so dass ich alles auswendig weiß.
ich vermute dass ich die CSV in ein Array packen muss und danach Zeile für Zeile in die DB reinschieben muss? Oder?
-
August 29, 2020 um 10:21 Uhr #22504
ich scheitere genau an der SQL Übergabe:
on mouseUp answer file "Bitte eine CSV-Datei zum Import auswählen" with type "comma Separated Values|csv|CSV" if the result = "cancel" then exit mouseup end if put it into tFileName ## Inhalt der Datei in Variable (tCSV) lesen put URL ("file:" & tFileName) into tCSV delete line 1 of tCSV --replace ";" with tap in tCSV ## egal was ich da umstelle immer meckert er mir das an ... put tCSV repeat for each line tLine in tCSV put "INSERT INTO ladelist(versandstell,ladenummer,ziel) VALUES(null," & tLine & ")" into tSQL revExecuteSQL connID, tSQL --> EXECUTE SQL if the result is not empty then answer warning the result exit mouseUp end if end repeat
meine csv:
4310;93374;MCSyncro Bratislava s r.o.;80355230;LR00036000;40;640 4310;93374;;;;40;640 4310;93362;Leadec Industrial Services Ltd;80355194;JA00021000;20;320 4310;93362;Leadec Industrial Services Ltd;80355195;JA00021003;18;288
-
August 29, 2020 um 10:49 Uhr #22505
so jetzt geht die Übergabe Abe immer nur die erste Zeile
global programmPfad, dataPfad, connID, on mouseUp answer file "Bitte eine CSV-Datei zum Import auswählen" with type "comma Separated Values|csv|CSV" if the result = "cancel" then exit mouseup end if put it into tFileName ## Inhalt der Datei in Variable (tCSV) lesen put URL ("file:" & tFileName) into tCSV delete line 1 of tCSV replace ";" with "' , '" in tCSV sqlCon repeat for each line tLine in tCSV put "INSERT INTO ladelist(id,versandstelle,ladenummer,ziel) VALUES(null,'" & tLine & "')" into tSQL revExecuteSQL connID, tSQL --> EXECUTE SQL if the result is not empty then answer warning the result exit mouseUp end if end repeat put tCSV end mouseUp
meine CSV nach dem ersetzen der Trenner:
4310' , '93374' , 'MCSyncro Bratislava s r.o. 4310' , '93374' , ' 4310' , '93362' , 'Leadec Industrial Services Ltd 4310' , '93362' , 'Leadec Industrial Services Ltd 4310' , '93362' , ' 4310' , '93352' , 'ZENDA Dienstleitungen GmbH 4310' , '93352' , 'ZENDA Dienstleitungen GmbH 4310' , '93352' , '
-
August 29, 2020 um 11:19 Uhr #22506
Ich habe es gelöst.
ich habe einfach das mit dem result aus dem repeat rausgeschmissen.ist ja logisch, result bringt immer was daher und somit ist er mir natürlich bei „exit mouseup“ ausgestiegen.
-
August 29, 2020 um 12:26 Uhr #22507
Moin, moin,
das hast Du ja geschickt gelöst, Chapeau! 🙂
Hier noch ein paar Sachen:
Der zuerst von Dir gewünschte Itemdelimiter heisst -> TAB (von TABulator)
LC ist hier bei weitem nicht so nachsichtig wie unsere Ohren!
Bitte achte immer auf den Text im Skripteditor:
Alle „reservierten“ Keywords (somit auch tab) werden dort eingefärbt und somit
war dein TAP sicher noch in schwarz zu sehen.Deine erste CSV hatte acht Felder pro Zeile, nach Deinem ersetzen der Trenner aber
nur noch DREI pro Zeile!? Das kann ja nun nicht sein, was hast Du uns verschwiegen? 😀Abgesehen von Deiner cleveren Lösung, bräuchten wir aber nichts zu ersetzen, denn wir
können ja einfach -> set the itemdel to „;“
und dann mit den einzelnen ITEMS pro Zeile arbeiten.Gruß
Klaus
P.S.
Ich habe auch nur rudimentäre SQL Kenntnisse, weiß aber, wo ich bei Bedarf nachsehen kann,
was ich auch immer mache, wenn ich mit Datenbanken zu tun habe:
https://www.w3schools.com/sql/default.asp -
August 29, 2020 um 14:16 Uhr #22509
Hallo Klaus,
danke für dein Lob, das geht runter wie Öl 😉
nun ich habe mit replace gearbeitet weil SQLite unbedingt das so haben möchte ‚text1‘ , ‚text2‘, ‚text3‘
zumindest funkt es so.
das ist mein fertiger code:
on mouseUp answer file "Bitte eine CSV-Datei zum Import auswählen" with type "comma Separated Values|csv|CSV" if the result = "cancel" then exit mouseup end if put it into tFileName ## Inhalt der Datei in Variable (tCSV) lesen put URL ("file:" & tFileName) into tCSV delete line 1 of tCSV replace ";" with "' , '" in tCSV sqlCon repeat for each line tLine in tCSV put "INSERT INTO ladelist(versandstelle,ladenummer,ziel,lief,material,stck,menge) VALUES('" & tLine & "')" into tSQL revExecuteSQL connID, tSQL --> EXECUTE SQL end repeat if the result <> EMPTY then if the result <> 1 then answer the result else answer "Datensatz eingetragen!" end if end if revCloseDatabase connID end mouseUp
ach ja das mit den tab – tap naja na hat wieder mal voll der Legastheniker in mir zugeschlagen
Nur das mit den einzelnen ITEMS pro Zeile verstehe ich jetzt nicht ganz wie du das meinst.
Grüße aus Bayern
Immanuel
-
August 29, 2020 um 14:25 Uhr #22510
Dein erstes CSV:
4310;93374;MCSyncro Bratislava s r.o.;80355230;LR00036000;40;640
4310;93374;;;;40;640
4310;93362;Leadec Industrial Services Ltd;80355194;JA00021000;20;320
4310;93362;Leadec Industrial Services Ltd;80355195;JA00021003;18;288Der Feldtrenner (itemdelimiter) ist hier Semikolon und das ergibt 7 (nicht 8, sorry) items pro Zeile.
Aber in Deinem letzten Skript hast Du ja alle sieben „Felder“ berücksichtigt.
In Deinem ersten allerdings nur vier davon -> (id,versandstelle,ladenummer,ziel)Das hatte mich etwas stutzig gemacht. 🙂
-
August 29, 2020 um 15:01 Uhr #22512
ja das habe ich bemerkt dass er mir das anmeckert. aber habs je geändert.
Ich habe irgendwann mal gelesen wie man das macht eine Tab getrennte Zeile in ein array zu packen kann es aber nicht mer finden
Möchte natürlich bestimmte Daten wieder suchen und komme soweit dass ich mir eine Zeile rauslesen kann die so aussieht:
89 4300 93334 Gundlach Graz Automotive Solutions 80355121 BM00297000 1 35
ist einfach eine SQL ausgabe aber wie bekomme ich diese Zeile in ein Array damit ich einzelne Felder füllen kann.
-
August 29, 2020 um 15:19 Uhr #22513
Hi Immanuel,
angenommen, die Reihenfolge der Daten hier:
89 4300 93334 Gundlach Graz Automotive Solutions 80355121 BM00297000 1 35
ist identisch mit der Reihenfolge der Felder in der Datenbank:
versandstelle,ladenummer,ziel,lief,material,stck,mengeIch hoffe, die Spalten Deines Datagrids heissen auch so, sonst klappt das hier nicht:
... ## tData enthält die obengenannten Daten! ## Wir arbeiten mit REPEAT FOR EACH, daher müssen wir einen ## eigenen Timer zur Party mitbringen put 0 into tCounter put "versandstelle,ladenummer,ziel,lief,material,stck,menge" into dieKeys ## Siehe unten, daher ist das nötig replace "," with TAB in dieKeys ## Default Feldtrenner: set itemdel to TAB repeat for each item derKey in dieKeys add 1 to tCounter put item tCounter of tData into tArray[derKey] end repeat ## Falls Du diese Daten an ein bestehendes Datagrid anhängen möchtest: ## dispatch "addData" to grp "Dein Datagrid hier" with tArray ...
Gruß
Klaus
-
August 29, 2020 um 15:29 Uhr #22515
Danke Klaus,
habe es gerade selber wieder gefunden. Ich glaube ich mach mal eine Pause, sitze seit 4:00 wieder daran.
LG Immanuel
-
August 29, 2020 um 15:36 Uhr #22516
Ich glaube ich mach mal eine Pause, sitze seit 4:00 wieder daran.
Klingt nach einer guten Idee! 😀
-
August 30, 2020 um 20:09 Uhr #22549
Hallo,
zum INSERT: Es ist nicht notwendig (aber elend langsam …) das mit einem ‚repeat‘ zu machen. Nimm einfach das ganze CSV, bringe es in eine passende Form, und schiebe es auf einmal in die Datenbank:put fld data_fld into myData replace ";" with tab in myData set itemdel to tab repeat for each line L in myData put "(" into myLine repeat for each item I in L put "'" & I & "'" & comma after myLine end repeat put ")," into char -1 of myLine put myLine & CR after myNewVar end repeat delete char -2 to -1 of myNewVar put "INSERT INTO ladelist(versandstelle,ladenummer,ziel,lief,material,stck,menge) VALUES " & myNewVar & ";" into tSQL
Ich habe in ‚fld data_fld‘ die Daten aus Post #22504, und erhalte ein schönes, schnelles, valides SQL-Statement:
INSERT INTO ladelist(versandstelle,ladenummer,ziel,lief,material,stck,menge) VALUES ('4310','93374','MCSyncro Bratislava s r.o.','80355230','LR00036000','40','640'), ('4310','93374','','','','40','640'), ('4310','93362','Leadec Industrial Services Ltd','80355194','JA00021000','20','320'), ('4310','93362','Leadec Industrial Services Ltd','80355195','JA00021003','18','288');
Bingo. Viel Spaß!
-
August 30, 2020 um 21:15 Uhr #22551
Oh, ich hatte keine Ahnung, daß man mehrere Datensätze durch Komma getrennt und wie hier in Klammern bei INSERT INTO als Parameter anfügen kann, das hat mir die w3School verschwiegen! 🙂
https://www.w3schools.com/sql/sql_insert.aspDanke für den Hinweis!
-
August 31, 2020 um 09:16 Uhr #22557
Danke ich werde es mir mal genauer anschauen. Für diese Anwendung ist es zwar nicht so wichtig dass es sehr performant sein muss aber für andere Projekte macht es doch einen großen Unterschied
LG Immanuel
-
August 31, 2020 um 13:01 Uhr #22558
Wow gerade ausprobiert. ist um einiges schneller. Axwald danke für den Tip und dem Codeschnipsel.
LG Immanuel
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.