Problem z szukaniem w bazie Access - Delphi
POLI - 18-03-2006 15:11
Problem z szukaniem w bazie Access - Delphi
mam taka procedurke ma pobierac wartosc z edit1.text i szukac w ADOQwery1 i wyswietlac wyszukanie w DBgrid
procedure TForm1.Button1Click(Sender: TObject); var zapytanie:string; begin if Edit1.text<>'' then begin zapytanie:='SELECT * FROM Firmy WHERE Miasto like ' + edit1.text; ADOQuery1.close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add(zapytanie); ADOQuery1.Open; end else showmessage('Nie znaleziono Firmy z takiego Miasta'); end;
Ale wysyla mi blad jak wpisze w edita np Lublin
to wysyla blad ze parametr lublin niema ustalonej wartosci domyslnej?? i wysypuje program ;/
POMOCY !!!
=?iso-8859-2?Q?Przemys=B3aw_Rachwa=B3?= - 18-03-2006 15:11
-- EXECUTE jestem_bogiem_uswiadom_to_sobie @USER='prachwal', @DATA=#2006-02-04#, @GG=3579641; Użytkownik "POLI" <poli@celica-team.com> napisał w wiadomości news:dvgr42$t0c$1@atlantis.news.tpi.pl... > mam taka procedurke ma pobierac wartosc z edit1.text i szukac w ADOQwery1 i > wyswietlac wyszukanie w DBgrid > > procedure TForm1.Button1Click(Sender: TObject); > var > zapytanie:string; > begin > if Edit1.text<>'' then > begin > zapytanie:='SELECT * FROM Firmy WHERE Miasto like ' + edit1.text; > ADOQuery1.close; > ADOQuery1.SQL.Clear; > ADOQuery1.SQL.Add(zapytanie); > ADOQuery1.Open; > end > else > showmessage('Nie znaleziono Firmy z takiego Miasta'); > end; > > Ale wysyla mi blad jak wpisze w edita np Lublin > > to wysyla blad ze parametr lublin niema ustalonej wartosci domyslnej?? i > wysypuje program ;/ > > POMOCY !!! > > >
mistrzu poczytaj trochę o JetSQL
'SELECT * FROM Firmy WHERE Miasto like "' + edit1.text + '*";'
powinno fungować
POLI - 18-03-2006 15:12
fruwa wielkie dzieki
Użytkownik "Przemysław Rachwał" <prachwal@gazeta.pl> napisał w wiadomości news:dvgvgr.260.1@pampa.afraid.org... > > > -- > EXECUTE jestem_bogiem_uswiadom_to_sobie @USER='prachwal', > @DATA=#2006-02-04#, @GG=3579641; > Użytkownik "POLI" <poli@celica-team.com> napisał w wiadomości > news:dvgr42$t0c$1@atlantis.news.tpi.pl... >> mam taka procedurke ma pobierac wartosc z edit1.text i szukac w > ADOQwery1 i >> wyswietlac wyszukanie w DBgrid >> >> procedure TForm1.Button1Click(Sender: TObject); >> var >> zapytanie:string; >> begin >> if Edit1.text<>'' then >> begin >> zapytanie:='SELECT * FROM Firmy WHERE Miasto like ' + edit1.text; >> ADOQuery1.close; >> ADOQuery1.SQL.Clear; >> ADOQuery1.SQL.Add(zapytanie); >> ADOQuery1.Open; >> end >> else >> showmessage('Nie znaleziono Firmy z takiego Miasta'); >> end; >> >> Ale wysyla mi blad jak wpisze w edita np Lublin >> >> to wysyla blad ze parametr lublin niema ustalonej wartosci domyslnej?? > i >> wysypuje program ;/ >> >> POMOCY !!! >> >> >> > > mistrzu poczytaj trochę o JetSQL > > 'SELECT * FROM Firmy WHERE Miasto like "' + edit1.text + '*";' > > powinno fungować > >
j_marek - 21-03-2006 01:00
W wiadomości: dvh1vf$hn4$1@nemesis.news.tpi.pl, POLI <poli@celica-team.com> napisał(a): [...] >> mistrzu poczytaj trochę o JetSQL >> >> 'SELECT * FROM Firmy WHERE Miasto like "' + edit1.text + '*";' >> >> powinno fungować
Witam!
Ciekawe jak wygląda w praktyce atak SQL Injection w tym przypadku. Może trzeba wpisać do edit1 coś takiego: ";SELECT * From Firmy;
-- Pozdrawiam, Marek Janaszewski [ j_marek(małpa)gazeta(kropka)pl ] [ == USUN_TO. z adresu == ]
=?iso-8859-2?Q?Przemys=B3aw_Rachwa=B3?= - 21-03-2006 01:00
j_marek <j_marek@USUN_TO.gazeta.pl> wrote: > W wiadomości: dvh1vf$hn4$1@nemesis.news.tpi.pl, > POLI <poli@celica-team.com> napisał(a): > [...] >>> mistrzu poczytaj trochę o JetSQL >>> >>> 'SELECT * FROM Firmy WHERE Miasto like "' + edit1.text + '*";' >>> >>> powinno fungować > > Witam! > > Ciekawe jak wygląda w praktyce atak SQL Injection w tym przypadku. > Może trzeba wpisać do edit1 coś takiego: ";SELECT * From Firmy;
zasadniczo powinno być tak:
'EXECUTE twoja_kwerenda_parametryczna @par_01="' + edit1.text + '*";'
jak w czymś takim dasz to o czym pisałeś?
tylko że to troche za wysokie progi jak narazie....
-- EXECUTE jestem_bogiem_uswiadom_to_sobie @USER='prachwal', @DATA=#2006-02-04#, @GG=3579641;
Grzegorz Danowski - 22-03-2006 00:05
Użytkownik "j_marek" <j_marek@USUN_TO.gazeta.pl> napisał w wiadomości news:dvm6o6$2jtj$1@news2.ipartners.pl... >W wiadomości: dvh1vf$hn4$1@nemesis.news.tpi.pl, > POLI <poli@celica-team.com> napisał(a): > [...] >>> mistrzu poczytaj trochę o JetSQL >>> >>> 'SELECT * FROM Firmy WHERE Miasto like "' + edit1.text + '*";' >>> >>> powinno fungować > > Witam! > > Ciekawe jak wygląda w praktyce atak SQL Injection w tym przypadku. Może > trzeba wpisać do edit1 coś takiego: ";SELECT * From Firmy;
Access jest odporny na SQL Injection, ponieważ nie można w jednym zapytaniu sql przekazać kilku poleceń. Pozdrawiam Grzegorz
j_marek - 22-03-2006 13:13
W wiadomości: dvoef8$kor$1@inews.gazeta.pl, Grzegorz Danowski <gdn__na@serwerze__poczta.onet.pl> napisał(a): [...] >>>> 'SELECT * FROM Firmy WHERE Miasto like "' + edit1.text + '*";' [...] >> Ciekawe jak wygląda w praktyce atak SQL Injection w tym przypadku. >> Może trzeba wpisać do edit1 coś takiego: ";SELECT * From Firmy; > > Access jest odporny na SQL Injection, ponieważ nie można w jednym > zapytaniu sql przekazać kilku poleceń. [...]
Witam!
Nawet jeśli jest odporny to można odpowiednią treścią w edit1.text zepsuć zapytanie. Co jeśli w np. w nazwie firmy będzie cudzysłów, a użytkownik zechce go użyć w zapytaniu.
Dynamiczne zapytania mogą być przydatne. Np. dla rozwiązania problemu zapytań ze zmienną listą pól. Użytkownik ma możliwości wyboru, po którym polu wyszukiwać. Ale to nie powinno wykluczać używania parametrów w takich zapytaniach.
Problem ze zmienną listą pól w zapytania można także rozwiązać budując odpowiednie wyrażenia logiczne w WHERE:
np. SELECT * FROM Firmy WHERE ((@m IS NULL) OR (Miasto LIKE @m));
@nazwa - jest używany w ADO.NET do parametrów, w przypadku Accessa powinno chyba to być ?. Jak to jest w Delphi to trzeba sprawdzić w dokumentacji danego komponentu.
-- Pozdrawiam, Marek Janaszewski [ j_marek(małpa)gazeta(kropka)pl ] [ == USUN_TO. z adresu == ]
j_marek - 22-03-2006 13:13
W wiadomości: dvnk7b.61o.1@pampa.afraid.org, Przemysław Rachwał <prachwal@gazeta.pl> napisał(a): [...] >>>> 'SELECT * FROM Firmy WHERE Miasto like "' + edit1.text + '*";' >>>> >>>> powinno fungować >> >> Witam! >> >> Ciekawe jak wygląda w praktyce atak SQL Injection w tym przypadku. >> Może trzeba wpisać do edit1 coś takiego: ";SELECT * From Firmy; > > zasadniczo powinno być tak: > > 'EXECUTE twoja_kwerenda_parametryczna @par_01="' + edit1.text + '*";' > > jak w czymś takim dasz to o czym pisałeś? > > tylko że to troche za wysokie progi jak narazie....
Witam!
Tylko dlatego tak kombinować, zwykle można parametry przekazać osobno. Nie trzeba budować takich piętrowych konstrukcji z zapytań dynamicznych.
-- Pozdrawiam, Marek Janaszewski [ j_marek(małpa)gazeta(kropka)pl ] [ == USUN_TO. z adresu == ]
=?iso-8859-2?Q?Przemys=B3aw_Rachwa=B3?= - 23-03-2006 03:32
j_marek <j_marek@USUN_TO.gazeta.pl> wrote:
>> zasadniczo powinno być tak: >> >> 'EXECUTE twoja_kwerenda_parametryczna @par_01="' + edit1.text + '*";' >> >> jak w czymś takim dasz to o czym pisałeś? >> >> tylko że to troche za wysokie progi jak narazie.... > > Witam! > > Tylko dlatego tak kombinować, zwykle można parametry przekazać > osobno. Nie trzeba budować takich piętrowych konstrukcji z zapytań > dynamicznych.
kwerendy parametryczne są niezwykle przydatne przy odseparowaniu kodu aplikacji od SQL-a
-- EXECUTE jestem_bogiem_uswiadom_to_sobie @USER='prachwal', @DATA=#2006-02-04#, @GG=3579641;
j_marek - 28-03-2006 00:02
W wiadomości: dvsrtq.74.1@pampa.afraid.org, Przemysław Rachwał <prachwal@gazeta.pl> napisał(a): > j_marek <j_marek@USUN_TO.gazeta.pl> wrote: > >>> zasadniczo powinno być tak: >>> >>> 'EXECUTE twoja_kwerenda_parametryczna @par_01="' + edit1.text + >>> '*";' [...] >> Tylko dlatego tak kombinować, zwykle można parametry przekazać >> osobno. Nie trzeba budować takich piętrowych konstrukcji z zapytań >> dynamicznych. > > kwerendy parametryczne są niezwykle przydatne przy odseparowaniu kodu > aplikacji od SQL-a
Witam!
Ale to jest dynamiczny SQL co zaprezentowałeś. Dopiero wewnątrz jest ta kwerenda parametryczna. Dlaczego parametrów nie wykorzystywać bezpośrednio bez stosowania takiej "kombinacji alpejskiej".
Przykład z pomocy do Delphi 7 dla TQuery: Query2.SQL.Clear; Query2.SQL.Add('INSERT INTO COUNTRY (NAME, CAPITAL, POPULATION)'); Query2.SQL.Add('VALUES (:Name, :Capital, :Population)'); Query2.Params[0].AsString := 'Liechtenstein'; Query2.Params[1].AsString := 'Vaduz'; Query2.Params[2].AsInteger := 420000; Query2.ExecSQL;
-- Pozdrawiam, Marek Janaszewski [ j_marek(małpa)gazeta(kropka)pl ] [ == USUN_TO. z adresu == ]
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
mysql i mysql-front, problem
String line; if (line=="cos"){...}....problem
Problemy z =?ISO-8859-2?Q?instalacj=B1_PostgreSQL_na_syste?==?ISO-8859-2?Q?mach_Windows?=
[postgres] Problem z =?ISO-8859-2?Q?zmian=B1_struktury_i_z?==?ISO-8859-2?Q?ale=BFno=B6ciami=2E?=
[oracle] =?ISO-8859-2?Q?zmia=BFd=BFony_przez_problem=3A_za?==?ISO-8859-2?Q?pytanie_do_hierarchi?=
Problem z wartościami w MySQL :( [ MySQL and ASP and VBScript ]
[PGSQL] czy ktos mial problemy z initdb pgsql 8.1 ?
Problem z mysql - can't connect to MySQL/nietypowo...
plik corel 11 na corel 8 = problem z otwarciem
=?iso-8859-2?q?Oracle_Database_link_problem_z_po=B3=B1czeniem _ze_zdaln=B1_baz=B1?=
zanotowane.pldoc.pisz.plpdf.pisz.pllunadance.htw.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|