Zapis numeru dnia do tabeli w bazie danych

0

Banalna sprawa:

if Idzien <> wDay then
begin
  Tab_dzien.Active := True;
  Tab_dzien.Append;
  Tab_dzien.FieldByName('Nr_dnia').value := wDay;
  Tab_dzien.Active := False ;
end;

Chcę numer dnia wpisać do tabeli.
Błędu nie wyrzuca, a wpisywać nie wpisuje, choć warunek if jest spełniony i procedura wewnątrz begin-end jest wykonywana.
Gdzie szukać rozwiązania.
AK

sformatowanie kodu i dodanie znacznika <code class="delphi"> - @furious programming

1
  1. po co to jest Tab_dzien.Active := False ;?
  2. jak się zmieniło to trzeba i zatwierdzić - słowo klucz POST
1

Pozwolę sobie poszerzyć odpowiedź @abrakadaber ...
Jakich komponentów do baz danych używasz?

Świetny Pomidor napisał(a):

Banalna sprawa:

      if Idzien <>  wDay then
         begin
          Tab_dzien.Active := True;
          Tab_dzien.Append  ;
          Tab_dzien.FieldByName('Nr_dnia').value := wDay;
          Tab_dzien.Active := False ;
         end;

Chcę numer dnia wpisać do tabeli.

Skoro tak, to powinieneś użyć bezpośrednio polecania SQL insert into - korzystanie z DataSetu (tab_dzień) do tego w takim przypadku jest niepotrzebne i nadmiarowe. No, ale można i tak.

Błędu nie wyrzuca, a wpisywać nie wpisuje, choć warunek if jest spełniony i procedura wewnątrz begin-end jest wykonywana.

Ależ nie. Informacja jest zapisywana do DataSetu (a dokładnie - do pola o nazwie "nr_dnia"), ale Ty jej po prostu nie zatwierdzasz.
Zamiast zatwierdzić zmiany, zamykasz DataSet - no to nie dziwne, że nic się nie zapisze.

Gdzie szukać rozwiązania.
AK

Nie wiem, może przejrzyj jakiś poradnik do poczatkujacych?
A ten kod, aby działał, powinien wyglądać tak:

if Idzien <> wDay then
begin
  // po co otwierasz za każdym razem DataSeta?
  Tab_dzien.Open;
  // Dodanie nowego wiersza
  Tab_dzien.Append ;
  // Przypisanie wartości do pola "Nr_dnia"
  Tab_dzien.FieldByName('Nr_dnia').Value := wDay;
  // Zatwierdzenie zmian do bazy danych
  Tab_dzien.Post;
  Idzien := wDay;
  // i po co on jest zamykany?
  Tab_dzien.Close;
end;
0

Przepraszam, ale dopiero teraz odpisuję, ale przed chwila wróciłem z wyjazdu służbowego.
Wiec po kolei.

  1. po co to jest Tab_dzien.Active := False ;?

  2. jak się zmieniło to trzeba i zatwierdzić - słowo klucz POST
    Odp. Próbowałem i Post i Close i nic nie pomogło.

  3. Ależ nie. Informacja jest zapisywana do DataSetu (a dokładnie - do pola o nazwie "nr_dnia"), ale Ty jej po prostu nie zatwierdzasz.
    Zamiast zatwierdzić zmiany, zamykasz DataSet - no to nie dziwne, że nic się nie zapisze.
    Odp. Dzięki. To jest jakaś informacja. Dzisiaj po 8 godz w samochodzie już nie będę grzebał w kodzie,
    ale jutro to sprawdzę i dam znać czy pomogło. Z góry dziękuję i pozdrawiam
    Do jutra.

Nie wytrzymałem !!!
Poprawiłem kod i .....
Działa, działa, działa !!!!!
Wielkie dzięki wloochaczu
Uściski.
Nareszcie

I jeszcze :
Rzeczywiście Close jest niepotrzebne !!!
Dużo mnie nauczyłes.
Jeszcze raz dzięki.
Pozdr,
AK

0

Mam

