IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: chyba VB při použití příkazu INTO OUTFILE ... generování CSV souboru (sestavy) z DB

Aktivity
Avatar
Libor Mašlán:16.5.2016 9:38

Dobrý den,

i přesto, že se úplně za programátora nepovažuji :) vytvořil jsem do práce prográmek na objednávání - evidenci obědů. Vytváří i potřebné sestavy, ale narazil jsem na menší problém ... Tvorba sestav probíhá do výstupního souboru *.XLS pomocí příkazu SELECT INTO .... Nyní však kolegzně přišla s tím, že by potřebovali, aby byl vytvářen soubor CSV , který bude následně načten do programu na výpočet mezd, aby mohla být "projedená" částka za měsíc každému prac. ihned odečtena. A po marných pokusech mám tento problém. ačkoliv vytváření XLS souboru probíha v pohodě, nemůžu odhalit chybu v kódu, kdy generuji CSV soubor :(

Používám příkaz INTO OUTFILE ...

kod:

dbs.Execute "SELECT val(right(login­.login,6)) as oec, count(volba) As pocet_obedu, pocet_obedu * " & gsCesta_c & " as celkova_castka, prijmeni, jmeno FROM objednavky inner join Login ON objednavky.login = login.login WHERE (MONTH(den)= '" & mesic & "' and YEAR(den)= '" & kdy3 & "') group by login.login, prijmeni,jmeno order by prijmeni INTO OUTFILE 'I:\obedy\ses­tavy\sestava.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' ;"

a následná chyba :

Run time error 3075, viz. příloha

Předpokládám, že ta chyba je tam kvůli těm apostrofům, kdy se pak část kodu (zbytek) tváří jako "REM" tedy nějaká moje poznámka, ale nemůžu přijít na to, jak to "zfunkčnit"

díky všem za jakoukoliv radu či postřeh !!!!!

Libor mašlán Svitavy

mail: lmaslan@seznam.cz

 
Odpovědět
16.5.2016 9:38
Avatar
Odpovídá na Libor Mašlán
Michal Štěpánek:16.5.2016 10:25

Psal jsem ti i na dotnetportal.cz, přepiš to do .NET a ulehčíš si život, protože budeš mít k dispozici spustu nástrojů na to, co chceš udělat...

Nahoru Odpovědět
16.5.2016 10:25
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Libor Mašlán:19.5.2016 9:53

no .NET vůbec nepoužívám a ni jsem v něm nikdy nedělal, proto by pro mě bylo rychlejší, přepsat správně kod ve VB a už bych se \tím nemusel "nikdy" :) zabývat .... :) L.

 
Nahoru Odpovědět
19.5.2016 9:53
Avatar
Odpovídá na Libor Mašlán
Michal Štěpánek:19.5.2016 10:02

To slovo "nikdy" je dost zavádějící, protože stačí, aby se něco změnilo ve vstupních datech, nebo někdo chtěl něco navíc (jako právě řešíš teď) a problém je na světě... Když se koukneš tady do tutoriálů, zjistíš, že to zase až tak složité není a možnost později program doplnit či rozšířit je k NEZAPLACENÍ... 8-)

Nahoru Odpovědět
19.5.2016 10:02
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Marek Kočí
Tvůrce
Avatar
Marek Kočí:19.5.2016 11:41

INTO musí být před FROM

dbs.Execute"SELECT val(right(login.login,6)) as oec,
   count(volba) As pocet_obedu,
   pocet_obedu * " & gsCesta_c & " as celkova_castka,
   prijmeni,
   jmeno
   INTO OUTFILE 'I:\obedy\sestavy\sestava.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
   FROM objednavky
     inner join Login ON objednavky.login = login.login WHERE (MONTH(den)= '" & mesic & "' and YEAR(den)= '" & kdy3 & "')
     group by login.login, prijmeni,jmeno order by prijmeni;"

Nevím kde a v čem to píšeš, ale je to čuňárna ;)

Editováno 19.5.2016 11:43
 
Nahoru Odpovědět
19.5.2016 11:41
Avatar
Libor Mašlán:20.5.2016 14:24

Díky za odpověď. no čuňárna to asi je, jak jsem říkal, za čistokrevného programátora se úplně nepovažuju ...
Nicméně, kod píšu přímo do okna v projektu VB, respektive do kodu, v tomto případě, command tlačítka (clic).
Když tam kod zapíši, vypadá to následovně a VB vlastně ještě před kompilací barevně vyznačí kod takto, viz. příloha a v tom mám právě tu potíž. protože tu "zelenou" část považuje program za "poznámku" a před kompilací vypíše chybu ... za normálních okolností se text "neprobarví" a program se spustí ...

zkoušel jsem i _& jako pokračování kodu na dalším řádku, ale také to nepomohlo, ani při zadání kodu do jednoho řádku, ty apostrofy tam prostě "zlobí" ...

