Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Problem mit SQL abfrage (https://www.delphipraxis.net/48878-problem-mit-sql-abfrage.html)

BastardOp 1. Jul 2005 17:25

Datenbank: MYSQL • Zugriff über: libmysql.dll mysql.pas

Problem mit SQL abfrage
 
Hi

ich bin gerade an einer SQL abfrage in Delphi 2005 PE mit der libmysql.dll und mysql.pas. Allerdings bekomme ich ständig eine fehlermeldung das etwas mit der Abfrage nicht stimmt ich hab eine vergleichbare abfrage bereits in PHP geschrieben und dort funzt sie ohne Probleme.
Alos hier mal der entsprechende Delphi code.

Delphi-Quellcode:
var
_myRes: PMySQL_Res;
_myRow: PMySQL_Row;
mengeneu: integer;
begin
query:=PChar('SELECT * FROM warenkorb WHERE userid ="'+inttostr(Form3.userid)+'" AND artikelnr ="'+edit1.Text+'"');
mysql_real_query(_myCon, query, Length(query));
_myRes := mysql_store_result(_myCon);
_myRow := mysql_fetch_row(_myRes);
{$Region 'if _myRow[2] > 0'}
if strtoint(_myRow[2]) > 0 then
begin
mengeneu:= strtoint(_myRow[2])+strtoint(edit4.Text);
query:=PChar('UPDATE warenkorb SET menge ="'+inttostr(mengeneu)+'" WHERE userid ="'+inttostr(Form3.userid)+'" AND artikelnr ="'+edit1.Text+'"');
mysql_real_query(_myCon, query, Length(query));
end
und hier nun das vergleichbare PHP element

Code:
 $abfrageadd = "SELECT * FROM warenkorb WHERE userid = '$user' && artikelnr = '$_POST[artikelnr]'";
   $ergebnisadd = mysql_query($abfrageadd);
   while($prodadd = mysql_fetch_object($ergebnisadd)){
  $mengeold=$prodadd->menge;}
  if($mengeold>0){
  $mengenew=$mengeold+$_POST['menge'];
  $aendern1 = "UPDATE warenkorb Set menge = '$mengenew' WHERE userid = '$user' && artikelnr = '$_POST[artikelnr]'";
  $update1 = mysql_query($aendern1);}

Bei der Abfrage besteht die möglichkeit, dass durch die einscränkung mit WHERE nach Datensätzen gesucht wird die nicht existen sind. Doch mit PHP mach dies ja keine Problem und ich dacht das es auch in Delphi dann kein Problem sein dürfte.


Ich hoffe ihr könnt mir folgen und helfen


MfG
BastardOp

ibp 1. Jul 2005 17:50

Re: Problem mit SQL abfrage
 
ersetze mal die Anführungszeichen >"< durch das doppelte apostroph >''< also 2 mal das >'<

BastardOp 1. Jul 2005 18:01

Re: Problem mit SQL abfrage
 
hab ich gemacht aber das bringt auch nichts

r_kerber 1. Jul 2005 18:06

Re: Problem mit SQL abfrage
 
Schreib doch bitte mal, welche Fehlermeldung Du bekommst, ansonsten müssen wir im Kaffeesatz lesen, und das ist gar nicht so einfach.

BTW: Ich würde auch dringend SQL-Statements mit Parametern empfehlen!

BastardOp 1. Jul 2005 19:07

Re: Problem mit SQL abfrage
 
die Fehler meldung is eine Exeption der Klasse EAccessVioliation "Zugrifssverletzung bei Adresse 00474500 im Modul user.exe!

die user.exe is die ausgeführt datei.


Wie meinst du das mit den SQL-Statments mit Parametern?

r_kerber 1. Jul 2005 20:02

Re: Problem mit SQL abfrage
 
Das klingt aber nicht nach nach einem Fehler im SQL sondern eher nach einer nicht erzeugten Objektinstanz. Kann es sein, daß Du Query oder mysql_real_query erst mal erzeugen mußt?

BastardOp 1. Jul 2005 20:07

Re: Problem mit SQL abfrage
 
also habs nu bissel weiter geschaut und überlegt uns so und bin drauf gekommen das der fehlen bei der if Anweisung liegt. Undzwar weil auf Grund des nichtvorhandnene Datensatzes nichts in _myRow[2] geschreiben wird gibts da nen fehler. Also rauchte ich nu nur noch Ne Funktion die überprüft ob _myRow überhaupt gesetzt wurde, das würde vollkommen ausreichen.

Albi 1. Jul 2005 20:40

Re: Problem mit SQL abfrage
 
Hallo,

Zitat:

_myRow := mysql_fetch_row(_myRes);
Es geht doch um die diese Stelle hier wo der Fehler auftritt, oder?

Kannst Du nicht einfach _myRes abfragen und schauen ob es > 0 ist, wenn ja dann soll die Procedure weiterlaufen und wenn nicht EXIT.

Wenn das nicht so einfach ist, dann mache einfach 2 Select's und im ersten schaust Du einfach nur nach ob überhaupt ein DS dazu vorhanden ist (Count ist wäre da dein Freund).

Oder Du steckst das ganze in einen Try Except Block, obwohl das nicht gerade eine sehr elegante Lösung für das Problem wäre. Aber du bist somit die Fehlermeldung los. :-D

BastardOp 1. Jul 2005 21:09

Re: Problem mit SQL abfrage
 
so hab nu im irc gefragt und es geht nu mit if assigne(_myRow) then... hat es gefunzt also Problem gelöst


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz