Wojciech Gardziński

Wojciech Gardziński Mieć rację godzinę
wcześniej niż inni:
przez godzinę być
...

Temat: Współpraca AFINA z internetowymi bazami danych

Film:
http://afin.net/webcasts/Demo_AfinNetAdoServiceMySQL_A...

Oto nowoczesna architektura analityczna!

Z jednej strony:
1) Serwery - gdzieś na świecie (obojętnie gdzie)
2) Pełna autoryzacja dostępu
3) Ogromna szybkość przetwarzania zapytań (bo po to właśnie są serwery)

a z drugiej strony:
4) Excel jako edytor raportów - nie interfejs, czyli wyświetlanie tego, co da nam serwer - EDYTOR - robimy zapytania, jakie chcemy!
5) Pełna elastyczność, formaty, doskonała i powszechna znajomość Excela
6) Każda komórka oddzielnie(!), czyli 100% elastyczności, składa swoje zapytanie "detaliczne" i otrzymuje odpowiedź - wartość.

A wszystko działa z prędkością światła - najdłużej zajmuje owa autoryzacja dostępu, ale, w przypadku poważnych zastosowań, jest naturalna i konieczna.

OTO WSPÓŁPRACA KLIENTA Z "CHMURĄ".
(C) AFIN 2006-2011

konto usunięte

Temat: Współpraca AFINA z internetowymi bazami danych

Straciłem wzrok
Daniel Grabowski

Daniel Grabowski Interaktywne
planowanie produkcji
on-line z MES

Temat: Współpraca AFINA z internetowymi bazami danych

Łooo maaatkooo... dawno takich bzdur nie czytałem.
Jak rozumiem, to ma być reklama - tak?
Skoro tak, to OK - reklam a ma swoje prawa, czyli im głupsza tym lepsza.
Żeby była jasność - chodzi mi o ten post na grupie "Bazy Danych".

Poza tym, fajnie to wymyśliłeś - za to realizacja jest już tragiczna. ConnectionString bezpośrednio w arkuszu, beż żadnego alisu; "formuły" pomieszane z ConnectionString + czysty SQL, który - zresztą, zwraca skalar. Ciekawe co się stanie jak zwróci macierz... Przeliczanie wszystkich komórek, a nie tylko tych, które zostały zmienione itd. itp.

Swoją droga, arkusz składający się z wielu dziesiątek (setek?) takich formuł musi być fajną zabawą przy refaktorowaniu. Trochę ratuje możliwość parametryzowania zapytań, za pomocą wartości w innych komórkach arkusza. Ale tylko trochę...

Acha i jeszcze jedno - to ma tyle wspólnego z cloud computing, co ja z fakirem...

No i to zdanie rozbawiło mnie do łez "A wszystko działa z prędkością światła".
Człowieku, przecież tu KAŻDE zapytanie wykonuje się dla KAŻDEJ komórki, czy tak?
Jeżeli jest tak, jak zgaduję - to to jest maskara.
Wojciech Gardziński

Wojciech Gardziński Mieć rację godzinę
wcześniej niż inni:
przez godzinę być
...

Temat: Współpraca AFINA z internetowymi bazami danych

Daniel "wloochacz" Grabowski:
Szanowny Panie
Łooo maaatkooo... dawno takich bzdur nie czytałem.
Jak rozumiem, to ma być reklama - tak?
Tak, to jest reklama.
Skoro tak, to OK - reklam a ma swoje prawa, czyli im głupsza tym lepsza.
Nie zgadzam się.
Żeby była jasność - chodzi mi o ten post na grupie "Bazy Danych".
OK.

Poza tym, fajnie to wymyśliłeś - za to realizacja jest już tragiczna.
To ja już nie wiem, czy fajnie, czy niefajnie?

A tu, przyznam, bardzo sensowne spostrzeżenia:
ConnectionString bezpośrednio w arkuszu, beż żadnego alisu;
Może być alias, czyli schowanie CS - tu przykład:
http://www.goldenline.pl/forum/1723390/wlasna-funkcja-...
Ale w tym wypadku to nie przeszkadza, bo i tak nie piszę go ręcznie.
"formuły" pomieszane z ConnectionString + czysty SQL, który - zresztą, zwraca skalar.
Bo te akurat są tak zrobione, że zwracają pojedynczą wartość.
Ciekawe co się stanie jak zwróci macierz...
Nic się nie stanie, może zwracać.
Przeliczanie wszystkich komórek, a nie tylko tych, które zostały zmienione itd. itp.

