Naučit se PHP Naučit se PHP
Pouze tento týden až 80 % sleva na vývoj webů v PHP.
Extra 10 % bodů navíc a tričko zdarma při zadání kódu "TRIKO10"
Avatar
Mirek Šalamon:24.10.2018 1:04

Hledám cestu jak změnit SQL příkaz v TableAdapteru. Potrebuju tam vlozit trosku složitejsi dotaz a ten pruvodce to neskousne.
ve starym basicu byl dataenvironment a tam se dalo krasne udelat:

Set rs = DataEnvironment1.rsHlidani
   DataEnvironment1.Commands.Item("Hlidani").CommandText = "SELECT sloupec FROM tabulka"
   DataEnvironment1.Hlidani
set rs = Nothing

Jak tohle udelam v vb.net ?

neco v tomto smyslu:

Dim rs As New Databaze2.DataSet1TableAdapters.HlidaniTableAdapter
rs.Adapter.SelectCommand.CommandText = "SELECT sloupec FROM tabulka"

ale takhle mi to nefunguje.

pripadne jestli je cesta jak premluvit pruvodce toho table adapteru aby mi tam dovolil dat takovejhle dotaz:

SELECT        zasilky.CISLO_ZASILKY, zasilky.DANOVY_LIST, zasilky_dobirky.DOBIRKA, statusy.STATUS, statusy.DATUM_CAS, x_zasilky_davky.DAVKA
FROM            zasilky LEFT JOIN
                             (SELECT        ID, CISLO_ZASILKY, STATUS, DATUM_CAS, UZIVATEL, ciselnik_duvod_odmitnuti_DUVOD
                               FROM            (SELECT        ID, CISLO_ZASILKY, STATUS, DATUM_CAS, UZIVATEL, ciselnik_duvod_odmitnuti_DUVOD
                                                         FROM            x_zasilky_statusy
                                                         ORDER BY CISLO_ZASILKY, DATUM_CAS DESC) AS Serazeno
                               GROUP BY Serazeno.CISLO_ZASILKY
                               ORDER BY Serazeno.CISLO_ZASILKY) statusy ON statusy.CISLO_ZASILKY = zasilky.CISLO_ZASILKY LEFT JOIN
                         zasilky_dobirky ON zasilky_dobirky.CISLO_ZASILKY = zasilky.CISLO_ZASILKY LEFT JOIN
                         x_zasilky_davky ON x_zasilky_davky.CISLO_ZASILKY = zasilky.CISLO_ZASILKY
WHERE        statusy.STATUS = 'Příprava expedice' AND x_zasilky_davky.davka LIKE '%ESH_%' AND statusy.DATUM_CAS > ? AND statusy.DATUM_CAS < ?
GROUP BY zasilky.CISLO_ZASILKY

Problem je patrne v kombinaci vnorenych selectu a dvou parametru se stejnym nazvem protoze to projde bez tech

AND statusy.DATUM_CAS > ? AND statusy.DATUM_CAS < ?

a zaroven to projde i pokud vynecham ty vnorene selekty.

A cely dotaz je taky spravne protoze pokud doplnim realne datumy tak to samorejme dela co ma. Jen to nechce ty promenne.

A chybova zprava je: "The number of parameter markers is not equal to number of parametera provided"

diky za cokoliv

 
Odpovědět 24.10.2018 1:04
Avatar
jozef_i
Člen
Avatar
Odpovídá na Mirek Šalamon
jozef_i:24.10.2018 7:25

Parametre sa v T-SQL vkladajú takto:
AND statusy.DATUM_CAS > @DatumOd AND statusy.DATUM_CAS < @DatumDo

Kde ptom treba v kóde dotiahnuť hodnoty pre @datumOd a @DatumDo cez kolekciu SqlParameters, nejak tak...

 
Nahoru Odpovědět 24.10.2018 7:25
Avatar
Odpovídá na jozef_i
Mirek Šalamon:24.10.2018 11:06

