Delphi7 i DBGrid

Odpowiedz Nowy wątek
2006-05-04 18:04
jaro-j3
0

Witam
Problemy dotyczą Delphi7 w połączeniu z MSSQ2000.
Mam dwa pytania:

  1. W jaki sposób ,korzystająć z komponentu DBGrid zaznaczyć jakiś rekord i klikając na przycisk usunąć ten rekord. Obsługe kliknięcia przycisku można zrobić za pomocą SQL np.:
    Delete From jakaś_tabela Where id=3
    TYlko właśnie w jaki sposób pobrać np id z zaznaczonego rekordu na DBGrid.

  2. Jak zrobić automatyczną numerację wyświtlaną w DBGrid. Chodzi mi o to w jaki sposób do DBGrid dodać kolumne lp. gdzie po dopisaniu lub usunięciu będzie wyświetlany przy każdym wpisie numer

Pozostało 580 znaków

2006-05-04 18:48
0

Usuwanie rekordu wybranego po ID.

begin
   with ibquery1, sql do
    begin
     Close;
      Clear;
       Add('DELETE FROM Tabela where id=:ID');
       ParamByName('ID').AsInteger := ibquery1.FieldByName('id').AsInteger;
       ExecSQL;
      IBTransaction1.Commit;
    end;
end;

Autoinkrementację można zrobić tak:
Pisane z głowy.

var
    l:integer;
begin
   l:=0;
    Table1.First;
      while not Table1.Eof do
      begin
      inc(l);
      Table1.Edit;
    // Table1.FieldByName('LP.').Clear;
     Table1.FieldByName('LP.').asString:=IntToStr(l);
     Table1.Next;
     end;
end;

Lub FieldKind danego pola dajesz na fkCalculated, wcześniej wchodząc do Fields Editor komponentu TQuery (IBQuery). W tym samym komponencie w zdarzeniu OnCalcFields wklep:

DataSet.FieldByName('LP').AsInteger:= DataSet.RecNo;

Pozostało 580 znaków

2006-05-04 19:37
0
B-A-D napisał(a)
begin
with ibquery1, sql do
begin
Close; // 1
Clear;
Add('DELETE FROM Tabela where id=:ID');
ParamByName('ID').AsInteger := ibquery1.FieldByName('id').AsInteger; // 2
ExecSQL;
IBTransaction1.Commit;
end;
end;

ale to nie przejdzie bo najpierw (1) zamykasz dataset a potem (2) próbujesz pobrać z niego wartość aktualnego rekordu. To trzeba zrobić na dwóch RÓŻNYCH zapytaniach

var
l:integer;
begin
l:=0;
Table1.First;
while not Table1.Eof do
begin
inc(l);
Table1.Edit;
// Table1.FieldByName('LP.').Clear;
Table1.FieldByName('LP.').asString:=IntToStr(l);
Table1.Next;
end;
end;

a fe, co za brzydki sposób


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2006-05-04 19:52
0

ale to nie przejdzie bo najpierw (1) zamykasz dataset a potem (2) próbujesz pobrać z niego wartość aktualnego rekordu. To trzeba zrobić na dwóch RÓŻNYCH zapytaniach

A czy ja zrobiłem całe usuwanie? Niech się pomęczą trochę, niech nie leserują przed tym kompem i ruszą mózgami, bo po to im je matka dała :)

Co do autoinkrementacji to faktycznie fee, ale może te fee się komuś przyda jakiemuś początkującemu do analizy. Ja natomiast preferuję tamten drugi sposób.

To trzeba zrobić na dwóch RÓŻNYCH zapytaniach

Przecież to działa bez zarzutu te usuwanie. Jeśli masz lepszą koncepcję to chętnie popatrzę na nią.


Pozostało 580 znaków

2006-05-04 20:05
jaro-j3
0

Ale ja używam komponentów ADO a w ADOQuery raczej nie da się tego zrobić tak jak w IBQuery. ADOQuery nie posiade metody ParamByName.
Jak ktoś wie to prosze o jakiś przykład z ADOQuery. Nie da się tego zrobić odczytując wartość zaznaczonego pola z DBGrid??

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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