Problem z Delphi XE2, pri uporabi parametra v SQL poizvedbi

Dbase, sql, paradox in vse drugo kar se tiče baz.
Odgovori
Matija
Prispevkov: 10
Pridružen: 22.02.2012 16:20:31

Problem z Delphi XE2, pri uporabi parametra v SQL poizvedbi

Odgovor Napisal/-a Matija » 08.04.2012 17:43:43

Pozdravljeni,
Začel sem uporabljati Delphi XE2 in sem naletel na problem, ki ga ne znam rešiti. V Delphi 2007 mi vse dela BP, tukaj pa debuger med izvajanjem javi napako.

Imam enostavni select stavek, kjer debuger ne javi napake.

Koda: Izberi vse

with ADO do 
begin
  SQL.Clear;
  SQL.Add('SELECT * FROM Vpisi WHERE Vpis = 1;');
  Open;
end;
Sedaj pa za ta stavek uporabim parameter

Koda: Izberi vse

with ADO do 
begin
  SQL.Clear;
  SQL.Add('SELECT * FROM Vpisi WHERE Vpis = :Vpis;');
  Parameters.ParamByName('Vpis').DataType := ftInteger;
  Parameters.ParamByName('Vpis').Value := 1;
  Prepared := True;
  Open;
end;
Prva sprememba proti D2007 je, da debuger zahteva, da določim tip parametra, vseeno pa javi spodnjo napako.
Debugger Exception Notification
Project Test.exe raised exception class EOleException with message 'Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another'.


Če pri obvestilu pritisnem "nadaljuj", se koda pravilno izvede. Zagon direktne exe kode ne javi nič in dela OK.
Ima kdo idejo, kaj bi tukaj lahko bilo narobe?
Če izvajam program po korakih (F7), se obvestilo pojavi takoj v vrstici, kjer je SELECT stavek.
Sem pa ugotovil, da pri uporabi parametra, kjer je podatkovni tip datum ne upošteva ure, ampak samo datum, javi pa enako izjemo.

Koda: Izberi vse

with ADO do
begin
  SQL.Clear;
  SQL.Add('SELECT * FROM Vpisi WHERE Datum >= :Datum;');
  Parameters.ParamByName('Datum').DataType := ftDateTime;
  Parameters.ParamByName('Datum').Value := FormatDateTime('yyyy/mm/dd hh:mm:ss', StrToDateTime('2012-04-03 12:08:50'));
  Prepared := True;  
  Open;
end;
Uporabljam MySQL 5.5 podatkovno bazo na katero se povežem preko ODBCja (3.51 ali 5.1 driver) in TADO komponente.
Polje Vpis je tipna INT, polje Datum pa DATETIME.

String povezave je:

Koda: Izberi vse

Conn1.ConnectionString := 'Provider=MSDASQL.1;Persist Security Info=False;Data Source=' + ODBC + ';Mode=ReadWrite;';
kjer je ODBC ime ODBC povezave.

Hvala za pomoč in nasvete
Matija

admin: Uporabljaj code tag prosim.

zippo
Prispevkov: 264
Pridružen: 14.07.2002 12:11:29

Re: Problem z Delphi XE2, pri uporabi parametra v SQL poizve

Odgovor Napisal/-a zippo » 10.04.2012 21:46:37

Ne vem sicer, koliko to vpliva, ampak jaz ne uporabljam parametre na enak način kakor ti. Moj izsek kode (SQL sem napisal kar na oko, ker je bil sicer malo predolg):

Koda: Izberi vse

  qryTmp.SQL.Text := 'Insert Into TBL(ID) Values :ID';
  qryTmp.ParamByName('ID').AsInteger   := PlanItemId;
  qryTmp.ExecSQL;
  ...
Mani deluje BP, je pa res, da ne uporabljam ODBC. Povezava na MySQL 5.2 (se mi zdi)

Matija
Prispevkov: 10
Pridružen: 22.02.2012 16:20:31

Re: Problem z Delphi XE2, pri uporabi parametra v SQL poizve

Odgovor Napisal/-a Matija » 11.04.2012 15:00:29

Živjo,

Tvoja koda ni niti tako drugačna od moje, samo da ne uporabljaš dbGO/TADO komponent.
Katere pa uporabljaš, da ne potrebuješ ODBCja?

lp,
Matija

zippo
Prispevkov: 264
Pridružen: 14.07.2002 12:11:29

Re: Problem z Delphi XE2, pri uporabi parametra v SQL poizve

Odgovor Napisal/-a zippo » 11.04.2012 15:02:19

Zeos-ke

Matija
Prispevkov: 10
Pridružen: 22.02.2012 16:20:31

Re: Problem z Delphi XE2, pri uporabi parametra v SQL poizve

Odgovor Napisal/-a Matija » 11.04.2012 23:12:53

Živjo,

lahko še samo vprašam, katero verzijo Zeosa in Delphija uporabljaš?

Hvala in lp,
Matija

zippo
Prispevkov: 264
Pridružen: 14.07.2002 12:11:29

Re: Problem z Delphi XE2, pri uporabi parametra v SQL poizve

Odgovor Napisal/-a zippo » 11.04.2012 23:17:15

Seveda lahko! :)

Zeos 7 in Delphi 2010.

Matija
Prispevkov: 10
Pridružen: 22.02.2012 16:20:31

Re: Problem z Delphi XE2, pri uporabi parametra v SQL poizve

Odgovor Napisal/-a Matija » 12.04.2012 23:58:56

Živjo,

hvala za tvoj trud, vendar bi bolj rabil nekoga, ki ima Delphi XE2, da bi si vzel 5 minut časa in uporabil SQL stavek s parametrom v navezi z dBGO/TADOQuery in ODBC, če se mu pokaže enaka napaka kot meni, da odstranim možnost napake pri inštalaciji.

lp, Matija

mig640
Prispevkov: 59
Pridružen: 03.01.2008 11:36:54

Re: Problem z Delphi XE2, pri uporabi parametra v SQL poizve

Odgovor Napisal/-a mig640 » 16.04.2012 15:59:23

Na Delphi Xe2 sem poskusil izsek tvoje kode implementirati in mi deluje ok.No izjema je jaz imam v bazi polje tipa date.

Koda: Izberi vse

with AdoQuery1 do begin
   SQL.Clear;
   SQL.Add('SELECT * FROM RACUNIDR');
   SQL.Add('WHERE');
   SQL.Add('(Datum < :Datum)');
   Parameters.ParamByName('Datum').DataType:=ftDate;
   Parameters.ParamByName('Datum').Value :=(DateTimeToSQLDateTimeString(StrToDateTime(Edit2.Text),Edit3.Text,false));
   ShowMessage(Parameters.ParamByName('Datum').Value);
 end;
AdoQuery1.Active:=true;

Matija
Prispevkov: 10
Pridružen: 22.02.2012 16:20:31

Re: Problem z Delphi XE2, pri uporabi parametra v SQL poizve

Odgovor Napisal/-a Matija » 18.04.2012 12:29:18

Živjo,

Hvala za odgovor, sem testiral tvojo kodo in me zanima kaj ti vrne stavek

Koda: Izberi vse

 DateTimeToSQLDateTimeString(StrToDateTime(Edit2.Text),Edit3.Text,false);
oz. kaj ti pokaže ShowMessage, ker jaz dobim "2012-04-03 12:08:50" obliko, ki naj bi jo MySQL server pravilno prebavil.
Mi pa z MyDAC komponento dela brez napake.

lp, Matija

Odgovori