web stats stat24

RedbaK's Site

SQL in Delphi - FAQ
(bazy danych stworzone w Interbase/Firebird, komponenty IBX - zakładka "Interbase" w Delphi)
Databases - Interbase/Firebird.
Used components - IBX




 

1. Wyświetlanie rekordów (SELECT * FROM...)

2. Dodawanie rekordów (INSERT into...)

 

procedure
TForm1.Button1Click(Sender: TObject);
begin
    with
IBQuery1, SQL do
     begin
     
Close;
      Clear;
      Add('SELECT * FROM Your_table');
      Open;
     end;
end;


 


procedure
TForm1.Button1Click(Sender: TObject);
begin
    with
IBQuery1, SQL do
     begin
     
Close;
       Clear;
        Add('INSERT INTO Your_table (Pole1, Pole2, Pole3) VALUES (:P1, :P2, :P3)');
        ParamByName('P1').AsInteger:=StrToInt(Edit1.Text);
        ParamByName('P2').AsString:=Edit2.Text;
        ParamByName('P3').AsString:=Edit3.Text;
       ExecSQL;
      IBTransaction1.Commit;
      end;
end;
 
 

3. Usuwanie rekordów (DELETE...)

 

4. Usuwanie całej zawartości tabeli (DELETE FROM...)


procedure
TForm1.Button1Click(Sender: TObject);
begin
    with
IBQuery1, SQL do
     begin
     
Close;
       Clear;
       Add('DELETE FROM Your_table WHERE ID = :id');
       ParamByName('id').AsInteger :=StrToInt(Edit1.text);
      ExecSQL;
     IBTransaction1.Commit;
    end;
end;
 


procedure
TForm1.Button1Click(Sender: TObject);
begin
    with
IBQuery1, SQL do
     begin
     
Close;
       Clear;
       Add('DELETE FROM Your_table');
       ExecSQL;
      IBTransaction1.Commit;
     end;
end;

 

5. Edytowanie rekordów (Update...)

 

6. Suma wartości w danym polu (wynik w komponencie Edit)


procedure
TForm1.Button1Click(Sender: TObject);

var
id:integer;

begin
   
id:=IBQuery1.Fields[0].AsInteger;
     with IBQuery1, SQL do
      begin
      
Close;
        Clear;
         Add('UPDATE Your_table SET Imie =:imie, Nazwisko =:nazwisko, Data_Ur=:data_ur, Adres=:adres, Telefon=:telefon WHERE id = '+IntToStr(id)
');

        
ParamByName('imie').AsString := Edit1.Text;
          ParamByName('nazwisko').AsString := Edit2.Text;
           ParamByName('data_ur').AsString := Edit3.Text;
            ParamByName('adres').AsString := Edit14.Text;
             ParamByName('telefon').AsString := Edit5.Text;
             ExecSQL;
            IBTransaction1.Commit;
          //czyszczenie Editów po dodaniu rekordu do bazy
         
Edit1.Clear;
         Edit2.Clear;
        Edit3.Clear;
       Edit4.Clear;
      Edit5.Clear;
    end;
end;
 


{
IBQuery1 jest do wyświetlania, usuwania, edytowania bazy. IBQuery2 dodałem, aby był przeznaczony
do zadań specjalnych, jak np. sumowanie danych w dowolnym polu tabeli.
}

procedure TForm1.Button1Click(Sender: TObject);
begin
   
with
IBQuery1, SQL do
    
begin
     
Close;
      Clear;
      
Add('SELECT SUM (Pole1) FROM Your_table');
      
Open;
     
Edit1.Text:=IBQuery1.Fields[0].AsString;
   
 end;
end;

 

7. Sortowanie rekordów po kliknięciu na tytuł pola

 

8. Filtrowanie rekordów wg. dowolnej wartości w danym polu


procedure
TForm1.DBGrid1TitleClick(Column: TColumn);
var
 
atrybut, wartosc: string;

begin
  
atrybut:=Column.Title.Caption;
   if atrybut='ID' then wartosc:='NR_ID';
    if atrybut='LP' then wartosc:='LP';
     if atrybut='IMI? then wartosc:='IMIE';
     if atrybut='NAZWISKO' then wartosc:='NAZWISKO';
     if atrybut='DATA URODZENIA' then wartosc:='DATA_UR';
    if atrybut='ADRES' then wartosc:='ADRES';
   if atrybut='TELEFON' then wartosc:='TELEFON';

   with IBQuery1, SQL do begin
   
Close;
     Clear;
     Add('SELECT * FROM Your_table ORDER BY '+wartosc+';');
    Open;
   end
end;
 


procedure
TForm1.Button1Click(Sender: TObject);
begin
   with
IBQuery1, SQL do
    begin
    
Close;
      Clear;
      Add('SELECT * FROM Your_table WHERE Nazwisko = :nazw');
      ParamByName('nazw').AsString :='Kowalski';
      Open;
    end;

 

9. Wyświetlanie rekordów dowolnego zasięgu (BETWEEN...And)

 

10. Tworzenie pola z autonumeracją (Calculated) - przydatne, gdy chcemy mieć pole z liczbą porządkową "LP."


procedure
TForm1.Button1Click(Sender: TObject);
begin
   with
IBQuery1, SQL do
    begin
    
Close;
      Clear;
      Add('SELECT * FROM Your_table WHERE Data_ur BETWEEN :Data_Ur and :Data_Ur2');
      ParamByName('Data_Ur').AsDate:=StrToDate(Edit1.Text);
     ParamByName('Data_Ur2').AsDate:=StrToDate(Edit2.Text);
    Open;
  end;
end;

Jeśli utworzyłeś pole w Interbase lub Firebird, które potem chcesz przeznaczyć na  to, aby numerowało Twoje rekordy to wystarczy, że zrobisz poniższe kroki:
a) kliknij prawym przyciskiem myszki (PPM) na komponent IBQuery i wejdź do Fields Editor,
b) potem PPM i daj Add All Fields, aby pokazać wszystkie pola z Twojej tabeli,
c) zaznacz pole, które ma podawać numery rekordów,
d) właściwość FieldKind ustaw na fkCalculated,
e) w zdarzeniu OnCalcFields (zakładka Events) komponentu IBQuery wklep poniższy kod:
DataSet.FieldByName('Your_column').AsInteger:= DataSet.RecNo;
A co jeśli nie utworzyłeś wcześniej takiego pola w IB lub FB? Wykonaj następujące kroki:
a) PPM na komponent IBQuery i wejdź do Fields Editor,
b) PPM i daj na New Field,
c) w Name wpisz nazwę nowego pola, Type daj na Integer, a na środku wybierz 
Field Type jako Calculated,
d) w zdarzeniu OnCalcFields (zakładka Events) komponentu IBQuery wklep poniższy kod:
DataSet.FieldByName('Your_column').AsInteger:= DataSet.RecNo;

