Anzahl der Datensätze mit MySQLDac
-
Nabend,
ich mitt mittels der MySQLDac Komponenten prüfen ob ein spezieller Datensatz existiert und je nachdem eine Variable auf true bzw. false setzen.
Leider will das nicht so ganz, daher lasse ich mir in einem Memo weitere Daten ausgeben. Im Memo wird immer insert angezeigt, auch wenn die datensatz bereits existiert.
String sql = "select count(*) as anzahl from products_data where uniqueid = '"+ AnsiString(dbuniqueid) +"'"; bool found = false; try { Form1->SQLQuery->Close(); Form1->SQLQuery->SQL->Clear(); Form1->SQLQuery->SQL->Add(sql); Form1->SQLQuery->Open(); if (Form1->SQLQuery->RowsAffected == 0) { found = false; Form1->Memo1->Lines->Add("insert"); } else { found = true; Form1->Memo1->Lines->Add("update"); } Form1->SQLQuery->Close(); } catch(...) { found = false; Form1->Memo1->Lines->Add("Error"); }Das Problem müsste in der Zeile
if (Form1->SQLQuery->RowsAffected == 0)
liegen.Weiß jemand was daran falsch ist?
Hannes
-
soweit ich weis gibt RowsAffected die Anzahl der Zeilen zurück die von einem Insert/Update/Delete Statement betroffen wurden.(Siehe BCB-Hilfe:RowsAffected zu der benutzten Komponente)
-
Hi,
wenn ich
if (Form1->SQLQuery->RecordCount == 0)
nutze, zeigt er immer nur update an, auch wenn datensätze noch nicht existieren.
ich verstehe das nicht.
hannes
-
Nicht alle DB / Treiber Kombinationen unterstützen RowCount. Versuch es mal mit dem guten alten FindFirst().
-
hi,
if (Form1->SQLQuery->FindFirst() == false)
zeigt auch jedesmal update an

hannes
-
hi,
problem liegt daran das count(*) as anzahl nicht geht, habe es durch * ersetzt

hannes