![]() |
Datenbank: MySQL • Zugriff über: libmysql.dll
[MySQL] überprüfen ob ein Datensatz existiert
Hi
ich hab ein Programm in dem ich auf eine MySQL Datenbank zugreife. Nun möchte ich überprüfen ob eine datensatz mit gewissen Bedingungen schon existiert. Die Abfrage sieht so aus:
SQL-Code:
alledings gibt das bei mir immer eine zugriffs verletzung in der libmysql.dll wenn ein entsprechender eintrag NICHt existiert.
SELECT * FROM user WHERE email='email'
Wie kann ich nun überprüfen ob ein datensatz mit den gewünschten bedingungen existiert oder nicht? MfG BastardOp |
Re: [MySQL] überprüfen ob ein Datensatz existiert
Zeig mal etwas Code... an deinem SQL-Statement dürfte es nämlich nicht liegen. Oder greifst du vielleicht auf die Resultmenge zu, die ja gar nicht existiert?
|
Re: [MySQL] überprüfen ob ein Datensatz existiert
so sieht der code zum abfragen bei mir aus
Delphi-Quellcode:
query:= 'SELECT * FROM user WHERE email="'+email+'"';
mysql_real_query(_mycon, query, Length(query)); _myRes := mysql_store_result(_mycon); SetLength(Posts, mysql_num_rows(_myRes)); for i:= 0 to High(Posts) do begin _myRow := mysql_fetch_row(_myRes); |
Re: [MySQL] überprüfen ob ein Datensatz existiert
Wenn die Ergebnismenge leer ist, dann liefert dir mysql_num_rows 0 zurück. Verwendest du 0 zur Dimensionierung eines dynamischen Arrays, dann wird die Array-Variable Posts = nil. Du musst deinen Code ein wenig ändern:
Delphi-Quellcode:
Grüße vom marabu
query := 'SELECT * FROM user WHERE email="'+email+'"';
mysql_real_query(_mycon, query, Length(query)); _myRes := mysql_store_result(_mycon); SetLength(Posts, mysql_num_rows(_myRes)); if Assigned(Posts) then // diese Zeile ist wichtig! for i:= 0 to High(Posts) do begin _myRow := mysql_fetch_row(_myRes); ... end; |
Re: [MySQL] überprüfen ob ein Datensatz existiert
thx für die antwort werd ich morgen mal in aller ruhe ausprobiern.
|
Re: [MySQL] überprüfen ob ein Datensatz existiert
Das Problem liegt nicht darin, dass das Array Posts die Länge 0 hat, dann würde High nämlich einfach -1 zurückliefern und alles wäre ok. Die AV kommt ja außerdem aus der libmysql.dll und nicht aus der Anwendung.
Hier verhält es sich so, dass _myRes Nil ist, wenn die Ergebnismenge leer ist. Der darauffolgende Aufruf von mysql_num_rows() mit Nil als Argument führt zu der AV. Abhilfe:
Delphi-Quellcode:
Gruß, teebee
query := 'SELECT * FROM user WHERE email="'+email+'"';
mysql_real_query(_mycon, query, Length(query)); _myRes := mysql_store_result(_mycon); If Assigned(_myRes) Then Begin // nur weitermachen, wenn was da ist SetLength(Posts, mysql_num_rows(_myRes)); for i:= 0 to High(Posts) do begin _myRow := mysql_fetch_row(_myRes); ... end; End; |
Re: [MySQL] überprüfen ob ein Datensatz existiert
Hallo teebee,
Zitat:
Zitat:
Zitat:
Zitat:
Grüße vom marabu |
Re: [MySQL] überprüfen ob ein Datensatz existiert
Hallo marabu,
Zitat:
Zitat:
Zitat:
Zitat:
_myRes sollte trotzdem auf Nil geprüft werden, wenn auch nicht, um eine leere Ergebnismenge abzufragen. Gruß, teebee |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz