chcę abyprzy pierwszym uruchomieniu program tworzył bazę danych, do niej sie logował i ja uruchamiał. Wiem jak to sie robi w SQLu, ale nie mam pojęcia jak się zabrać do tego czysto programowo, bez otwierania ręcznie serwera. Mam nadzieję że jasno to wytłumaczyłem. Może jest gdzieś jakiś gotowy przykład?
Ja tworzę za pomocą darmowych komponentów Zeos. Przesyłam wycinek kodu z mojego programu:
function OfeesZbudujBazeDanych(ZQuery : TZQuery) : boolean;
var
sql : string;
begin
if isMySQL then
sql := 'CREATE DATABASE IF NOT EXISTS ' + NAZWA_BAZY_DANYCH else
sql := 'CREATE DATABASE ' + NAZWA_BAZY_DANYCH;
Result := false;
try
// Czyszczenie poprzedniego polecenia
ZQuery.SQL.Clear;
// Dodanie kwerendy do wykonania
ZQuery.SQL.Add(sql);
// Przesłanie jej do DB
ZQuery.ExecSQL;
Result := true;
except
if not isMySQL then
raise Exception.Create('Inny program korzysta z bazy danych, nie mogę utworzyć własnej bazy');
end;
end;
potem... przy uruchamianiu
if isMySQL then
try
Jobber.Busy := true;
ZCon.Database := '';
PolaczonyZBaza := false;
ZCon.Connect;
OfeesZbudujBazeDanych(ZQuery);
ZCon.Disconnect;
if (o.Get('BazaDanych')<>'') then
ZCon.Database := o.Get('BazaDanych') else
ZCon.Database := 'ofeesdatabase';
PolaczonyZBaza := true;
//Jobber.Terminate;
ZCon.Connect;
//SHOW DATABASES;
sql := 'SHOW TABLE STATUS FROM ' + ZCon.Database;
// Czyszczenie poprzedniego polecenia
ZQuery.SQL.Clear;
// Dodanie kwerendy do wykonania
ZQuery.SQL.Add(sql);
// Przesłanie jej do DB
ZQuery.Open;
// Jeśli baza danych nie istnieje
if ZQuery.Eof then
begin
ZbudujBazeDanych;
// Wstawianie standardowych danych
OfeesWstawDane;
end;
-
Łączę się z serwerem nie podając nazwy bazy danych.
-
Tworzę bazę tylko IF EXISTS, badam status tabel bazy -czy zgadzają się z aktualną wersją programu
-
Jeśli baza jest pusta buduję tabele i wstawiam standardowe dane
Mam pytanie:
Co to jest isMySQL ?
Mam komponenty Zeos ale nie wiem co to jest jobber ?
Jak łączę się z bazą bez podania nazwy, to zgłasza błąd. Więc jak mam zrobić połączenie ?
Już znalazłem proste rozwiązanie
Komponent ZMySqlDatabase1 z pakiety Zeos ma funkcję CreateDatabase.
try
ZMySqlDatabase1.Connect;
except
on E: Exception do
begin
ZMySqlDatabase1.CreateDatabase('nazwa_bazy');
ZMySqlDatabase1.Connect;
end;
end;
I baza już istnieje. Teraz można się do niej połączyć !
Najtrudniej znaleźć najprostsze rozwiązanie ! :D
Po prostu wrzuciłem kawałek kodu ze swojego programu. To moje dodatki.
isMySQL było zmienną boolean, bo program pracuje na też Postrgesie
a Jobber to taki system, który osobnemu wątkowi przydzielał momenty pracy -to mi ułatwia pisanie bazy, żeby nie blokować programu