díky

 
Nahoru Odpovědět
20.5.2016 14:24
Avatar
Odpovídá na Marek Kočí
Libor Mašlán:20.5.2016 14:25

Díky za odpověď. no čuňárna to asi je, jak jsem říkal, za čistokrevného programátora se úplně nepovažuju ...
Nicméně, kod píšu přímo do okna v projektu VB, respektive do kodu, v tomto případě, command tlačítka (clic).
Když tam kod zapíši, vypadá to následovně a VB vlastně ještě před kompilací barevně vyznačí kod takto, viz. příloha a v tom mám právě tu potíž. protože tu "zelenou" část považuje program za "poznámku" a před kompilací vypíše chybu ... za normálních okolností se text "neprobarví" a program se spustí ...

zkoušel jsem i _& jako pokračování kodu na dalším řádku, ale také to nepomohlo, ani při zadání kodu do jednoho řádku, ty apostrofy tam prostě "zlobí" ...

díky

 
Nahoru Odpovědět
20.5.2016 14:25
Avatar
Odpovídá na Libor Mašlán
Michal Štěpánek:20.5.2016 23:38

To je přeci logické Visual Basic považuje apostrof jako začátek poznámky, zkusil bych si tu cestu udělat jako proměnnou (nějaký string)

Nahoru Odpovědět
20.5.2016 23:38
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Marek Kočí
Tvůrce
Avatar
Marek Kočí:23.5.2016 9:47

Zkus to takto:

sSQL =  "SELECT val(right(login.login,6)) as oec," & _
        "count(volba) As pocet_obedu," & _
        "pocet_obedu * " & gsCesta_c & " as celkova_castka," & _
        "prijmeni, jmeno" & _
        " INTO OUTFILE 'I:\obedy\sestavy\sestava.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'" & _
        " FROM objednavky" & _
        "inner join Login ON objednavky.login = login.login WHERE (MONTH(den)= '" & mesic & "' and YEAR(den)= '" & kdy3 & "')" & _
        "group by login.login, prijmeni,jmeno order by prijmeni;"
dbs.Execute sSQL
Editováno 23.5.2016 9:48
 
Nahoru Odpovědět
23.5.2016 9:47
Avatar
Odpovídá na Marek Kočí
Libor Mašlán:23.5.2016 16:28

Marku, díky za radu, teď už to vypadá o poznání lépe, tedy vyřešil jsi problém s apostrofem. po deklaraci proměně jako string (public sSQL as string) se mi ale objevila chyba, ze které moc moudrý nejsem, nehodlám dokola "otravovat", spoustu podobných chyb jsem při vytváření programu opravil, ale ... :)

 
Nahoru Odpovědět
23.5.2016 16:28
Avatar
Marek Kočí
Tvůrce
Avatar
Odpovídá na Libor Mašlán
Marek Kočí:23.5.2016 16:32

Zkusil bych si pomocí MSGBOX vypsat co ti vlastně do té proměnné jde.
Možná bylo správně to tvé staré umístění INNER ale je to proti SQL syntaxi :)

 
Nahoru Odpovědět
23.5.2016 16:32
Avatar
Odpovídá na Libor Mašlán
Michal Štěpánek:23.5.2016 16:35

Zkus zrušit všechny ty " & _ na koncích řádků, ono si to VS odřádkuje samo...

Nahoru Odpovědět
23.5.2016 16:35
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Marek Kočí
Tvůrce
Avatar
Odpovídá na Michal Štěpánek
Marek Kočí:23.5.2016 16:48

No nanejvýš to podtržítko ten amp je tam kvůli spojování řetězců ;)

 
Nahoru Odpovědět
23.5.2016 16:48
Avatar
Marek Kočí
Tvůrce
Avatar
Marek Kočí:23.5.2016 16:54

Už jsem to asi našel :)
Šlo o mezeru před inner a když dáš před každý řádek mezeru nic tím nezkazíš :)

sSQL =  "SELECT val(right(login.login,6)) as oec," & _
        "count(volba) As pocet_obedu," & _
        "pocet_obedu * " & gsCesta_c & " as celkova_castka," & _
        "prijmeni, jmeno" & _
        " INTO OUTFILE 'I:\obedy\sestavy\sestava.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'" & _
        " FROM objednavky" & _
        " inner join Login ON objednavky.login = login.login WHERE (MONTH(den)= '" & mesic & "' and YEAR(den)= '" & kdy3 & "')" & _
        " group by login.login, prijmeni,jmeno order by prijmeni;"
dbs.Execute sSQL
 
Nahoru Odpovědět
23.5.2016 16:54
Avatar
Odpovídá na Marek Kočí
Michal Štěpánek:23.5.2016 17:58

Právě, že bys musel odstranit všechno - Visual Studio si to odřádkuje samo. Tím bys na tu chybu přišel hned...

Nahoru Odpovědět
23.5.2016 17:58
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 15 zpráv z 15.