Swoją droga, arkusz składający się z wielu dziesiątek (setek?) takich formuł musi być fajną zabawą przy refaktorowaniu.
Tak. Pociągnięcie myszki w dół, czyli najzwyklejsze kopiowanie formuł.
Excel to umożliwia.
Trochę ratuje możliwość parametryzowania zapytań, za pomocą wartości w innych komórkach arkusza. Ale tylko trochę...
Czyli to, co jest niemożliwe w innych systemach, a fajne w Excelu, NAGLE staje się wadą... ciekawe.

Acha i jeszcze jedno - to ma tyle wspólnego z cloud computing, co ja z fakirem...
To polecam naostrzyć igły.

No i to zdanie rozbawiło mnie do łez "A wszystko działa z prędkością światła".
Człowieku, przecież tu KAŻDE zapytanie wykonuje się dla KAŻDEJ komórki, czy tak?
TAK. Ale, proszę Pana, to że Pan nie umie zadawać zapytań detalicznych hurtowo, nie znaczy, że nikt nie umie.
Jeżeli jest tak, jak zgaduję - to to jest maskara.
MASAKRA!!! LUDZIE MASAKRA!!! 1000 zapytań detalicznych w kilka sekund. MA-SA-KRA.
(Ma Pan rację że to masakra - normalnie. Ale - proszę się przyjrzeć - tu ten problem jest rozwiązany! Filmy są nagrywane w czasie rzeczywistym - bez żadnych cięć.)

PS. Gratuluję trafności "przyczepek". Ale, jak Pan widzi, ja też wiem, o czym mówimy.

P.S.2
Z czystej ciekawości zrobiłem testy dla tego filmiku w przeliczaniu DETALICZNYM NORMALNYM (komórka po komórce) i przeliczaniu DETALICZNYM HURTOWYM (paczkami)

Wszystkie warunki jak na filmie powyżej (średnie z 3 prób):
1) detalicznie normalnie (taki sposób określił Pan słowem "masakra") - 13 s
2) detalicznie hurtowo < 1 s
(Tylko w AFIN.NET)Wojciech Gardziński edytował(a) ten post dnia 05.03.11 o godzinie 18:54
Wojciech Gardziński

Wojciech Gardziński Mieć rację godzinę
wcześniej niż inni:
przez godzinę być
...

Temat: Współpraca AFINA z internetowymi bazami danych

Daniel "wloochacz" Grabowski:
No i to zdanie rozbawiło mnie do łez "A wszystko działa z prędkością światła".
Człowieku, przecież tu KAŻDE zapytanie wykonuje się dla KAŻDEJ komórki, czy tak?
Jeżeli jest tak, jak zgaduję - to to jest maskara.

Jak tam Szanownego Pana śmiech?
(Myślę, że powinien Pan próbować zrozumieć, zanim Pan coś wyśmieje.)Wojciech Gardziński edytował(a) ten post dnia 10.03.11 o godzinie 09:21
Daniel Grabowski

Daniel Grabowski Interaktywne
planowanie produkcji
on-line z MES

Temat: Współpraca AFINA z internetowymi bazami danych

Wojciech Gardziński:
Daniel "wloochacz" Grabowski:
Szanowny Panie
Łooo maaatkooo... dawno takich bzdur nie czytałem.
Jak rozumiem, to ma być reklama - tak?
Tak, to jest reklama.
Skoro tak, to OK - reklam a ma swoje prawa, czyli im głupsza tym lepsza.
Nie zgadzam się.
Żeby była jasność - chodzi mi o ten post na grupie "Bazy Danych".
OK.

Poza tym, fajnie to wymyśliłeś - za to realizacja jest już tragiczna.
To ja już nie wiem, czy fajnie, czy niefajnie?
Fajnie, że działa z bazą danych.
Niefajnie, że działa bezpośrednio z bazą danych.
Bezpośrednio, czyli zanurzony w Excel ConnString i SQL - to jest tragedia, a nie model.
Skoro nie rozumiesz, to powodzenia.
A tu, przyznam, bardzo sensowne spostrzeżenia:
ConnectionString bezpośrednio w arkuszu, beż żadnego alisu;
Może być alias, czyli schowanie CS - tu przykład:
http://www.goldenline.pl/forum/1723390/wlasna-funkcja-...
Oho.
Dobre, nawet się nazywa "data model", tylko kto będzie w stanie z tego skorzystać, jeżeli nie zna:
1) SQLa
2) Struktury tabel w bazie danych
?
Ale w tym wypadku to nie przeszkadza, bo i tak nie piszę go ręcznie.
"formuły" pomieszane z ConnectionString + czysty SQL, który - zresztą, zwraca skalar.
Bo te akurat są tak zrobione, że zwracają pojedynczą wartość.
Tak, widziałem - umiem czytać.
Ciekawe co się stanie jak zwróci macierz...
Nic się nie stanie, może zwracać.
Zraz, zaraz - nic się nie stanie (czyli nic nie zwróci) czy jak, bo nie rozumiem? Jak do pojedynczej komórki zapisać tabele, czyli którą zwróci zapytanie?
A więc, nie mam na myśli zapytania typ (jak na filmie)
select sum(kwota) from tabela

a
select klient, sum(kwota) from tabela group by klient order by klient


Co się stanie, zwróci mi tabelę do komórki?
Przeliczanie wszystkich komórek, a nie tylko tych, które zostały zmienione itd. itp.

Swoją droga, arkusz składający się z wielu dziesiątek (setek?) takich formuł musi być fajną zabawą przy refaktorowaniu.
Tak. Pociągnięcie myszki w dół, czyli najzwyklejsze kopiowanie formuł.
Zgoda, ale Excel zmieni adresy komórek w wyrażeniu, ale nie zmieni wyrażenia w zapisanego jako SQL - bo go nie zna i nie rozumie.
Najprostszy przykład:
Załóżmy że w kolumnie A jest lista stu klientów
a w kolumnie B jest zapytanie w postaci:
select sum(netto) from sprzedaz where klient = A1

Excel zmieni adres komórki przy A1, a co jeżeli chcesz zmienić to zapytanie na formę:
select sum(netto) - sum(koszt) from sprzedaz where klient = A1

Search and Replace, bo Excel to możliwa?
Excel to umożliwia.
Zabawne ;-)

Trochę ratuje możliwość parametryzowania zapytań, za pomocą wartości w innych komórkach arkusza. Ale tylko trochę...
Czyli to, co jest niemożliwe w innych systemach, a fajne w Excelu, NAGLE staje się wadą... ciekawe.
To, że szanowny Pan nie zna innych systemów, które to umożliwiają nie oznacza że ich nie ma.
Po drugie gdzie wyczytałeś, że napisałem iż to wada? To zaleta jest oczywista - jako jedyna...
Acha i jeszcze jedno - to ma tyle wspólnego z cloud computing, co ja z fakirem...
To polecam naostrzyć igły.
A ja polecam się dokształcić; tego typu teksty nadają się na bełkotliwą marketingową ulotkę, a nie jako temat do dyskusji na technicznej grupie...
No i to zdanie rozbawiło mnie do łez "A wszystko działa z prędkością światła".
Człowieku, przecież tu KAŻDE zapytanie wykonuje się dla KAŻDEJ komórki, czy tak?
TAK. Ale, proszę Pana, to że Pan nie umie zadawać zapytań detalicznych hurtowo, nie znaczy, że nikt nie umie.
Co to znaczy "nie umie zadawać zapytań detalicznych hurtowo"?
Co to jest zapytanie detaliczne i czym różni się od hurtowego?
Jeżeli jest tak, jak zgaduję - to to jest maskara.
MASAKRA!!! LUDZIE MASAKRA!!! 1000 zapytań detalicznych w kilka sekund. MA-SA-KRA.
To jest powolne i angażuje istotne zasoby serwera bazodanowego,
jeżeli źródłem tego zapytania jest baza transakcyjna.
Jeżeli źródłem ma być Hurtowania danych, to dlaczego nie wykorzystać np.
http://www.powerpivot.com/
Wygląda lepiej, działa lepiej i jest za friko.
(Ma Pan rację że to masakra - normalnie. Ale - proszę się przyjrzeć - tu ten problem jest rozwiązany! Filmy są nagrywane w czasie rzeczywistym - bez żadnych cięć.)
A ile jest danych w tej bazie i jakie ona ma obciążenie?
100 rekordów?
1000?
PS. Gratuluję trafności "przyczepek". Ale, jak Pan widzi, ja też wiem, o czym mówimy.
Być może, ale osobiście uważam że ten patent jest mało sensowny - jest po prostu zbyt skomplikowany dla zwykłego użytkownika.
P.S.2
Z czystej ciekawości zrobiłem testy dla tego filmiku w przeliczaniu DETALICZNYM NORMALNYM (komórka po komórce) i przeliczaniu DETALICZNYM HURTOWYM (paczkami)
Co to dokładnie jest i czym w/w przeliczanie się różnią?
Wszystkie warunki jak na filmie powyżej (średnie z 3 prób):
1) detalicznie normalnie (taki sposób określił Pan słowem "masakra") - 13 s
2) detalicznie hurtowo < 1 s
A cache i bufory baz danych przed odpaleniem prób były czyszczone, czy nie?
Wojciech Gardziński

