Programowa instalacja BDE - Borland Database Engine

W tym post-cie opiszę jak ręcznie z kodu programu zainstalować BDE (Borland Database Engine).
Przykład będzie bazował na Delphi 7, ale z powodzeniem możemy też to zrobić w C++ Builder 6.0.

Co to jest BDE?


BDE (Borland Database Engine), w skrócie to zbiór bibliotek DLL i funkcji API, umożliwiających w dość prosty sposób komunikowanie się z systemami baz danych: Paradox, dBASE, FoxPro, MS Access i tekstowymi bazami danych. Przeznaczony w głównej mierze dla starszych produktów: Borland Delphi (np. Delphi 7) i Borland C++ Builder (np. C++ Bulider 6.0).
Więcej: patrz tutaj (język ang.)
i
tutaj (język ang.).
 

Uwaga - często na forach jest napisane, że licencja firmy Embarcadero (dawniej Borland), nie zezwala na ręczne programowe instalowanie tego narzędzia.
W Mojej opinii licencja Borland, zezwala na ręczne instalowanie tego narzędzia - oczywiście, gdy ma się licencję na produkt, np. Delphi 7 Professional. Ja taka licencję posiadam i z wiązku tym źródła do programu, które Wam udostępniam są dla Was darmowe do zastosowań komercyjnych.
Plik: bdeinst.dll, pochodzi z mojej licencji i służy do instalowania BDE, więc możecie śmiało korzystać z mojego komercyjnego programu.
Chcąc jednak pisać własne komercyjne oprogramowanie musicie mieć własną licencje, np. na Delphi 7 Professional.
Na potwierdzenie moich słów zamieszczam jeden z wielu linków, pokazujący że inne firmy programistyczne też tak właśnie myślą.
Patrz tutaj.
Jak się z tym nie zgadzasz wypowiedź sie na moim blogu!


Poniżej źródło wspomnianego programu:

Opis:

1. Startuje forma (zdarzenie OnShow);
2. Sprawdzamy, czy BDE jest zainstalowane za pomocą funkcji: BDEZainstalowane;
3. Jak jest to piszemy, że jest zainstalowane i następnie w zdarzeniu OnActivate formy zamykamy program;
4. Gdy nie jest pytamy się czy zainstalować;
5. Jak odpowiedź przecząca zamykamy tak samo program jak ma to miejsce, gdy BDE jest zainstalowane;
6. Jak odpowiedź twierdząca to uruchamiamy zewnętrzny program regsvr32.exe, który służy do uruchomienia biblioteki dll: bdeinst.dll, która służy do instalacji BDE;
7. Na końcu zamykamy program tak samo jak miało to miejsce w innych przypadkach;
8. Uwaga - gdy kod błędu podczas instalacji jest mniejszy niż 33 informujemy, że instalacja się nie powiodła;
9. Uwaga 2 - pamiętajmy o dołączeniu unit-ów: BDE i ShellApi;
10. Uwaga 3 - Pamiętaj, że gdy instalujesz program BDE musisz mieć prawa do instalacji programów w systemie operacyjnym, gdy nie jesteś zalogowany jako administrator systemu.


Pliki do pobrania:
1. Źródła DELPHI 7 (exe i kody źródłowe)
-pobierz



Miłej zabawy.
Ten program wykorzystamy w następnym post-cie, gdzie przedstawię inny program wraz z kompletem źródeł do Delphi 7.
Będzie to program do obsługi sklepu z: Filmami, Muzyką i Oprogramowaniem Komputerowym.
Program będzie przykładem jak zacząć po raz pierwszy tworzyć APLIKACJE KOMERCYJNE, pt.: "Moja Pierwsza Komercyjna Aplikacja".





Przykład zastosowania:
BDE w Delphi program


Odliczanie czasu w dół PHP Countdown

W tym post-cie przedstawię użyteczny mechanizm odliczania czasu w dół.
Skrypt, który pokaże można osadzić w kodzie: HTML, PHP lub ASP.NET.
Skorzystam i omówię przeznaczoną do tego celu bibliotekę bazującą na JQuery o nazwie:
jQuery Countdown.

Zaczynamy od razu od kodu i jego omówienia.

Etap I:
Importujemy biblioteki jQuery i jQuery.countdown.js oraz importujemy style.

