ADO + MSSQL + C++ BUILDER (TURBO C++)

0

Witam, napisałem aplikację która za pomocą komponentów ADO w TURBO C++ dokonuje aktualizacji 3 danych w bazie MSSQL, lecz czasami występuję u mnie problem gdyż program przestaje działać debuger pokazuje wyjątek EOLEEXCEPTION a dokłądniej:

First chance exception at $7C812AFB. Exception class EOleException with message '[DBNETLIB][ConnectionOpen (Connect()).]Serwer SQL nie istnieje lub odmówiono do niego dostępu'. Process RS232_YSI.exe (1104)

Nie mogę obsłużyć tego wyjątku - w moim kodzie wyłapuję jak widać wszystkie wyjątki jakie występują a program dalej się sypie,

zamieszczam kod który jest odpowiedzialny za połączenie z bazą i wpisywanie do nich danych, dane są wpisywane co 5 sekund, proszę o pomoc. Z Góry dziękuję.

try
{
	CoInitialize(NULL);
	try
	{
		if(!Form1->ADOConnection1->Connected)
			Form1->ADOConnection1->Open();
		Form1->ADOCommand1->CommandText="update pomiary set pomiar =" +(String)RoundTo(pomiar1,-2)+ "where test='pomiar'";
		try
		{
			if(Form1->ADOConnection1->Connected)
			try
			{
				if(!Form1->ADOCommand1->Execute())
					Form1->Label3->Caption="Błąd bazy";
			}
			catch(...)
			{
				Form1->Label3->Caption="Błąd bazy";

			}
		}
		catch(...)
		{
			Form1->Label3->Caption="Błąd bazy";

		}
		Form1->ADOCommand1->CommandText="update pomiary set pomiar2 =" +(String)RoundTo(pomiar2,-2)+ "where test='pomiar'";
		try
		{
			if(Form1->ADOConnection1->Connected)
			try
			{
				if(!Form1->ADOCommand1->Execute())
				Form1->Label3->Caption="Błąd bazy";
			}
			catch(...)
			{
				Form1->Label3->Caption="Błąd bazy";
			}
		}
		catch(...)
		{
			Form1->Label3->Caption="Błąd bazy";
		}
		Form1->ADOCommand1->CommandText="update pomiary set pomiar3 =" +(String)RoundTo(pomiar3,-2)+ "where test='pomiar'";
		try
		{
			if(Form1->ADOConnection1->Connected)
			try
			{
			if(!Form1->ADOCommand1->Execute())
			Form1->Label3->Caption="Błąd bazy";
			}
			catch(...)
			{
				Form1->Label3->Caption="Błąd bazy";
			}
		}
		catch(...)
		{
			Form1->Label3->Caption="Błąd bazy";
		}
		try
		{
			Form1->ADOConnection1->Close();
		}
		catch(...)
		{
			Form1->Label3->Caption="Błąd bazy";
		}
	}
	catch(...)
	{
		Form1->Label3->Caption="Błąd bazy";
        }
}
catch(EOleException&)
{
	Form1->Label3->Caption="Problem z połączeniem MSSQL";
}
catch(...)
{
	Form1->Label3->Caption="Problem z połączeniem MSSQL";
	
}
CoUninitialize();
0

Wprawdzie nie programuje w turbo c++, ale pare mam pytań:
-otwierasz połaczenie a kiedy je zamykasz?
-ciągle sprawdzasz połaczenie nie wiem po co?
-kod jest strasznie długi a robi w sumie prostą rzecz, możesz go skrócić do paru wierszy
-czemu robisz update na 3 razy jak można to wszystko połaczyć w 1, np wykorzystaj parametry?
Zazwyczaj wystarczy raz ustawić connectora na przykład przy starcie programu i tyle.

1 użytkowników online, w tym zalogowanych: 0, gości: 1