Wojciech Gardziński Mieć rację godzinę
wcześniej niż inni:
przez godzinę być
...

Temat: Współpraca AFINA z internetowymi bazami danych

Wstęp:
Szanowny Panie Danielu,
po pierwsze dziękuję, że poświęca Pan czas na wyjaśnienie swoich wątpliwości,
po drugie - tu tym bardziej się cieszę - że wiele z nich jest sensownych
Odpowiem więc Panu BEZ zgryźliwości, którą Pan stosuje.
Daniel "wloochacz" Grabowski:
Wojciech Gardziński:
Daniel "wloochacz" Grabowski:
Szanowny Panie
Łooo maaatkooo... dawno takich bzdur nie czytałem.
Jak rozumiem, to ma być reklama - tak?
Tak, to jest reklama.
Skoro tak, to OK - reklam a ma swoje prawa, czyli im głupsza tym lepsza.
Nie zgadzam się.
Żeby była jasność - chodzi mi o ten post na grupie "Bazy Danych".
OK.

Poza tym, fajnie to wymyśliłeś - za to realizacja jest już tragiczna.
To ja już nie wiem, czy fajnie, czy niefajnie?
Fajnie, że działa z bazą danych.
Tak, działa z bazą danych na dowolnym poziomie, czyli może działać z bazą transakcyjną (czego oczywiście nie polecam), ale może też z hurtownią - ale to Pan zasugerował i OK.
Niefajnie, że działa bezpośrednio z bazą danych.
wbrew pozorom - fajnie. Tu jednak rozumiem, o co Panu chodzi - o skomplikowanie tematu. Tak, ale to jest pokaz możliwości, w innym przykładzie jest dokładnie to samo, ale sprowadzone do prostej funkcji użytkownika
http://www.goldenline.pl/forum/2286304/ksiegowi-robimy...
Bezpośrednio, czyli zanurzony w Excel ConnString i SQL - to jest tragedia, a nie model.
Niekoniecznie. W AFINIE ta "tragedia" jest dość prosta do zrobienia, ja nie pisałem tych SQLków ręcznie (choć pewnie umiałbym) - zrobiło mi je Query
Tu przykład, jak można skomplikowanego SQLa przekształcić do prostej funkcji:
http://www.goldenline.pl/forum/1733630/abc-czyli-jak-k...
(Podam inne przykłady, jak tego będzie mało.)
Skoro nie rozumiesz, to powodzenia.
No, to właśnie mi się nie podoba w Pana wypowiedzi. Szanujmy się.
A tu, przyznam, bardzo sensowne spostrzeżenia:
ConnectionString bezpośrednio w arkuszu, beż żadnego alisu;
Może być alias, czyli schowanie CS - tu przykład:
http://www.goldenline.pl/forum/1723390/wlasna-funkcja-...
Oho.
Dobre, nawet się nazywa "data model", tylko kto będzie w stanie z tego skorzystać, jeżeli nie zna:
1) SQLa
jak wyżej. Funkcja DANE robi model, który "ukrywa" SQLki.
2) Struktury tabel w bazie danych
Tak, ale to "odkrywa" owo Query
?
Ale w tym wypadku to nie przeszkadza, bo i tak nie piszę go ręcznie.
"formuły" pomieszane z ConnectionString + czysty SQL, który - zresztą, zwraca skalar.
Bo te akurat są tak zrobione, że zwracają pojedynczą wartość.
Tak, widziałem - umiem czytać.
To miło. Pana pytanie o tablicę jest sensowne.
Ciekawe co się stanie jak zwróci macierz...
Nic się nie stanie, może zwracać.
Zraz, zaraz - nic się nie stanie (czyli nic nie zwróci) czy jak, bo nie rozumiem? Jak do pojedynczej komórki zapisać tabele, czyli którą zwróci zapytanie?
A więc, nie mam na myśli zapytania typ (jak na filmie)
select sum(kwota) from tabela

a
select klient, sum(kwota) from tabela group by klient order by klient


Co się stanie, zwróci mi tabelę do komórki?
Ta funkcja potrafi zwracać tabelę - oczywiście nie do komórki, tylko do talicy komórek, gdy jest wpisana jako funkcja tablicowa
Tu przykład takiego użycia:
http://www.goldenline.pl/forum/1733630/abc-czyli-jak-k...

Ale, ma Pan rację, to nie ten przypadek. W naszym przypadku jest rzeczywiście problem, gdy funkcja zwraca tablicę a jest w jednej komórce
Ja go rozwiązałem tak, że funkcja, która zwraca tablicę i "nie mieści się" w komórce, zwraca wartość informacyjną o tym fakcie, czyli np. kropkę - i użytkownik wie że tu coś nie tak.
Zastanawiałem się nad tym i zwracałem pierwszą wartość z tablicy, ale ponieważ nie było to wtedy "widoczne", mogło powodować błędy.
Przeliczanie wszystkich komórek, a nie tylko tych, które zostały zmienione itd. itp.

Swoją droga, arkusz składający się z wielu dziesiątek (setek?) takich formuł musi być fajną zabawą przy refaktorowaniu.
Tak. Pociągnięcie myszki w dół, czyli najzwyklejsze kopiowanie formuł.
Zgoda, ale Excel zmieni adresy komórek w wyrażeniu, ale nie zmieni wyrażenia w zapisanego jako SQL - bo go nie zna i nie rozumie.
oczywiście.
Najprostszy przykład:
Załóżmy że w kolumnie A jest lista stu klientów
a w kolumnie B jest zapytanie w postaci:
select sum(netto) from sprzedaz where klient = A1

Excel zmieni adres komórki przy A1, a co jeżeli chcesz zmienić to zapytanie na formę:
select sum(netto) - sum(koszt) from sprzedaz where klient = A1
tak nie, ale tak już zadziała:
="SELECT COUNT(*) FROM tabela WHERE klient =" & A1
Search and Replace, bo Excel to możliwa?
Nie, przez formuły łączące teksty.