uczniowie : TTable
naz_edit : TEdit

Chcę po wprowadzeniu do naz_edit początku nazwiska ustawić się na rekordzie którego pole nazwisko zaczyna się od wprowadzonych przeze mnie liter. Próbowałem Lookup i FindNearest , ale nie poradziłem sobie. Literaturę już zgromadziłem, wiedzy nadal nie !

Pomóżcie.

`zamiana znaczników na ``` - @furious programming

0
uczniowie.Filter := 'nazwisko like ''' + naz_edit.text + '%''';
uczniowie.Filtered := True;
0

Wstawiłem w/w kod.
Skompilowało się prawidłowo, ale uruchomienie tego filtrowania wywaliło komunikat:

Projekt baza_wyjsc.exe raisedexception class EDBEengineError with message 'Operation not applicable.' Process Stoped. Use Step or Run to continue.

zamiana znacznika <code class="delphi"> na <code class="none"> - @furious programming

0

Jakich komponentów używasz?
Do ustawienia się na rekordzie nie służy Lookup ani tym bardziej Filter, tylko metoda Locate.
Nie wszystkie komponenty wspierają filtrowanie po stronie klienta, jak widać te których używasz nie obsługują takiej funkcjonalności i/lub nie obsługują operatora Like w filtrach po stronie klienta.
Natomiast zawsze można filtrować za pomocą zdarzenia OnFilterData, jeśli dobrze pamiętam nazwę zdarzenia...

0

Robię bazę lokalną.

Locate też próbowałem, ale nie poszło. Nie potrafiłem tego właściwie użyć. Pomysł z filtrowaniem podoba mi się. We właściwościach uczniowie jest Filter i Filtered czyli powinno zadziałać.
Podejrzewam, że w składni w/w filtru jest problem. :-(

1
Świetny Pomidor napisał(a):

Robię bazę lokalną.

Co to jest baza lokalna? Paradox?
Konkret, panie KONKRET!

Locate
też próbowałem, ale nie poszło.
Nie potrafiłem tego właściwie użyć.

To pokaż jak użyłeś.
A tak poza konkursem - zaglądasz czasem do dokumentacji?
Zajrzyj, nie gryzie a pomaga...

Pomysł z filtrowaniem podoba mi się.
We właściwościach
uczniowie : TTable
jest
Filter i Filtered
czyli powinno zadziałać.
Podejrzewam, że w składni w/w filtru jest problem. :-(

Cóż mogę Ci polecić, może RTFM?
http://stackoverflow.com/questions/3989982/partial-search-in-tablebde
A więc LIKE nie jest wspierane przez TTable. Kropka.

0

Baza Paradox.
Nad książkami siedzę cały czas.
Przyjąłem do wiadomości, że jak coś nie wyjdzie to mam załączyć kod !!!
Będę to robił, bo jeszcze nie raz (tfu, tfu, tfu !) myślę, że poproszę o pomoc.
Ostatnia Twoja rada pomogła !

 uczniowie.Filter := 'nazwisko=' +QuotedStr(naz_edit.text + '*');
 uczniowie.Filtered := True;

Mam filtrowanie jakiego bym sobie życzył.
Dzięki !

0
Świetny Pomidor napisał(a):

Baza Paradox.

Zmień to, im szybciej tym lepiej.
Paradox i BDE jest niewspierane oficjalnie od ilu lat? 10?
Użyj SQLite lub jeszcze lepiej Firebirda.

Nad książkami siedzę cały czas.
Przyjąłem do wiadomości, że jak coś nie wyjdzie to mam załączyć kod !!!
Będę to robił, bo jeszcze nie raz (tfu, tfu, tfu !) myślę, że poproszę o pomoc.
Ostatnia Twoja rada pomogła !

 uczniowie.Filter := 'nazwisko=' +QuotedStr(naz_edit.text + '*');
 uczniowie.Filtered := True;

Mam filtrowanie jakiego bym sobie życzył.
Dzięki !

Proszę.
PS.
Chciałbym mieć takie problemy ;-)

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