Zapytanie parametryczne w C++ Builder 10.2

0

Witajcie,

Mam problem z przerobieniem zwykłego zapytania sql na zapytanie z parametrami.

Mam zapytanko:

String sqlquery = Format("select * from events where location = %d",ARRAYOFCONST(parameter_value));

i chciałbym je przerobić żeby nie łączyć zapytania w stringa i później je przesyłać do bazy tylko podawać niektóre wartości do zapytania jako parametry (wiadomo bezpieczeństwo).

0

tu masz przyklad w C#

https://www.dreamincode.net/forums/topic/268104-the-right-way-to-query-a-database-parameterizing-your-sql-queries/

czemu nie uzyjesz jakiegos ORMa ktory juz ma takie rzeczy zaimplementowane?

0

Jak to w życiu bywa. Kto inny zajmuje się serwerem a kto inny apką itd.
Na razie dzięki za linka będę próbował to ogarniać w Embarcadero.

0

!?

ze co?

co ma serwer do apki?

Opisz jak mozesz dokladnie jaka masz architekture i dlaczego nie mozesz miec ORMa?

0

@forritarik byłoby jeszcze fajnie abyś napisał z jakich komponentów korzystasz podczas klepania SQL'i. Ale generalnie to nie jest nic trudnego. Trzeba zajrzeć do dokumentacji...

0

IDE: C++ Borland 10.2 Tokyo
Łączę się do bazy Postgres
Korzystam z kontrolek: PostgresDAC , ale próbowałem także z innymi kontrolkami np. PgDAC, FireDAC i nic

W dokumentacji znalazłem tylko przykład dla Delphi

Query.SQL.Clear;
Query.SQL.Add('INSERT INTO COUNTRY (NAME, CAPITAL, POPULATION)');
Query.SQL.Add('VALUES (:Name, :Capital, :Population)');
Query.Params[0].AsString := 'Lichtenstein';
Query.Params[1].AsString := 'Vaduz';
Query.Params[2].AsInteger := 420000;
Query.ExecSQL;

przykład jest dla mnie zrozumiały ale nie umiem go przełożyć na C++. Nie umiem wgrać/ utworzyć parametru np.

Query->Params[0] <- i co dalej

próbowałem już chyba wszystkich dostępnych funkcji które podpowiadało mi IDE ale nie działa.

2

@forritarik rada na przyszłość, jeśli masz zamiar pisać poważnie w C++ Builderze naucz się czytać składnię Delphi, większość przykładów używania VCL'u oraz komponentów jest pisana właśnie w Delphi.

Query->SQL->Clear();
Query->SQL->Add("INSERT INTO COUNTRY (NAME, CAPITAL, POPULATION)");
Query->SQL->Add("VALUES (:Name, :Capital, :Population)");
Query->Params[0]->AsString = "Lichtenstein";
Query->Params[1]->AsString = "Vaduz";
Query->Params[2]->AsInteger = 420000;
Query->ExecSQL();

Pisane z palca, więc mogą być pomyłki. Generalnie zasady są dość proste. Zamiast . dajesz ->, stringi zapisujesz w " zamiast '. Metody wywołujesz dodając () i tak dalej. Nie jest to trudne, a szalenie upraszcza pracę.

Edit:
Osobiście preferuję tą metodę podstawiania parametrów:

Query->SQL->Clear();
Query->SQL->Add("INSERT INTO COUNTRY (NAME, CAPITAL, POPULATION)");
Query->SQL->Add("VALUES (:Name, :Capital, :Population)");
Query->ParamByName("Name")->AsString = "Lichtenstein";
Query->ParamByName("Capital")->AsString = "Vaduz";
Query->ParamByName("Population")->AsInteger = 420000;

Uniezależnia Cię to od kolejności parametrów.

0

Wielkie dzięki :) działa
Wiem że jeszcze długa droga przede mną :( no ale jakoś trzeba pchać ten wózek

1 użytkowników online, w tym zalogowanych: 0, gości: 1