[Delphi] Baza a DBNavigator

0

Mam do swojego programiku podpiętą za pomocą BDE baze danych Paradox. W formularzu wykorzystuję komponent DBNavigator i do wyświetlania DBEdity.
Moze ktoś mi podpowie:

  1. Jak zrobić, aby edycji można było dokonywać wyłącznie po naciśnieciu odpowiedniego przycisku w DBnavigator - a nie jak to ma normalnie miejsce że wystraczy coś zacząć pisać w DBEdit?
  2. Jak zrobić aby wprowadzone zmiany były zatweirdzone wyłącznie po naciśnięciu przycisku zatweirdź w DBNavigator a nie że wystarczy przejść tylko do natępnego rekordu?
  3. Jestem na pierwszym rekordzie przechodzę do nastepnego - przyciski poprzedni i pierwszy aktywują się, cpfam się do poprzedniego (czyli pierwszego) a przyciski potrzedni i pierwszy dalej są aktywne a powinny być deaktywowane (jeżeli naciśnie się pierwszy wszystko jest OK). Jak to osiągnąć?
    Myślę że należy sprawdzić czy został naciśnięty przycis nbPrior i sprawdzić czy jest poprzedni rekord Table1.Bof tylko jak dezaktywować teraz ten NbPrior.

Dzięki za wszelkie sugestie ;)

0

Chyba moje problemy są "mało atrakcyjne" skoro wyswietleń jest tylko 15.

Może jednak ma ktoś jakieś pomysły.

ps. sprawdzenie Table1.Bof nic nie daje [!!!]

0

Osobiście odradzałbym korzystanei z komponentu jeśli ejgo funkcjonalność na tyle odbiega od twojej wizji, a zrobienie go samemu. Wystarcy podpiąć kilka przycisków i im zrobić obsługę. W każdym query są prior, next. last itp. Jeśli jednak ne iczujesz sią na tyle silny by opuścić DBNavigator możesz po protu funkcjami enabled i viseble znikać/deaktywować konkretne przyciski z navigatora.

0

Wiesz zrobienie własnych przycisków to nie jest problem. Problemem jest stworzenie poprawnej obsługi mi.n. spełniającej wcześniej opisane przeze mnie problemy. Chociarzby sprawdzenie czy jest poprzedni rekord np. sprawdzenie Table1.Bof nic nie daje w przypadku gdy usuniemy pierwszy rekord. W tym przypadku gdy wejdziemy na nowy pierwszy pierwszy rekord i sprawdzimy czy jest poprzedni - sprawdzenie za pomocą powyższego kodu nic nie daje - baza typu Pradox nie usuwa fizycznie rokordów tylko zaznacza je jako usunięte. Więc w takim przypadku przy stworzeniu własnych przycików nie wiadomo kiedy ustawić przycisk poprzedni na nieaktywny.

wszelkie uwagi mile widziane - próbowałem stworzyć swoje przyciski ale te problemy no i gdybyście troszkę pomogli to dalej chciałbym.

pzdr.

0

Trudno m isię ustosunkować do twojego problemu jako że komponentu TTable nie używam od 10 lat, wolę użwyać Query a wówczas nie mam żadnych problemów z przeszukiwaniem wyniku zapytania. Prawidłowa obsługa powstaje w twojej głowie. Jeśli chcesz aby najpierw pojawił się First i pozostałe były wyłączone - to dokładnei taki kod psizesz - po wciśnięciu przycisku XXX pojawia się aktywny przycisk First i pozostałe sa nieaktywne. Po kolejnym wciśnięciu przycisku ... Możesz też wprowadzić sobei zmeinna pomocniczą, jak dasz First ustawiasz na 1 i wówczas sprawdzasz czy twoja zmeinna ma 1 jeśli tak to poprzedniego nie ma (o ile prawidłowo zaimplementowałeś zmeinianie tej zmiennej) . pomysłów może być mnóstwo...

0

Wiesz używam komponentu Table gdyż jednym formularzem załatwiam sprawę przegladania tabeli oraz dodawania, kasowania, edycji rekordów. Jak te rzeczy mam zrobić za pomocą Query - według mojej wiedzy to nierealne.

Dalej pozostaję w kropce [sciana]

0

