Więc... robisz na około Sposób jest dobry, ale...
Utworzenie unikalnego klucza w bazie pozwoli Ci na wyłapanie duplikatu przy próbie utworzenia rekordu o istniejącej już nazwie. No chyba, że potrzebujesz koniecznie sprawdzenie robić wcześniej, jednak i tak zadbałbym o utworzenie unikalnego klucza. Dobrze zaprojektowana baza danych jest kluczem do optymalnej aplikacji
Wróćmy jednak do Twojego kodu. Masz kilka błędów.
1. Nie musisz po pobraniu rekordu z bazy sprawdzać, czy jest on na pewno taki sam. Zapytanie już jest tak skonstruowane, że nie zwróci Ci nic niezgodnego z Twoim założeniem. Nie używaj więc SQL_ReadResult. Użyj SQL_NumResults
. Jeśli zwrócona wartość jest większa od zera, zapytanie "coś" zwróciło, więc rekord istnieje.
2. Nie używaj tablicy globalnej sprawdzane_party. Nie jest to błędem, ale można zrobić to lepiej. W tablicy data, w której przekazujesz ID, możesz przekazać również nazwę party, aby wykonywać dalsze operacje na tej nazwie. Wystarczy coś takiego, zakładając że party ma długość 32:
new data[33] data[0] = id copy(data[1], 31, party);
3. tuple do bazy danych twórz najlepiej w plugin_cfg lub ewentualnie w plugin_init. Nie ma sensu marnować zasobów na tworzenie go przy każdym zapytaniu. Lepiej utworzyć zmienną globalną i w niej tuple przechowywać dla wszystkich zapytań.