No, takjs tim zavinacem jsem taky laboroval, ale nikdy se mi tam nepovedlo ulozit vubec nic. vzdycky to skonci cbyou. Proto pouzivam otaznik.ani ten nejjednodussi prikaz viz priloha neprojde. :(

 
Nahoru Odpovědět 24.10.2018 11:06
Avatar
jozef_i
Člen
Avatar
jozef_i:24.10.2018 11:32

Je to vo Visual Basic.NET? Keď nastavuješ TableAdapter vo visuálnom návrhári by to malo ísť.

 
Nahoru Odpovědět 24.10.2018 11:32
Avatar
Odpovídá na jozef_i
Mirek Šalamon:24.10.2018 11:48

jj vb.net (VS 2017) a presto nejde... :( mam teda jen tu zakladne free comunity verzi, ale to by snad vadit nemelo.

Editováno 24.10.2018 11:50
 
Nahoru Odpovědět 24.10.2018 11:48
Avatar
jozef_i
Člen
Avatar
jozef_i:24.10.2018 11:50

Tak neviem :)

 
Nahoru Odpovědět 24.10.2018 11:50
Avatar
Miroslav Majcher:24.10.2018 15:15

Nemas tam nahodou medzeru, medzi '@' a 'cas'?

 
Nahoru Odpovědět 24.10.2018 15:15
Avatar
Odpovídá na Miroslav Majcher
Mirek Šalamon:24.10.2018 19:34

v zakladnim prikazu, jak je videt, zadnou mezeru nemam, on si ji tam dodela ten Tvurce Dotazu sam. Kdyz mu ji smazu, tak po kliknuti na tlacitko proved prikaz se tam zase objevi.

Takze nevim co s tim.

 
Nahoru Odpovědět 24.10.2018 19:34
Avatar
Odpovídá na Mirek Šalamon
Honza Prosecký:24.10.2018 21:15

Zalezi zo pouzivas za databazi, kazda pravdepodobne vyzaduje jiny placeholder parametru.

https://stackoverflow.com/…dapter-query

 
Nahoru Odpovědět 24.10.2018 21:15
Avatar
Mirek Šalamon:24.10.2018 22:53

Aha - diky za upresneni, Souvislost primo s DB jsem nehledal, pouzivam pouze MySQL a nemel jsem nikdy jinou prilezitost, takze jsem s ? byl vzdy spokojen a vice jsem v tehle oblasti nepateal, ale z ruznych diskuzi vim, ze nekdo pouziva @ jen u mě to nikdy neslo a nijak jsem po to dal nepatral.nicmene to neresi puvodni problem.

 
Nahoru Odpovědět 24.10.2018 22:53
Avatar
Mirek Šalamon:29.10.2018 15:40

nikdo nevi?

 
Nahoru Odpovědět 29.10.2018 15:40
Avatar
Jirka
Člen
Avatar
Jirka:29.10.2018 17:22

Tady v nějakém manuálu, ve zdrojových textech, píší, že zavináč u parametru se používá jen ve zdrojáku .NETu a ve zdrojáku MySQL se parametry píší bez zavináče.

Viz.: zde

Nahoru Odpovědět 29.10.2018 17:22
Kdo nic nedělá, nic nezkazí.
Avatar
Jirka
Člen
Avatar
Odpovídá na Mirek Šalamon
Jirka:31.10.2018 14:47

Nemám možnost ověřit, ale v článku uvádějí příklad volání uložené procedury v MySQL z C#.

Procedura country_hos s parametrem con:

DELIMITER //
CREATE PROCEDURE country_hos
(IN con CHAR(20))
BEGIN
  SELECT Name, HeadOfState FROM Country
  WHERE Continent = con;
END //
DELIMITER ;

Je volána z C# (.NET) s parametrem jménem @con:

string rtn = "country_hos";
MySqlCommand cmd = new MySqlCommand(rtn, conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@con", "Europe");

Nemohl by to být ten problém?

Nahoru Odpovědět 31.10.2018 14:47
Kdo nic nedělá, nic nezkazí.
Avatar
Petr Jílek
Člen
Avatar
Petr Jílek:31.10.2018 23:02

Jak zminuje Mirek Šalamon, správná cesta (tuším jediná podporovaná) je použít proměnnou za @. Tu pak table adapter akceptuje jako parametr při volání (metody Fill a Get). v XSD návrháři se to pak dá zkontrolovat pomocí "preview data" (pravé tlačítko myši na položku dotazu u tableadapter),kdy se dají načítat data z DB..

 
Nahoru Odpovědět 31.10.2018 23:02
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 14 zpráv z 14.