To że ty czegoś nie potrafisz nie oznacza że coś jest nierealne. Wiesz jak powstaje TTable? Co go ogranicza, jakie ma wady? Podstawową jest to że nie użyjesz 2 tabel jednocześnie, a to oznacza że musisz albo nieprawidłowo budować schemat bazy danych, albo nie wyświetlisz pełnej informacji dla użytkownika. TTable ma za to jedną wielką zaletę nie trzeba znać SQLa, lecz praktycznie każdy kto go zna przechodzi na TQuery w jakimkolwiek wydaniu. A do twojej wiadomości jeśli nazwę tabelę coś to:
SELECT * FROM COS - wyświetli wszystkie kolumny tabeli
DELETE FROM COS WHERE warunek kasowania (np COS_ID=1) - kasuje wybrane rekordy
INSERT INTO COS VALUES (wartości dla kolumn) - jedna z metod wstawiania rekordu, tutaj pełny rekord
UPDATE COS SET kolumna_do_ustawienia=wartosc_ustawiania WHERE warunek updatowania (np. COS_ID>10 AND COS_ID<20)

To kilka najprostszych wyrażeń w SQLu, akurat na 1 lekcję z jakimkolwiek podręcznikiem. Na drugi raz pomyśl, pomyśl, a jak nie wyjdzie to nie pisz, ale nie ośmieszaj się pisząc że to co robi TTable jest niemozliwe (nierealne) do realizacji poprzez TQuery.

A jak w TTable podnieść zarobki wszytskim o 10 zł? Masz wejsc do kazdego rekordu i zrobic update o ZAROBEK o ZAROBEK+10? Na dokadkę masz 200 pracowników i 200 wpisów? Powodzenia życzę, QUERY załatwia to jednym SQLem.

A wracając do Twojego problemu, widzę że nie ma mozliwości wygaszania poszczególnych przycisków DBNavigatora, a jedynie ich ukrywanie (niezbyt ładny graficznie element). Jeśli liczysz że znajdziesz jakiś komponent odpowiadający DBNavogatorowi o rozszerzonych możliwościach to raczej daj sobie spokój, nie widziałem nigdy takiego. Musisz sam wytężyć mózgownicę i stworzyć sobie przyciski luzem. Dla tych mniej inteligentnych dodam możesz dodać niewidoczny DBNavigator i przyciski do niego podpiąć (chyba zresztą do tego służy), masz wówczas pełną kontrolę nad wykonywanym kodem przed i po naciśnięciu przycisku navigatora (DBNavigator1.BtnClick(...)), możesz zrobić estetyczne przyciski i je wygaszać w dowolny sposób, uzywając button.enabled.

Podsumowując naciskając twój nowo stworzony przycisk wywołasz przyciśnięcie przycisku na niewidzialnym DBNavigatorze, który czarodziejsko dodaje, usuwa i przesuwa rekordy, a równocześnie operując na własnych przyciskach możesz dołożyć im wygaszanie, znikanie, zmeinianei kolorów czy odtwarzanie muzyki - co tylko zechcesz.

Na koniec następnym razem głęboko się zastanów zanim napiszesz jakieś głupoty, zwłaszcza w formie stwierdzającej...

0

Przyznam Ci rację za pomocą komponentu TQuery można dodawć, usuwać, aktualizować dane zawarte w tabeli ale za pomoca języka tak jak napisałeś SQL (o dziwo :D takie komendy SELECT, INSERT, DELETE, UPDATE, klauzule GROUP BY, WHERE, HAVING operatory BETWEEN ... AND itd. są mi znane). Kompenent TQuery używam i do niego za pomocą języka SQL zadaję zapytania - m.in. ze zwględu na szybkość zwracania zapytań, możliwość łączenia kilku tabel. Nie widzę w swoim progamie, jeżeli pokazuję całą tabelę, potrzeby stosowania TQuery (jestem zdania, iż konkretne komponenty zostały po to stworzone aby w jak najprostszy sposób uzyskać żadany wynik).
A dla bardziej inteligentnych dodam, że nie trzeba tworzyć "niewidocznego" DBNavigatora i do niego podpiąć przyciski wystarczy dodać komponent ActionList (tam są stanadrowe komendy takie same jak w DBNavigatorze) i poszczególne akcje podpiąć do nowych przycisków.

pzdr. ;)

0

Skoro to wszystko wiesz to po co rozpytujesz, czemu piszesz nierealne skoro znasz SQL? Jeśli chodzi o sam komponent DBNavigator to sprawdzenie jakie ma możliwości graficzne (visible i enebled) przycisków zajeło mi 2 minuty.
Szkoda tylko że marnujesz ludziom czas na pierdoły skoro wiesz wszystko...
Dla mnie koniec tematu.

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