baza danych

0

Robie wlasnie mala baze danych swoich zdjec i mam takie pytania :

  1. Jak zliczyc liczbe pozycji wyswietlanych aktualnie w polu TDBGrid po uzyciu filtra?
  2. Teraz mam zrobione tak ze do przeszukiwania bazy uzywam jednego filtra, jak uzyc dwoch na raz ? Kombinowalem i nic mi nie wychodzi. :-(
  3. Teraz po wpisaniu w polu wyszukiwania wedlug nazwy literki 'n' wyszukuje wszystkie nazwy rozpoczynajace sie od literki 'n'. Jak zrobic aby wyszukiwal wszystkie nazwy z literka 'n' wystepujaca nawet w srodku nazwy ?
  4. I ostatni moj problem bardzo smieszny :-) w sumie. Zrobilem juz formularz za pomoca ktorego dodaje kolejne pozycje do bazy danych. A jak usunac cos z bazy ? Chodzi mi tu o usuwanie calej pozycji (nazwa,strona,album,opis).

Dziekuje za wszelkie sugestie.
Pozdrawiam

0
  1. Table1.RecordCount
  2. Nazwapola='Wartosc 1' or Nazwapola='Wartosc 2'
  3. W OnFilterRecord
    Np:
    IF pos(edit1.text,Dataset['NazwaPola'])>0 then Accept:=true else Accept:=false;

4.Table1.Delete

0

W mojej bazie danych jest jedno pole ktoremu po dodaniu nowego wpisu zostaje nadany numer o jeden wiekszy od ostatniego wpisu w bazie, jest tam zastosowana autoinkrementacja. Tymczasem gdy uzyje do usunieciua rekordu funkcji delete ciag numerow zostaje przerwany. Np. po usunieciu wpisu nr 5 w bazie zostaja rekordu z numerami : 1,2,3,4,6,7 itd. Dodanie nowego rekordu sprawia, ze ostatniemu wpisowi zostaje nadany numer o jeden wiekszy od ostatniego, tj. jezeli ostatni byl rekord z numerem 12, nowy rekord ma numer 13, a numeru 5 nadal nie ma. Czy mozna w jakis sposob zapobiec przerywaniu ciagu numerow ?

0

Niech po usunięciu rekordu zmienia numeracje w całej bazie. np:
W AfterDelete

var a:integer;
  PrevRecord: TBookmark;
begin
  PrevRecord := table1.GetBookmark;
  table1.DisableControls;
  table1.First;
  a:=1;
  while not table1.eof do
   begin
     table1.edit;
     table1.DataSet['POLE']:=i;
     table1.post;
     table1.next;

     inc(a);
   end;

  table1.EnableControls;
     if PrevRecord <> nil then
     begin
       table1.GoToBookmark(PrevRecord);
       table1.FreeBookmark(PrevRecord);
     end;
end;

0

Mam zastrzezenie co do tego fragmentu :

     table1.DataSet['POLE']:=i;

Programuje w Cpp Builderze i tam wiekszosc jezeli nie wszystkie funkcje sa takie same jak w Delphi. Niestety w moim Builderze nie ma DataSet :-) pozostala tresc kodu rozumiem i juz przelozylem ja na Buildera. Czy jestes pewien co do poprawnosci tej nazwy ?

0

Faktycznie to jest źle

Table1.Fields.FieldByName('POLE').asinteger:=a;

lub

Datasource1.DataSet['POLE']:=a;

0

Wszystkie polecenia można wykonać za pomocą SQL (zapraszam do jakichś kursów). Przede wszystkim 3 (bo zaproponowane rozwiązanie jest stanowczo czasożerne, zwłaszcza przy dużych bazach danych:

Query1 :TQuery;

begin
 Query1.SQL.Clear;
 Query1.SQL.Add('select * from nazwa_tabeli where nazwa_pola like %n%');
 Query1.Open;
end;

select * - wyświetla wszystkie pola w danej tabeli (ew. można podać nazwy tych pól, które mają być wyświetlone, a reszta pozostanie w ukryciu)
%n% - % jest odpowiednikiem dosowej *, czyli wyświetli wszystkie rekordy z tabeli nazwa_tabeli, które w polu nazwa_pola mają gdziekolwiek n

0

Te pole z numerem ma typ AutoInc i niestety wciaz wyskakuje mi blad ze nie da sie go zmodyfikowac :-/ Macie jakis pomysl ?

Probowalem zmienic typ danych tego pola ale wtedy nie wiedzialem jak nadawac wartosc temu polu podczas dodawania nowego wpisu. Teraz dodaje dane w taki sposob ze mam formularz skladajacy sie z TDBEdit gdzie wpisuje sie dane a nastepnie po zaakceptowaniu dane sa wysylane do bazyt za pomoca metody "post". Gdy pole z numerem nie jest typu AutoInc to numeracja bazy nie tworzy sie. Probowalem stworzyc nowe pole TDBEdit gdzie bylaby podawana wartosc aktulana_ilosc_wpisow_w_bazie + 1 i dopiero wtedy wysylac dane, ale to nie dziala. Nie wiem co teraz zrobic... :-(

1 użytkowników online, w tym zalogowanych: 0, gości: 1