Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

jak to zrobić... ?

36 views
Skip to first unread message

Piotr Pakos

unread,
Oct 28, 2004, 8:51:59 AM10/28/04
to
Mam bazę danych w formacie MS Access (.mdb), jak uzyskać do niej
dostęp z poziomu Visual C++ .NET? Chodzi mi możliwość operowania na
niej za pomocą kwerend SQL. Z góry dziękuję za wszelkie wskazówki.

--
P i o t r P a k o s
email: ppakos@[NO_SPAM]tlen.pl
gsm: 888211926
gg: 21094

Rafał Posmyk

unread,
Oct 28, 2004, 8:58:47 AM10/28/04
to
Piotr Pakos wrote at Donnerstag, 28. Oktober 2004 14:51:

> Mam bazę danych w formacie MS Access (.mdb), jak uzyskać do niej
> dostęp z poziomu Visual C++ .NET?

Zarowno C++ jak i rodzina jezykow technologii .NET (C#, VB.NET)
posiada "bindings" do baz danych silinka JetEngine, a konkretnie
chodzi o ADODB i ADO.NET oraz DAO i ODBC w przypadku C/C++ (
DAO dla .NET chyba nie ma, ODBC OLEDB Provider dla .NET pewnie
sie znajdzie)

Ciao, Smyk
--
Fju fju - powiedział Ćwirek

Grzegorz Danowski

unread,
Oct 28, 2004, 10:29:20 AM10/28/04
to

Użytkownik "Piotr Pakos" <ppa...@tlen.pl> napisał w wiadomości
news:5rq1o05ceve96a7m6...@4ax.com...

> Mam bazę danych w formacie MS Access (.mdb), jak uzyskać do niej
> dostęp z poziomu Visual C++ .NET? Chodzi mi możliwość operowania na
> niej za pomocą kwerend SQL. Z góry dziękuję za wszelkie wskazówki.
>

W sumie, to nie ma specjalnego znaczenia czy baza jest obsługiwana za pomocą
Jeta, czy też MS SQL - jeśli korzystasz z ADO.NET i providera OleDb, to kod
będzie w dużej części identyczny, np. kod działający zarówno w Accessie jak
i SQL Serverze:

#include "stdafx.h"

#using <mscorlib.dll>

using namespace System;
using namespace System::Data::OleDb;

__gc public class Testy
{
private:
OleDbConnection* con;
public:
Testy()
{
//zamiast odwoływać się do pliku udl, możesz wpisać
//connection string z ręki
con = new OleDbConnection("File name=E:\\myConnect.udl");
}
void TworzTab()
{
String *sql =
"Create Table MojaTabelka("
" IdRek Int Identity(1,1) Constraint Pk Primary Key,"
" Imie VarChar(20),"
" Nazwisko Varchar(30)"
")";

OleDbCommand* myCom = new OleDbCommand(sql, con);
con->Open();
try
{
myCom->ExecuteNonQuery();
}
catch(OleDbException* ex)
{
System::Console::WriteLine(ex->Message);
}
con->Close();
}

void DodRekTab()
{
String* sql = "Insert Into MojaTabelka (Imie, Nazwisko) "
"Values('Rafał', 'Posmyk')";
OleDbCommand* myCom = new OleDbCommand(sql, con);

con->Open();
myCom->ExecuteNonQuery();

myCom->CommandText = "Insert Into MojaTabelka (Imie, Nazwisko) "
"Values('Piotr', 'Pakos')";
myCom->ExecuteNonQuery();

myCom->CommandText = "Insert Into MojaTabelka (Imie, Nazwisko) "
"Values('Krzysztof', 'Naworyta')";
myCom->ExecuteNonQuery();

con->Close();
}

void PokazTab()
{
String *sql = "Select * From MojaTabelka";
OleDbCommand* myCom = new OleDbCommand(sql, con);

con->Open();
OleDbDataReader* myRead = myCom->ExecuteReader();
while(myRead->Read())
{
System::Console::WriteLine("{0}\t{1}\t{2}",
myRead->GetInt32(0).ToString(),
myRead->GetString(1),
myRead->GetString(2));
}

con->Close();
}

void KasTab()
{
String *sql = "Drop Table MojaTabelka";
OleDbCommand* myCom = new OleDbCommand(sql, con);
con->Open();
myCom->ExecuteNonQuery();
con->Close();
}
};


int _tmain()
{
Testy* t = new Testy();

t->TworzTab();
t->DodRekTab();
t->PokazTab();
t->KasTab();

Console::WriteLine("Koniec roboty");
Console::ReadLine();
return 0;
}

Na sieci znajdziesz sporo przykładów, zwłaszcza do c# (który zreszto wydaje
mi się dużo zgrabniejszy niż mc++) lub vb.net. W sumie to nie ma znaczenia w
jakim języku są napisane, bo korzystanie z bibliotek frameworkowych jest
niemal identyczne.

Pozdrawiam
Grzegorz

Piotr Pakos

unread,
Oct 29, 2004, 4:59:21 AM10/29/04
to
>W sumie, to nie ma specjalnego znaczenia czy baza jest obsługiwana za pomocą
>Jeta, czy też MS SQL - jeśli korzystasz z ADO.NET i providera OleDb, to kod
>będzie w dużej części identyczny, np. kod działający zarówno w Accessie jak
>i SQL Serverze:

Czy mogę zamienić w powyższym przykładzie "myConnect.udl" plikiem
msaccessa .mdb?

Grzegorz Danowski

unread,
Oct 29, 2004, 6:25:06 AM10/29/04
to
Użytkownik "Piotr Pakos" <ppa...@tlen.pl> napisał w wiadomości
news:rg14o0hth5n2bht8i...@4ax.com...

> >W sumie, to nie ma specjalnego znaczenia czy baza jest obsługiwana za
> >pomocą
>>Jeta, czy też MS SQL - jeśli korzystasz z ADO.NET i providera OleDb, to
>>kod
>>będzie w dużej części identyczny, np. kod działający zarówno w Accessie
>>jak
>>i SQL Serverze:
>
> Czy mogę zamienić w powyższym przykładzie "myConnect.udl" plikiem
> msaccessa .mdb?

Możesz zamienić na pełny connection string, np (Access):
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\Development\Aplikacje
Access\Testy\MojaBaza.mdb;Persist Security Info=False

albo (serwer MsSQL):

Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security
Info=False;Initial Catalog=Northwind;Data Source=GDNBOOK

itd.

Aby szybko utworzyć prawidłowy ConnectionString, to najlepiej i tak posłużyć
się udl:

1) nowy plik tekstowy, zmienić rozszerzenie na udl,

2) kliknąć go dwukrotnie - powinien się otworzyć "Microsoft Data Access" -
wybrać odpowiednie źródło, sprawdzić klikając na "Testuj połączenie",

3) po zamknięciu apletu z punktu 2. otworzyć plik udl w dowolnym edytorze,
np. notatniku, wordpadzie i skopiować zawartą tam ścieżkę.

Można też skorzystać z pomocy na sieci, np.:
http://www.connectionstrings.com/

Jednak moim zdaniem, na początku odwoływanie się do zewnętrznego pliku udl,
jest bardzo wygodne :-).

Pozdrawiam

Grzegorz

0 new messages