Aączenie C++ z Ms SQL Serwer
Opracowanie: kermit08@o2.pl
Podstawowe zródła informacji
- ODBC Help z Microsoft Data Access SDK 2.8
SQL API
- Pomoc z Borland C++ Builder 6
bardzo pomocne opisy komponentów
- Pomoc z Borland Developer Studio 2006
opisy komponentów
Informacje dodatkowe
które mogą być przydatne przy linkowaniu programów z SQL API w BCB6:
- temat: ODBC API QUESTION na grupie: borland.public.cppbuilder.winapi
http://groups.google.com/group/borland.public.cppbuilder.winapi/browse_thread/thread/80098c66652502f2/1de343fd360dc60
oraz ewentualnie:
- temat: Linker Error: Unresolved external '_SQLAllocHandle'...
na grupie: borland.public.cppbuilder.ide
http://groups.google.com/group/borland.public.cppbuilder.ide/browse_thread/thread/52bdaca658362427/12596f31e35a6e66
Przykładowe rozwiązania
Z użyciem komponentów, dynamicznie, BDS
Klasa udostępniająca możliwość wysyłania zapytań i otrzymywania odpowiedzi
//---------------------------------------------------------------------------
class TPolaczenieDoBazy
{
private:
TSQLConnection *SQLConnection;
TSQLQuery *SQLQuery;
public:
__fastcall TPolaczenieDoBazy(AnsiString Login, AnsiString Haslo);
__fastcall ~TPolaczenieDoBazy();
AnsiString __fastcall Z(AnsiString sql);
int __fastcall Z(AnsiString sql, TStringList *Wynik);
};
//---------------------------------------------------------------------------
__fastcall TPolaczenieDoBazy::TPolaczenieDoBazy(AnsiString Login, AnsiString Haslo)
{
// tworzenie obiektu do obsługi połączenia
SQLConnection = new TSQLConnection(NULL);
SQLConnection->ConnectionName = "MSSQLConnection";
SQLConnection->DriverName = "MSSQL";
SQLConnection->GetDriverFunc = "getSQLDriverMSSQL";
SQLConnection->LibraryName = "dbxmss30.dll";
SQLConnection->LoginPrompt = false;
SQLConnection->Params->Clear();
SQLConnection->Params->Add("DriverName=MSSQL");
SQLConnection->Params->Add("HostName=NazwaKomuputera\\SQLEXPRESS");//Nazwa serwera
SQLConnection->Params->Add("DataBase=NazwaBazy"); // Nazwa bazy danych
SQLConnection->Params->Add("User_Name="); // Login
SQLConnection->Params->Add("Password="); // Haslo
SQLConnection->Params->Add("BlobSize=-1");
SQLConnection->Params->Add("ErrorResourceFile=");
SQLConnection->Params->Add("LocaleCode=0000");
SQLConnection->Params->Add("MSSQL TransIsolation=ReadCommited");
SQLConnection->Params->Add("OS Authentication=True");
// ^- w zależności od konfiguracji serwera
SQLConnection->Params->Add("Prepare SQL=False");
SQLConnection->VendorLib = "oledb";
// tworzenie obiektu do przetwarzania zapytań SQL
SQLQuery = new TSQLQuery(NULL);
SQLQuery->MaxBlobSize = -1;
SQLQuery->Params->Clear();
SQLQuery->SQLConnection = SQLConnection;
}
//---------------------------------------------------------------------------
__fastcall TPolaczenieDoBazy::~TPolaczenieDoBazy()
{
delete SQLConnection;
delete SQLQuery;
}
//---------------------------------------------------------------------------
AnsiString __fastcall TPolaczenieDoBazy::Z(AnsiString sql)
{
// przykładowy sposób odczytania wyniku zapytania
// jako zmiennej typu AnsiString
// w postaci ciągów znaków oddzielonych przecinkami i cudzysłowami
// zagnieżdżone pola i rekordy
TStringList *Wynik, *Wiersz;
AnsiString ret;
int i;
Wynik = new TStringList;
Wiersz = new TStringList;
SQLQuery->SQL->Clear();
SQLQuery->SQL->Add(sql);
SQLQuery->Open();
// (można jeszcze przewidzieć wariant pustej odpowiedzi jako oddzielny)
Wynik->Clear();
while(!SQLQuery->Eof)
{
Wiersz->Clear();
for(i = 0; i < SQLQuery->FieldCount; i++)
{
Wiersz->Add(SQLQuery->Fields->Fields[i]->AsString.Trim());
}
SQLQuery->Next();
Wynik->Add(Wiersz->CommaText);
}
SQLQuery->Close();
ret = Wynik->CommaText;
delete Wiersz;
delete Wynik;
return ret;
}
//---------------------------------------------------------------------------
int __fastcall TPolaczenieDoBazy::Z(AnsiString sql, TStringList *Wynik)
{
// przykładowy sposób odczytania wyniku zapytania
// jako zmiennej typu StringList
// w postaci listy ciągów znaków - rekordów
// zawierających pola - ciągi znaków oddzielonych przecinkami i cudzysłowami
TStringList *Wiersz;
int i;
Wiersz = new TStringList;
SQLQuery->SQL->Clear();
SQLQuery->SQL->Add(sql);
SQLQuery->Open();
// (można jeszcze przewidzieć wariant pustej odpowiedzi jako oddzielny)
Wynik->Clear();
while(!SQLQuery->Eof)
{
Wiersz->Clear();
for(i = 0; i < SQLQuery->FieldCount; i++)
{
Wiersz->Add(SQLQuery->Fields->Fields[i]->AsString.Trim());
}
SQLQuery->Next();
Wynik->Add(Wiersz->CommaText);
}
SQLQuery->Close();
delete Wiersz;
return SQLQuery->FieldCount;
}
//---------------------------------------------------------------------------
Przykład użycia klasy
void __fastcall TForm1::Button3Click(TObject *Sender)
{
TPolaczenieDoBazy *PolaczenieDoBazy = new TPolaczenieDoBazy("", "");
//Wypełnienie komponentu Memo1 wynikiem zapytania na dwa sposoby:
// 1:
//Memo1->Lines->CommaText
= PolaczenieDoBazy->Z("SELECT [Kolumna],[Inna] FROM [Testowa].[dbo].[Tabela]");
// 2:
PolaczenieDoBazy->Z("SELECT [Kolumna],[Inna] FROM [Testowa].[dbo].[Tabela]",
(TStringList*) Memo1->Lines);
delete PolaczenieDoBazy;
}
//---------------------------------------------------------------------------
Wyszukiwarka
Podobne podstrony:
SQL MS SQLMS SQL Server 6 5 1MS SQL Server 6 5 Zarządzanie indeksowaniem danych i kluczamiMS SQL Server 6 5 Bezpieczeństwo w SQL ServerMS SQL Server 6 5 Bezpieczeństwo w SQL ServerMS SQL Server 6 5 Zarządzanie i tworzenie widokówBazy systemowe w MS SQLKurs MS SQL CentrumXPMS SQL Server 6 5Serwer SQL 2008 Administracja i programowanieinformatyka programowanie serwera oracle 11g sql iSerwer SQL 2008 Usługi biznesowe Analiza i eksploracja danychsql framework aug94MS MATEROBRECZE MS OK 02więcej podobnych podstron