Odzyskanie wartosci generowanej w bazie

Problemy związane z tworzeniem i zarządzaniem programami bazo-danowymi.
Regulamin działu


Zadając pytania dotyczące baz danych należy podawać szczegółowe informacje o bazie danych nad którą się pracuje, czyli:

  • Rodzaj serwera bazodanowego: MySql, MSSQL, Oracle itp.
  • Wersja bazy danych
  • Technologia bazodanowa używana w programie: ADO, DbExpress, InterBase
  • Komponenty użyte do zestawienia połączenia: ADOConnection, SqlConnection
  • Sposób zestawienia komponentów bazodanowych np. DataSet - DataSource - DbGrid lub DataSet - DataSetProvider - ClientDataSet - DataSource - DbGrid
  • Jeżeli używane były biblioteki innych firm niż Borland, CodeGeer i Embarcadero proszę podać ich nazwy, numer wersji i adres źródła.

Odzyskanie wartosci generowanej w bazie

Nowy postprzez mentalmesh » środa, 15 lipca 2009, 16:18

Korzystam z komponentow IBQuery i bazy danych InterBase.
W bazie danych mam przykladowa tabele z np. dwiema kolumnami. Pierwsza kolumna, dajmy na to ID_TAB, jest typu INT Not null i primary key.
W bazie danych jest ustawiony TRIGGER ktory dowolna podana wartosc zastepuje wygenerowana przez generator.

Kolejne rekordy dodaje z poziomu pisanego programu i komponentu IBQuery, do wlasciwosci SQL prowadzam np. taki kod:
INSERT INTO TABLICA VALUES(1,"COS");
ustawiam Active=true i wszystko sie ladnie wykonuje, nowy rekord jest wpisywany do bazy a wartosc 1 jest zamieniana na wartosc z generatora.
Moje pytanie jest takie... jak moge odzyskac wartosc wstawiona przez generator np. jak mam taki przypadek:

Mam dwie tablice KSIAZKA i AUTOR w tablicy KSIAZKA ID_KSIAZKI jest generowane tak jak wyzej ID_TAB i musze tez wstawic wartosc wygenerowana do tablicy AUTOR do komorki ID_KS (a do drugiej ID_AUTORA - identyfikator z innej tablicy - tablica AUTOR dziala jako lacznikowa w relacji wiele do wiele).
Z gory dziekuje za pomoc.
Pozdrawiam
Avatar użytkownika
mentalmesh
Bladawiec
Bladawiec
 
Posty: 26
Dołączył(a): piątek, 5 czerwca 2009, 04:44
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP3
Windows 7 Prof x64
Kompilator: C++ Builder 2009, InterBase 2009
Gadu Gadu: 0
    NieznanyNieznana

Re: Odzyskanie wartosci generowanej w bazie

Nowy postprzez banita » środa, 15 lipca 2009, 17:04

to pytanie nie dotyczy programowania baz danych ale konkretnego silnika.
np: w postgresql mamy tzw sekwencje i z nich mozemy odczytac takowa wartosc. w mysql jest funkcja (nie pamietam nazwy) ktora zwraca ostatnio wstawiona wartosc. w przypadku firebirda(w interbase powinno byc tak samo) faktycznie nie ma typu z autoinkrementem tylko tzreba skozystac z INT i generatora a calosc spiac za pomoca triggera.

w przypadku firebirda i generatora aby uzyska ostatnia wygenerowana wartosc przez ten generator musisz wykonac zapytanie:

Kod: Zaznacz cały
SELECT GEN_ID(GNAZWA_GENERATORA, 0 ) FROM RDB$DATABASE

w wyniku dostaniesz ostatnio wygenerowana wartosc.
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: Odzyskanie wartosci generowanej w bazie

Nowy postprzez mentalmesh » środa, 15 lipca 2009, 17:09

dzieki wielkie :)
Avatar użytkownika
mentalmesh
Bladawiec
Bladawiec
 
Posty: 26
Dołączył(a): piątek, 5 czerwca 2009, 04:44
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP3
Windows 7 Prof x64
Kompilator: C++ Builder 2009, InterBase 2009
Gadu Gadu: 0
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Bazy danych

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość

cron