Trochę ratuje możliwość parametryzowania zapytań, za pomocą wartości w innych komórkach arkusza. Ale tylko trochę...
Czyli to, co jest niemożliwe w innych systemach, a fajne w Excelu, NAGLE staje się wadą... ciekawe.
To, że szanowny Pan nie zna innych systemów, które to umożliwiają nie oznacza że ich nie ma.
Nie znam i chętnie poznam. Tylko arkusz kalkulacyjny umożliwia łączenie dynamiczne parametrów użytkownika z SQLem i ciągiem połączenia.
Tu przykład, jak się inni z tym męczą:
http://www.goldenline.pl/forum/2262904/zmienna-jako-cz...
Po drugie gdzie wyczytałeś, że napisałem iż to wada? To zaleta jest oczywista - jako jedyna...
OK.
Acha i jeszcze jedno - to ma tyle wspólnego z cloud computing, co ja z fakirem...
To polecam naostrzyć igły.
A ja polecam się dokształcić; tego typu teksty nadają się na bełkotliwą marketingową ulotkę, a nie jako temat do dyskusji na technicznej grupie...
Przesadza Pan.
Cloud Computing to chmura. Chmura to usługi. Usługi to serwery. Serwery to dane. Na filmie pokazałem korzystanie z usług udostępniania danych przez różne serwery.
No i to zdanie rozbawiło mnie do łez "A wszystko działa z prędkością światła".
Człowieku, przecież tu KAŻDE zapytanie wykonuje się dla KAŻDEJ komórki, czy tak?
TAK. Ale, proszę Pana, to że Pan nie umie zadawać zapytań detalicznych hurtowo, nie znaczy, że nikt nie umie.
Co to znaczy "nie umie zadawać zapytań detalicznych hurtowo"?
Co to jest zapytanie detaliczne i czym różni się od hurtowego?
No to jest właśnie patent tego rozwiązania. Jest dotąd nieznane, więc musze go wyjaśnić. Napisze niedługo na ten temat artykuł, ale tu ma Pan skrót:
http://www.goldenline.pl/forum/2240668/afin-net-google...
(ten rysunek z rakietą)
Jeżeli jest tak, jak zgaduję - to to jest maskara.
MASAKRA!!! LUDZIE MASAKRA!!! 1000 zapytań detalicznych w kilka sekund. MA-SA-KRA.
To jest powolne i angażuje istotne zasoby serwera bazodanowego,
jeżeli źródłem tego zapytania jest baza transakcyjna.
Oczywiście
Jeżeli źródłem ma być Hurtowania danych, to dlaczego nie wykorzystać np.
http://www.powerpivot.com/
Wygląda lepiej, działa lepiej i jest za friko.
Nieprawda. Power Pivot to GRUBY klient. A moje rozwiązanie to inteligentny CIENKI klient. Power pivot ma wady:
http://www.goldenline.pl/forum/1353548/wydajnosc-adoaf...
(Ma Pan rację że to masakra - normalnie. Ale - proszę się przyjrzeć - tu ten problem jest rozwiązany! Filmy są nagrywane w czasie rzeczywistym - bez żadnych cięć.)
A ile jest danych w tej bazie i jakie ona ma obciążenie?
100 rekordów?
1000?
Ta baza (MySQL) jest akurat mała. Ale na innych filmach pokazuję, że na większych też działa nieźle, bo szybkość działania zależy od serwera, nie od Excela.
PS. Gratuluję trafności "przyczepek". Ale, jak Pan widzi, ja też wiem, o czym mówimy.
Być może, ale osobiście uważam że ten patent jest mało sensowny - jest po prostu zbyt skomplikowany dla zwykłego użytkownika.
No nie. Bo można temat zawrzeć w owej funkcji "DANE()", która ukrywa technikalia, ma proste argumenty i jest bardzo przyjazna.
P.S.2
Z czystej ciekawości zrobiłem testy dla tego filmiku w przeliczaniu DETALICZNYM NORMALNYM (komórka po komórce) i przeliczaniu DETALICZNYM HURTOWYM (paczkami)
Co to dokładnie jest i czym w/w przeliczanie się różnią?
Sposobem zadawania zapytań do bazy - będzie artykuł, na razie rysunek
Wszystkie warunki jak na filmie powyżej (średnie z 3 prób):
1) detalicznie normalnie (taki sposób określił Pan słowem "masakra") - 13 s
2) detalicznie hurtowo < 1 s
> A cache i bufory baz danych przed odpaleniem prób były
czyszczone, czy nie?
Tu nie ma znaczenia. Ja pokazuję na danych testowych. Oczywiście w zastosowaniach realnych, trzeba na bazie zrobić jakieś triggery wspomagające itp. Da się to zrobić.

Pomimo uszczypków, pozdrawiam.
Liczę na dalszą dyskusję.
Wojciech Gardziński

Wojciech Gardziński Mieć rację godzinę
wcześniej niż inni:
przez godzinę być
...

Temat: Współpraca AFINA z internetowymi bazami danych

REWOLUCJA!
http://afin.net/articles/AfinNet_Article_IdeaOfAfinNet...
Jarosław B.

Jarosław B. Członek Zarządu /
Dyrektor Finansowy,
Saferoad CEE Sp. z
...

Temat: Współpraca AFINA z internetowymi bazami danych

dobre! nie wiedziałem, że AFIN działa tak sprytnie.
Wojciech Gardziński

Wojciech Gardziński Mieć rację godzinę
wcześniej niż inni:
przez godzinę być
...

Temat: Współpraca AFINA z internetowymi bazami danych

Jarosław Boniecki:
dobre! nie wiedziałem, że AFIN działa tak sprytnie.
Zechce Szanowny Klient potestować?

(Nieoficjalna jeszcze wersja testowa jest. Oczywiście zapraszam do testowania wszystkich chętnych.)Wojciech Gardziński edytował(a) ten post dnia 18.03.11 o godzinie 09:51

Następna dyskusja:

Centralna baza danych MySQL...




Wyślij zaproszenie do