(Uwaga - Możesz też pobrać wszystkie wymagane skrypty i zamiast internetowej lokalizacji skryptów [https://keith-wood.name/...] - wprowadź Swoją lokalizację skryptów).
Często programiści w tym Ja, gdy tworzą projekty programistyczne pobierają wszystkie skrypty na Swój komputer (lokalnie), aby umieścić je w Swoim projekcie programistycznym, a następnie w projekcie na serwerze produkcyjnym do komercyjnego użytku.
Dlaczego? - a no dlatego, bo np. za 5 lat projekt z którego pobraliśmy skrypty może już nie istnieć lub np. serwer ze skryptami może chwilowo nie odpowiadać, mogą być prace konserwacyjne, a jak masz wszystkie skrypty u Siebie, to Ci nic nie grozi, Twój projekt programistyczny zawsze będzie funkcjonował.
Wady - w zasadzie tylko jedna, jak stworzysz projekt oddany do użytku komercyjnego z pobranymi skryptami, a w między czasie wyjdzie nowa wersja skryptów, komercyjna strona internetowa (komercyjny serwis internetowy) będzie korzystał ze starych wersji skryptów.
W tym post-cie skorzystamy z internetowej lokalizacji skryptów.

W części <HEAD>:
<style type="text/css">
@import "https://keith-wood.name/css/jquery.countdown.css";
#defaultCountdown { width: 240px; height: 45px; }
</style>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
 

Etap II:

W części <BODY> - dla języka polskiego:
<!-- wersja polska -->
<!-- pamiętaj, że w wersji polskiej musisz dodać dwa skrytpy jednocześnie z zachowaniem kolejności: jquery.countdown.js i jquery.countdown-pl.js -->
<script type="text/javascript" src="https://keith-wood.name/js/jquery.countdown.js"></script>
<script type="text/javascript" src="https://keith-wood.name/js/jquery.countdown-pl.js"></script>
<script type="text/javascript">
    $(function () {
        var austDay = new Date();
        austDay = new Date(2014, 6-1 , 12);
        $('#defaultCountdown').countdown({ until: austDay });
        $('#year').text(austDay.getFullYear());
    });
</script>
<div id="defaultCountdown"></div>
 

W części <BODY> - dla języka angielskiego:
<!-- wersja angielska -->
<script type="text/javascript" src="https://keith-wood.name/js/jquery.countdown.js"></script>
<script type="text/javascript">
    $(function () {
        var austDay = new Date();
        austDay = new Date(2014, 6-1 , 12);
        $('#defaultCountdown').countdown({ until: austDay });
        $('#year').text(austDay.getFullYear());
    });
</script>
<div id="defaultCountdown"></div>
 

Omówienie - ETAPU II:

$(function () {
  var austDay = new Date();
  austDay = new Date(2014, 6-1 , 12);
  $('#defaultCountdown').countdown({ until: austDay });
  $('#year').text(austDay.getFullYear());
});

Powyższy kod uruchamia skrypt jQuery przy użyciu: $(function () { .. });
Następnie tworzy zmienną austDay (ustawia na datę rozpoczęcia mistrzostw świata w piłce nożnej w Brazyli);
Następnie w kolejnej linii jest uruchamiany skrypt opisywanej biblioteki: jQuery Countdown w technice uruchamiania jQuery;
Ostatnia linia skryptu to odwołanie się do zmiennej bibliotek: jQuery Countdown, w celu ustawienia formatu daty.

Poza skryptem jest także dołączona warstwa, <div id="defaultCountdown"></div> która wstawia obiekt "licznika w dół" na stronę WWW.



Poniżej dwa przykłady działania powyższych kodów dla języka polskiego i języka angielskiego, sama czysta strona HTML.
Abyś błyskawicznie zrozumiał kod i od razu mógł umieszczać go u Siebie!
Uwaga - nie można na jednej stronie mieszać języków, stąd dwa linki.
DATA ODLICZANIA USTAWIONA JEST NA DZIEŃ ROZPOCZĘCIA MISTRZOSTW ŚWIATA W PIŁCE NOŻNEJ W BRAZYLI

countdown PL
countdown EN


Odwołanie do twórców skryptu (można tam między innymi przeczytać o różnych stylach wyświetlacza, jest także dołączona dokumentacja).
Patrz tutaj (język ang.).


I to by było na tyle miłej zabawy, :)


Każdy mój post, dotyczący w mniejszym lub większym stopniu programowania internetowego jest zawsze kompatybilny z IE od wersji 7, z Firefox od wersji 3.6.3, z Opera od wersji 9.63, z Safari od wersji 5.x i z Chrome od wersji aktualnej



Kontrolki C# Invalidate Update Refresh

Opiszę łopatologicznie jakie są różnice między trzema metodami służącymi do odrysowywania dowolnej kontrolki Windows w środowisku: C# .NET Framework i C# .NET CF (Compact Framework):

1. Invalidate();
2. Update();
3. Refresh().

Zaczynamy:

1. Invalidate() - odrysowuje kontrolkę, odbywa się to poprzez dodanie do kolejki komunikatów komunikatu: WM_PAINT. W rezultacie kontrolka nie jest odrysowywany od razu, lecz dopiero po obsłużeniu wszystkich zaległych komunikatów.

2. Update() - zdejmuje oczekujący w kolejce komunikat WM_PAINT, a następnie obsługuje go. W rezultacie kontrolka jest odrysowywana natychmiast. Jeśli w kolejce komunikatów nie został wcześniej umieszczony komunikat WM_PAINT, metoda nic nie robi.

Czyli w kodzie programu, gdy chcemy natychmiast odrysować kontrolkę robimy tak: kontrolka.Invalidate();
kontrolka.Update();

3. Refresh() = Invalidate() + Update().

Podsumowując: W zasadzie prawie zawsze wystarcza metoda Invalidate(), natomiast możemy ją wesprzeć metodą Update() dla natychmiastowego odrysowania, np. gdy chcemy mieć płynność animacji lub gdy wykonujemy instrukcje programistyczne, które blokują przetwarzanie komunikatów. Metoda Refresh() to nic innego jak udogodnienie dla programisty.


Zapis odczyt obiektów w plikach binarnych C# .NET Compact

W tym post-cie przedstawię zapis i odczyt klas-obiektów (rekordów naszej własnej plikowej bazy danych) do plików binarnych. Zapisywane i odczytywane będą klasy-obiekty (rekordy plikowej bazy danych) - instancje obiektów klas, w zasadzie instancja jednego obiektu klasy reprezentującego naszą całą tabele do jednego pliku binarnego. Użyjemy do tego SPECJALNĄ serializację dla .NET Compact Framework (Serializacja klas na urządzenia mobilne) dla urządzeń mobilnych.

Zaczynamy jeszcze raz od wyjaśnienia co to w ogóle jest serializacja.


Serializacja – w programowaniu komputerów proces przekształcania obiektów, tj. instancji określonych klas, do postaci szeregowej, czyli w strumień bajtów, z zachowaniem aktualnego stanu obiektu. Serializowany obiekt może zostać utrwalony w pliku dyskowym, przesłany do innego procesu lub innego komputera poprzez sieć. Procesem odwrotnym do serializacji jest deserializacja. Proces ten polega na odczytaniu wcześniej zapisanego strumienia danych i odtworzeniu na tej podstawie obiektu klasy wraz z jego stanem bezpośrednio sprzed serializacji.
Serializacja służy do zapisu stanu obiektu, a później do odtworzenia jego stanu. Mechanizm ten jest używany między innymi na platformach: .NET, Java, PHP, Python, Ruby.

Źródło
 

Idę tego post-a jest pokazanie jak na urządzeniach mobilnych, np. z systemem operacyjnym Windows CE (Embedded), radzić sobie z zapisem i odczytem rekordów (reprezentowanych przez klasy) do plików binarnych.

Zaczynamy..

Znów skorzystamy z darmowej do zastosowań komercyjnych biblioteki:
(ALE TYM RAZEM JEJ NIE OPISUJE TYLKO WYKORZYSTUJE - opis jest w pierwszym linku w post-cie)
compactformatterplus.
Poniżej link do niej i do jej twórców. [Swoją drogą jest tam dużo użytecznych darmowych do zastosowań komercyjnych bibliotek dla .NET i .NETCF]
Uwaga - aby ja pobrać wystarczy darmowa rejestracja.
https://www.codeproject.com/Articles/21518/CompactFormatterPlus-Generic-Serializer-for-Full-a

Trzeba wiedzieć, że poprzez serializajcję niezależnie czy dla aplikacji desktopowych, czy dla aplikacji mobilnych możliwy jest zapisywać/odczyt tylko pojedynczej klasy/obiektu w jednym pliku binarnym. Nie można zapisać np. 10 instancji tych samych klas (a więc 10 rekordów) w jednym pliku binarnym - w zasadzie to pewnie się da, ale jest to zadanie skomplikowane i co więcej pracochłonne. CZAS TO PIENIĄDZ i ja pokażę jak zapisać to w sposób błyskawiczny. Cała sztuczka polega na tym, że zapisujemy jedną klasę/obiekt, w której mamy kolekcje klas/obiektów - czyli mamy kolekcję rekordów naszej tabeli.


MOJA KLASA DO:
ZAPISU INSTANCJI OBIEKTU DO PLIKU BINARNEGO (zapisu tabeli)
i
ODCZYTU INSTANCJI OBIEKTU Z PLIKU BINARNEGO (odczytu tabeli)



Dodatkowy potrzebny kod:


Użycie:


NO I MAMY OBSŁUGĘ PLIKOWEJ BAZY DANYCH, UFF, POWODZENIA.


Serializacja klas C# .NET Compact urządzenia mobilne

Zaczynamy od wyjaśnienia co to w ogóle jest serializacja.


Serializacja – w programowaniu komputerów proces przekształcania obiektów, tj. instancji określonych klas, do postaci szeregowej, czyli w strumień bajtów, z zachowaniem aktualnego stanu obiektu. Serializowany obiekt może zostać utrwalony w pliku dyskowym, przesłany do innego procesu lub innego komputera poprzez sieć. Procesem odwrotnym do serializacji jest deserializacja. Proces ten polega na odczytaniu wcześniej zapisanego strumienia danych i odtworzeniu na tej podstawie obiektu klasy wraz z jego stanem bezpośrednio sprzed serializacji.
Serializacja służy do zapisu stanu obiektu, a później do odtworzenia jego stanu. Mechanizm ten jest używany między innymi na platformach: .NET, Java, PHP, Python, Ruby.

Źródło
 

Idę tego post-a jest pokazanie jak na urządzeniach mobilnych, np. z systemem operacyjnym Windows CE (Embedded), radzić sobie z serializacją. Wiadomo, że na urządzeniach mobilnych mamy do czynienia z .NET Compact Framework, a nie z pełnym .NET Framework. A właśnie na: .NET Compact Framework, nie mamy dostępu do namespace:
using System.Runtime.Serialization.Formatters.Binary,
które jest niezbędne do korzystania z serializacji. Dokładnie to, aby serializować obiekty (klasy) potrzeba nam między innymi klasy: BinaryFormatter, który właśnie jest w tej przestrzeni.
Więcej czytaj: tutaj.

Można temu zaradzić!, Ufff..

Skorzystamy z darmowej do zastosowań komercyjnych biblioteki: compactformatterplus.
Poniżej link do niej i do jej twórców. [Swoją drogą jest tam dużo użytecznych darmowych do zastosowań komercyjnych bibliotek dla .NET i .NETCF]
Uwaga - aby ja pobrać wystarczy darmowa rejestracja.
https://www.codeproject.com/Articles/21518/CompactFormatterPlus-Generic-Serializer-for-Full-a


Ja teraz dokładnie opiszę i podam przykłady jak jej używać, gdyż Twórcy tej biblioteki dają tylko same źródła bez przykładów, a na stronie WWW też nie ma przykładów.


Biblioteka składa sie z trzech projektów stanowiących integralną całość.
Są to: ADOHelper, ISerial, CompactFormatterPlus.

Każdy z tych projektów należy dołączyć do Swojego głównego projektu dla którego piszemy software na urządzenie mobilne.
Dlaczego - bo oczywiście można by skompilować cały projekt, składający się z: ADOHelper, ISerial, CompactFormatterPlus i po kompilacji otrzymać trzy biblioteki dll - które można by potem dołączyć do Naszego projektu, ale zarówno Twórcy biblioteki [jest o tym wzmianka w linku, który udostępniłem], jak i Microsoft nie zaleca umieszczać bibliotek dll na urządzeniach mobilnych dlatego, że: w większości urządzeń mobilnych one po prostu nie działają, albo mogą powodować niewłaściwe działanie Naszego software.

Czyli dołączyliśmy te trzy projekty do Naszego projektu - warto zrobić sobie osobny folder w Naszym projekcie, np. Extenstions. Teraz wykonujemy Rebuild z wybranym: Set As StartUp Project ustawionym na Nasz główny projekt.
Po tej czynności dodajemy do Naszego głównego projektu w References trzy referencje z zakładki Naszego Projektu: ADOHelper, ISerial, CompactFormatterPlus.


I już mamy prawie koniec.
Teraz pozostał Nam sam kod.


ZAPIS INSTANCJI OBIEKTU DO PLIKU BINARNEGO:
ODCZYT INSTANCJI OBIEKTU Z PLIKU BINARNEGO:
Dodatkowy potrzebny kod:

Myślę, że problem serializacji na urządzenia mobilne został rozwiązany. Rozwiązując ten problem zyskaliśmy możliwość zapisywania do plików binarnych struktur i klas, czyli możemy tworzyć plikowe binarne baz danych.


Przykład użycia program:
( Zapis klas obiektów do plików w C#)
- dla urządzeń mobilnych.