Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Delphi7 - TQuery, TUpdateSQL i dodawanie rekordu

prymas76 22 Kwi 2012 12:38 1044 4
  • #1 22 Kwi 2012 12:38
    prymas76
    Poziom 8  

    Witam
    Mam problem z dodawaniem rekordu do lokalnej tabeli Paradox. Używam komponentów TDataSet, TQuery, TupdateSQL i TSMDBGrid. W tabeli mam ustawione dwa pola z domyślną wartością 0. Jednak w momencie dodawania rekordu pozostawia pola puste, choć ma ustawione w tabeli wartość 0. Komponent SMDBGrid wylicza mi dla danych kolumn wartości minimalne i w momencie dodawania rekordu wysypuje się bo pole jest puste. Gdy zamiast TQuery i TUpdateSQL używałem TTable to w momencie dodawania rekordu automatycznie ustawiał domyślne wartości dla pól. Teraz nie. Jak je ustawić?

    0 4
  • #2 22 Kwi 2012 13:57
    blue_17
    Poziom 32  

    Mówisz że się wysypuje ? Co się dzieje błąd wyskakuje z bazy czy jest spowodowany działaniem samej aplikacji.

    0
  • #3 22 Kwi 2012 20:31
    prymas76
    Poziom 8  

    blue_17 napisał:
    Mówisz że się wysypuje ? Co się dzieje błąd wyskakuje z bazy czy jest spowodowany działaniem samej aplikacji.


    Tabela paradox ma pola typu integer ze zdefiniowaną wartością domyślną 0. Gdy zastosowałem komponent TTable to w momencie dodawania rekordu (Insert) w TSMDBGrid automatycznie zostawały nadawane wartości tym polom a ten grid wyszukuje wartość minimalną z tych pól i umieszcza w stopce grida (footer). Zastąpiłem komponent TTable komponentami TQuery i TUpdateSQL aby sortować tabelę i mieć jednocześnie możliwość edycji w gridzie. Ale teraz w momencie dodawania rekordu nie nadaje domyślnej wartości tym polom w gridzie i są one puste czyli mają one wartość null. I przy wyliczaniu/wyświetlaniu footera jest bład konwersji variant na integer bo ich wartość jest null. Program wyświetla komunikat i działa dalej ale jest to wkurzające. Nie wiem jak zrobić by w momencie dodawania rekordu w gridzie nadawał domyślne wartości polom tak jak przy zastosowaniu TTable, przecież gdy tworzyłem tabelę (przy użyciu DatabaseDesktop) to zdefiniowałem wartość domyśłną dla tych pól.

    0
  • #4 22 Kwi 2012 22:11
    blue_17
    Poziom 32  

    prymas76 napisał:
    i mieć jednocześnie możliwość edycji w gridzie.


    I właśnie dochodzisz do konkretnego problemu a właściwie meritum problemu edycji bazy z graficznego interfejsu problem polega na tym czy faktycznie klikając w gridzie zmieniasz zawartość danego rekordu

    Co do twojego problemu to chyba bardzo prosto można to ominąć

    po prostu:

    Kod: delphi
    Zaloguj się, aby zobaczyć kod


    A właściwie to poco używasz takich typów jak wiesz co tam ma być.

    Do zabaw z bazami danych polecam Lazarusa jest współczesny i całkowicie za darmo również do komercji.

    Pozdrawiam

    0
  • #5 22 Kwi 2012 22:43
    prymas76
    Poziom 8  

    blue_17 napisał:

    I właśnie dochodzisz do konkretnego problemu a właściwie meritum problemu edycji bazy z graficznego interfejsu problem polega na tym czy faktycznie klikając w gridzie zmieniasz zawartość danego rekordu

    Co do twojego problemu to chyba bardzo prosto można to ominąć

    po prostu:

    Kod: delphi
    Zaloguj się, aby zobaczyć kod


    A właściwie to poco używasz takich typów jak wiesz co tam ma być.

    Do zabaw z bazami danych polecam Lazarusa jest współczesny i całkowicie za darmo również do komercji.

    Pozdrawiam


    To nie ja używam tych typów ale komponent SMDBGrid (scalabium software - scalabium.com). Jak wspomniałem zawiera on footer który może wyświetlić nam minimum, maksimum, średnią czy sumę danej kolumny. To ten komponent operuje na tych typach przy określaniu wartości footera i to w nim leży problem. Pośrednio bo chyba musi być jakiś sposób aby te domyślne wartości automatycznie wpisywały się przy dodawaniu rekordu. Problem nie występował przy zastosowaniu komponentu TTable a pojawił się gdy zamiast komponentu TTable użyłem TQuery, bo w tym momencie zamiast wstawić domyślne wartości w danej kolumnie w komórkach grida zostawia je puste. Być może problem wiąże się też z tym że teraz właściwość TQuery CachedUpdates jest ustawiona na true. Mysle że przechwycenie wartości jakie TQuery wstawia grida i ich zmiana rozwiązała by problem. Tylko jak to zrobić?

    0