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

C# .NET .NET (C# a Visual Basic) chyba VB při použití příkazu INTO OUTFILE ... generování CSV souboru (sestavy) z DB American English version English version

Avatar
Libor Mašlán:

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. května 9:38
Avatar
Odpovídá na Libor Mašlán
Michal Štěpánek:

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. května 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:

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. května 9:53
Avatar
Odpovídá na Libor Mašlán
Michal Štěpánek:

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  +1 19. května 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čí
Redaktor
Avatar
Marek Kočí:

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. května 11:43
 
Nahoru Odpovědět  +1 19. května 11:41
Avatar
Libor Mašlán:

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. května 14:24
Avatar
Odpovídá na Marek Kočí
Libor Mašlán:

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. května 14:25
Avatar
Odpovídá na Libor Mašlán
Michal Štěpánek:

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. května 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čí
Redaktor
Avatar
Marek Kočí:

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. května 9:48
 
Nahoru Odpovědět 23. května 9:47
Avatar
Odpovídá na Marek Kočí
Libor Mašlán:

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. května 16:28
Avatar
Marek Kočí
Redaktor
Avatar
Odpovídá na Libor Mašlán
Marek Kočí:

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. května 16:32
Avatar
Odpovídá na Libor Mašlán
Michal Štěpánek:

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

Nahoru Odpovědět 23. května 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čí
Redaktor
Avatar
Odpovídá na Michal Štěpánek
Marek Kočí:

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

 
Nahoru Odpovědět 23. května 16:48
Avatar
Marek Kočí
Redaktor
Avatar
Marek Kočí:

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. května 16:54
Avatar
Odpovídá na Marek Kočí
Michal Štěpánek:

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. května 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.