Database Fehler

09/23/2015 18:33 -Venom'#1
Hallo Elitepvpers,
da ich seit Tagen ein Problem mit meiner Datenbank habe frage ich hier mal nach Rat.

Unser Profession System (Berufe System)
möchte einfach die Berufe nicht speichern

So sieht in der DbManagerSave.cpp die Funktion aus:

Code:
#ifdef __WBQT_PROFESSION
void CDbManager::SaveProfession(CMover *pMover, CQuery *pQuery, char *szQuery)
{
	char OneRecipe[16];
	char szRecipes[4096];
	vector<DWORD> & vecKnownRecipes = pMover->GetKnownRecipes();
	SQLINTEGER cbLen = SQL_NTS;
	DWORD dwProfession = pMover->GetProfession();
	USHORT nProfessionLevel = pMover->GetProfessionLevel();
	int nLen = 0;

	for (auto iter : vecKnownRecipes)
	{
		nLen += sprintf(OneRecipe, "%d,", iter);
		ASSERT(nLen < 4095); // + $\0
		strncat(szRecipes, OneRecipe, 16);
	}
	strcat(szRecipes, NullStr);

	sprintf(szQuery, "{call SAVE_PROFESSION('%07d', '%02d', ?, ?, ?)}", pMover->m_idPlayer, g_appInfo.dwSys);

	ASSERT(pQuery->BindParameter(1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 4096, 0, szRecipes, 0, &cbLen));
	ASSERT(pQuery->BindParameter(2, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &dwProfession, 0, 0));
	ASSERT(pQuery->BindParameter(3, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &nProfessionLevel, 0, 0));

	if (!pQuery->Exec(szQuery))
	{
		WRITE_ERROR();
	}
}
#endif
Sobald man ein Beruf auswählt haut er diesen Error aus:
Code:
2015/ 9/23   18:01:44   CDbManager::SaveProfession 1045

2015/ 9/23   18:03:14   CDbManager::SaveProfession 1045
Sprich in der DbManagerSave.cpp hier:
Code:
	if (!pQuery->Exec(szQuery))
	{
		WRITE_ERROR();
	}
Könnte einer von euch so nett sein und mir bei diesem kleinen Problem helfen ?
09/23/2015 18:35 Drabur#2
CQueryLogFile?
09/23/2015 18:37 -Venom'#3
Quote:
Originally Posted by Drabur View Post
CQueryLogFile?
Wird keine erstellt. Das hätte mir dann wahrscheinlich auch geholfen

Einmal den Error etwas umgeschrieben dabei kommt das raus:

[2015-09-23 19:21:04]0001092, 01, $, 4, 1
[2015-09-23 19:21:10]0000005, 01, $$, 4, 2
[2015-09-23 19:21:37]0001092, 01, $$$, 4, 2

Er nimmt alles außer die Profession ID Oder das Level nimmt er nicht
09/24/2015 17:29 xTwiLightx#4
Code:
&dwProfession
&nProfessionLevel
Aus welchem Grund nimmst du die Referenzen statt der direkten Werte?Wenn ich das richtig verstehe sind dwProfession und nProfessionlevel doch keine Pointer.
09/24/2015 18:35 -Venom'#5
Quote:
Originally Posted by xTwiLightx View Post
Code:
&dwProfession
&nProfessionLevel
Aus welchem Grund nimmst du die Referenzen statt der direkten Werte?Wenn ich das richtig verstehe sind dwProfession und nProfessionlevel doch keine Pointer.
Das Problem ist bereits behoben
09/24/2015 21:32 xTwiLightx#6
Quote:
Originally Posted by Gentros' View Post
Das Problem ist bereits behoben
Aber wie 95% der Benutzer hier nur nicht die Lösung mit den Leuten teilen.

Weiter so!
09/24/2015 21:47 -Venom'#7
Quote:
Originally Posted by xTwiLightx View Post
Aber wie 95% der Benutzer hier nur nicht die Lösung mit den Leuten teilen.

Weiter so!
Weil ja auch jemand so ein System hat

Aber bitte hier die Lösung des Problems


Code:
#ifdef __WBQT_PROFESSION
void CDbManager::SaveProfession(CMover *pMover, CQuery *pQuery, char *szQuery)
{
	char OneRecipe[16];
	char szRecipes[4096];
	vector<DWORD> & vecKnownRecipes = pMover->GetKnownRecipes();
	SQLINTEGER cbLen = SQL_NTS;
	DWORD dwProfession = pMover->GetProfession();
	USHORT nProfessionLevel = pMover->GetProfessionLevel();
	int nLen = 0;

	for (auto iter : vecKnownRecipes)
	{
		nLen += sprintf(OneRecipe, "%d,", iter);
		ASSERT(nLen < 4095); // + $\0
		strncat(szRecipes, OneRecipe, 16);
	}
	strcat(szRecipes, NullStr);



	sprintf(szQuery, "{call SAVE_PROFESSION('%07d', '%02d', '%s', '%d', '%d')}", pMover->m_idPlayer, g_appInfo.dwSys, szRecipes, dwProfession, nProfessionLevel);


	if (!pQuery->Exec(szQuery))
	{
		WriteLog("%07d, %02d, %s, %i, %i ", pMover->m_idPlayer, g_appInfo.dwSys, szRecipes, dwProfession, nProfessionLevel);
	}
}
#endif
09/25/2015 15:30 xTwiLightx#8
Es geht nicht um eine SPEZIFISCHE Lösung, sondern eine Allgemeine Lösung, bzw Aufklärung der Problemursache.