Reklam
Prosedür eksik veya hatalı olabilir
Connection kuramamış olabilir manuel çalıştırdğında aynı hatayı üretiyor mu ?
Prosedür eksik veya hatalı olabilir
int'in içinde sayılar var varchar yapınız düzelmezse online bağlanırım
EXEC UPDATE_USER_KNIGHTS_RANKrankları oyun içi otomatik güncellediği halde oluyor
EXEC UPDATE_USER_KNIGHTS_RANK
EXEC UPDATE_USER_PERSONAL_RANK
EXEC UPDATE_KNIGHTS_RATING
bunları direkt çalıştırdığındada hatayı alıyor musun ?
c++ source tarafındaki kodu at birde SQL kodu at bana yeni kod şeklinde düzeltip vereyim büyük ihtimalle bağlantı hatası oldugu için kodda atlama yapıyorbu sorun devam ediyor hayla GameServer.exe de yardımcı olabilecek varmı
Database error: [ ODBC Error - 30.1.2025 6:18:0 ] ] Source: {CALL UPDATE_RANKS} Error: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Arithmetic overflow error converting expression to data type int. Description: Failed to execute statement.
c++ source tarafındaki kodu at birde SQL kodu at bana yeni kod şeklinde düzeltip vereyim büyük ihtimalle bağlantı hatası oldugu için kodda atlama yapıyor
SQL ProsedürünDBAgent.cpp
void CDBAgent::UpdateRanks()
{
unique_ptr<OdbcCommand> dbCommand(m_GameDB->CreateCommand());
if (dbCommand.get() == nullptr)
return;
if (!dbCommand->Execute(_T("{CALL UPDATE_RANKS}")))
ReportSQLError(m_GameDB->GetError());
}
sql
ALTER PROCEDURE [dbo].[UPDATE_RANKS]
AS
BEGIN
EXEC UPDATE_USER_KNIGHTS_RANK
EXEC UPDATE_USER_PERSONAL_RANK
EXEC UPDATE_KNIGHTS_RATING
END
ALTER PROCEDURE [dbo].[UPDATE_RANKS]
AS
BEGIN
SET NOCOUNT ON;
SET ARITHABORT ON; -- Aritmetik taşma hataları önlemesi için
SET NUMERIC_ROUNDABORT OFF;
BEGIN TRY
EXEC UPDATE_USER_KNIGHTS_RANK;
EXEC UPDATE_USER_PERSONAL_RANK;
EXEC UPDATE_KNIGHTS_RATING;
END TRY
BEGIN CATCH
-- Hata loglama
PRINT 'Hata oluştu: ' + ERROR_MESSAGE();
END CATCH;
END;
void CDBAgent::UpdateRanks()
{
unique_ptr<OdbcCommand> dbCommand(m_GameDB->CreateCommand());
if (dbCommand == nullptr)
{
std::cerr << "[Error] Failed to create ODBC command!" << std::endl;
return;
}
// SQL prosedürünü calıstırır
if (!dbCommand->Execute(_T("{CALL UPDATE_RANKS}")))
{
std::string errorMsg = m_GameDB->GetError();
std::cerr << "[SQL Error] UPDATE_RANKS execution failed: " << errorMsg << std::endl;
ReportSQLError(errorMsg);
}
else
{
std::cout << "[Success] UPDATE_RANKS executed successfully!" << std::endl;
}
}