Witam
Mam za zadanie zrobic program w delphi do ktorego bedzie mozna podpinac dowolna wybrana baze danych interbase przez użytkownika i bedzie mozna ja edytowac. Podlaczanie baz juz mi dziala, ale jak mam sie zabrac do edycji prosze o rady i ciekawe pomysly.
No to napisz jak to "podłączasz" bo można to interpretować na 100 sposobów. Co do edycji, to najprościej dać TDBGrid'a z możliwością edycji, oczywiście jest pare niuansów, ale to zależy od wykorzystywanej przez Ciebie technologii.
b
szukanie
OpenDialog1.Execute;
edit1.text:=(OpenDialog1.FileName);
wczytywanie bazy
procedure TForm2.Button1Click(Sender: TObject);
var S:string;
begin
S:=edit1.text;
datamodule4.IBDatabase1.Close;
datamodule4.IBDatabase1.Params.Clear;
datamodule4.IBDatabase1.DatabaseName := S;
datamodule4.IBDataBase1.Params.Add('USER_NAME=SYSDBA');
datamodule4.IBDataBase1.Params.Add('PASSWORD=masterkey');
datamodule4.IBDatabase1.Open();
datamodule4.ibtransaction1.active:=true;
label1.caption:=('Połączono z bazą '+S);
form6.listbox1.items.add(S);
bObik jak bedziesz na forum to daj mi znac, albo podaje Ci maila mojego [email protected] mozesz sie odezwac to wyjasnie konkretnie o co mi chodzi bo moze zle cos napisalem
Skoro używasz IBX'ów, to najprostszy z najprostszych sposobów (oczywiście nie zalecany) do zrealizowania za pomocą standardowych narzędzi:
- wrzucasz IBTransaction, podpinasz go pod baze, baze podpinasz pod transakcje
- wrzucasz IBTabele, podpinasz pod baze, wybierasz tabele do edycji
- wrzucasz IBUpdateSQL, podpinasz IBTable pod IBUpdate, w IBUpdate generujesz zapytanka
- wrzucasz TDatasource, podpinasz go pod IBTable
- wrzucasz TDBNavigatora i podpinasz go pod DataSource'a
- wczucasz TDBGrid i podpinasz go pod datasource'a, ustawiasz Active w IBTable na true i już.
Przydało by sie w IBTransaction jeszcze ustawić poziom ReadCommited, i kilka opcji na commit.
A tak najlepiej to by było jakbyś przeczytał pierwszy lepszy tutorial o korzystaniu z komponentów bazodanowych (jakichkolwiek). Zajrzyj też do katalogu Demo Twojego Delphika. No i oczywiście Google Twoim przyjacielem jest ...
b
Ok działa ten sposób, tylko wyświetla zawartość tabel z wczytanej bazy.
A jak zrobić żeby wyświtlało tabele systemowe (mam odpowiednie zapytania sql, które to robią) tylko jak wyświetlić ich wynik w celu ich modyfikacji? (nazw tabel, typów danych, kluczy obcych)
Ech, zrozumiałem że chcesz edytować zawartość bazy a nie metadane ...
No więc jeśli chcesz edytować metadane, to polecam do tego celu używać, ALTER, CREATE, DROP zamiast grzebać w tabelach systemowych. Ta druga opcja rządzi się swoimi prawami, i nie jest to zazwyczaj kwestia jednego insert'a/update'a/delete'a.
Nigdy w gridzie nie wyświetlałem zawartości tabel systemowych, więc na 100 procent nie odpowiem Ci czy to możliwe, jesli tak to powinno to się odbywać wg standardowych zasad (SELECT * FROM RDB$RELATIONS). Dobrze by było abyś to robił na userze SYSDBA/ownerze bazy.
Ściągnij sobie FlameRobin'a i zobacz jak on rozwiązuje mechanizmy zmian w metadanych.
Zresztą FlameRobin jest na SF, więc jak znacz C, to możesz też przeglądnąć jego źródła.
b
czyli twoim zdaniem co bedzie najlepszym rozwiazaniem bo mi nie zalezy jak to bedze zrobione tylko zeby dzialalo bo jak na razie to mi nic nie wychodzi
Zbuduj sobie ładne drzewko (TABELE, POLA, INDEKSY, TRIGGERY, WIĘZY, PROCEDURY, WIDOKI, ROLE ....), i zaimplementuje funkcjonalność generującą składnie CREATE, ALTER, DROP.
Tak czy siak to nie jest 5 minut roboty.