Skompiluj program i spróbuj dodać rekordy i usunąć. Obserwuj nowe pole.
 

11. Wpisywanie danych z zaznaczonego rekordu do Editów

 

12. Ilość rekordów w tabeli


procedure
TForm1.DBGrid1CellClick(Column: TColumn);
begin
     if
IBQuery1.RecordCount>0 then
      begin
      
Edit1.Text:=IBQuery1.Fields[0].AsString;
        Edit2.Text:=IBQuery1.FieldValues['Pole2'];
         Edit3.Text:=IBQuery1.FieldValues['Pole3'];
          Edit4.Text:=IBQuery1.FieldValues['Pole4'];
         Edit5.Text:=IBQuery1.FieldValues['Pole5'];
       Edit6.Text:=IBQuery1.FieldValues['Pole6'];
     end
   else
if
IBQuery1.RecordCount=0 then
if
Application.MessageBox('Musisz dodać nowy rekord do bazy.','Brak danych w bazie', MB_IconInformation or MB_OK)=IDOK then.....
end
;
 


procedure
TForm1.Button1Click(Sender: TObject);
begin
   with
IBQuery1, SQL do
    begin
    
Close;
      Clear;
       Add('SELECT COUNT (*) FROM Your_table');
       Open;
      Edit1.Text:=IBQuery1.Fields[0].AsString;
    end;
end;

 

13. Ilość rekordów, w których dane pole posiada wartość

 

14. MAX wartość z danego pola


procedure
TForm1.Button1Click(Sender: TObject);
begin
   with
IBQuery1, SQL do
    begin
    
Close;
      Clear;
       Add('SELECT COUNT (Pole1) FROM Your_table');
       Open;
      Edit1.Text:=IBQuery1.Fields[0].AsString;
    end;
end;
 


procedure
TForm1.Button1Click(Sender: TObject);
begin
   with
IBQuery1, SQL do
    begin
    
Close;
      Clear;
       Add('SELECT MAX (Pole1) FROM Your_table');
       Open;
      Edit1.Text:=IBQuery1.Fields[0].AsString;
    end;
end;

 

15. MIN wartość z danego pola

 

16. Średnia wartość z danego pola


procedure
TForm1.Button1Click(Sender: TObject);
begin
   with
IBQuery1, SQL do
    begin
    
Close;
      Clear;
       Add('SELECT MIN (Pole1) FROM Your_table');
       Open;
      Edit1.Text:=IBQuery1.Fields[0].AsString;
    end;
end;


//Pole Pole_liczbowe jest typu Double Precision

procedure
TForm1.Button1Click(Sender: TObject);
begin
    with IBQuery1, SQL do
      begin
       Close;
      Clear;
   Add(
'SELECT AVG(Pole_liczbowe) FROM Your_table');
Open;
end;
Edit1.Text:=FloatToStrF(IBQuery1.Fields[0].AsFloat, fffixed,10,2); //średnia z dwoma miejscami po przecinku
end;
 with IBQuery1, SQL do
  begin
  
Close;
    Clear;
    Add('SELECT * FROM Your_table');
   Open;
  end;
end;
 

 

17. Sumowanie dowolnych wartości w danym polu (wynik w komponencie Edit)

 

18. Wyszukiwanie rekordów wg. dowolnego słowa lub jego części (LIKE)


procedure TForm1.Button1Click(Sender: TObject);
begin
   with
IBQuery1, SQL do
    begin
    
Close;
      Clear;
      Add('SELECT SUM (Pole1) FROM Your_table WHERE Pole1 in (23, 145)');
      Open;
     Edit1.Text:=IBQuery1.Fields[0].AsString;//podaje wynik = 168
   
end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
   with IBQuery1, SQL do
     begin
      Close;
       Clear;
      Add('Select * from Nowa where Kwota like :nazw');
    ParamByName('nazw').AsString := '%'+Edit1.Text+'%';
  Open;
 end;
end;
 

 

19. Autonumeracja (autoincrement) pola "LP" z Primary Key
i NOT NULL

   

procedure
TForm1.Button1Click(Sender: TObject);
begin
     with
IBQuery1, SQL do
       begin
        Close;
         Clear;
          Add('SELECT MAX (LP) FROM Your_table');
         Open;
       Edit1.Text:=IntToStr(IBQuery1.Fields[0].AsInteger + 1); //dodaj 1 do maksymalnej wartości w polu LP i wpisz do Edit
   end;
end;
 
 
 

Copyright by Ultrabit 2007