Problem DBGRid



  • Hallo

    Zu meinen problem ich. Ich habe eine DBGrid Komponente und habe da z.b. 3 Gefilterten daten drinne. Nun wähle ich mit rechtsklick eine Datensatz aus und will das datum auf Null setzen . Bis jetz ging es seid heute aber nicht mehr. wenn ich rechtsklicke und auf Termin löschen gehe macht er mir das ganze Programm zu und dann kann ich es erst nach ein Neustart wieder Starten .

    Der Code

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "form_tv.h"
    #include "start_arcor.h"
    int checki = 0;
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    Ttv_form *tv_form;
    //---------------------------------------------------------------------------
    __fastcall Ttv_form::Ttv_form(TComponent* Owner)
                    : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall Ttv_form::docking2Timer(TObject *Sender)
    {
    tv_form->Top=arcor_start->Height + arcor_start->Top;
    tv_form->Left=arcor_start->Left;
    }
    //---------------------------------------------------------------------------
    void __fastcall Ttv_form::FormActivate(TObject *Sender)
    {
         Update->Enabled = true;
         if(checki < -1)
          Terminloeschen1->Enabled = false;
         else
          Terminloeschen1->Enabled = true;
    }
    //---------------------------------------------------------------------------
    void __fastcall Ttv_form::UpdateTimer(TObject *Sender)
    {
             Update->Enabled = false;
             arcor_start->Table1->Filtered = true;
            // Hier Filter ich ob datum mit Null drinne sind die zeigt er nicht an
             arcor_start->Table1->Filter = "Erinnerung <> 0";
             checki = 0;
             for( checki; checki <= arcor_start->Table1->RecordCount-1; checki++);
             if( checki <= 1)
              Label1->Caption = AnsiString(checki)+" aktuellen Termin gefunden !";
             else
              Label1->Caption = AnsiString(checki)+" aktuelle Termine gefunden !";
    }
    //---------------------------------------------------------------------------
    
    void __fastcall Ttv_form::Terminloeschen1Click(TObject *Sender)
    {
           arcor_start->Table1->Edit();
    // Hier wird in der Spalte Erinnerung das Datum von z.b. 12.05.05 auf 0 gesetzt
           arcor_start->Table1->FieldValues["Erinnerung"] == 0;
           arcor_start->Table1->Post();
           Update->Enabled = true;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall Ttv_form::FormClose(TObject *Sender, TCloseAction &Action)
    {
            arcor_start->Table1->Filtered = false;
    }
    //---------------------------------------------------------------------------
    


  • Bei welcher Zeile stürzt das Programm ab?



  • void __fastcall Ttv_form::Terminloeschen1Click(TObject *Sender) 
    { 
           arcor_start->Table1->Edit(); 
    // Hier wird in der Spalte Erinnerung das Datum von z.b. 12.05.05 auf 0 gesetzt 
    
    arcor_start->Table1->FieldValues["Erinnerung"] == 0; 
    //Ab hier knallts beim Debuggen       
    arcor_start->Table1->Post(); 
           Update->Enabled = true; 
    } 
    //---------------------------------------------------------------------------
    

    Danach ist feierabend kann ich den rechnewr neu starten habe auch so ähnlich beim kunden löschen da geht es komischer weise hier schreibe ich ja nur 😕



  • Habe mal weiter probiert also es kann auch am Editiermodus liegen. Habe EDIT()auskommentiert dann kommt nur die meldung "Table 1 nicht im Editiermodus aber das programm stürzt neet ab ".

    Gru? Praetorianer



  • hast Du in der Zeile nicht ein = zuviel ???:

    arcor_start->Table1->FieldValues["Erinnerung"] == 0;
    


  • ja auch wenn das " == " nur eins da ist schmiert es mir trotzdem ab liegt aber nur in den Bereich EDIT oder Post ,wenn ich was löschen will dann geht es. Ich will aber ja nur den Wert verändern in der Spalte "Erinnerung" vom String = Datum in String = 0. Und da schmiert er mir ab, wie gesagt.

    Gruß Praetorianer



  • Hallo

    Probier mal das:

    Table1->Edit();
      Table1->FieldByName("Erinnerung")->AsDateTime = TDateTime(0);
      Table1->Post();
    

    bis bald
    akari



  • Das Programm stürtz nur ab wenn ich mehr als ein Datensatz in den DBGrid feld habe und einen auf 0 setzen will. Habe ich nur einen Datensatz drinne und setze ihn auf 0 dann macht er mir das feld leer und es stürtz net ab.

    😕 😕 😕 ratlos heul



  • So ich noch mal hänge immer noch hier dran.....

    So es liegt definitif am Edit gibt es da nee andere möglichkeit Update oder so?

    //---------------------------------------------------------------------------
    
    void __fastcall Ttv_form::Terminloeschen1Click(TObject *Sender)
    {
    
           arcor_start->Table1->Edit();// Daran liegt es hmmm Prima
    // Liegt bestimmt am DBGRid.
    // DBGrid -> Option = dgEditing will ich net nehmen soll ja per Klick im Popup sich ändern der Wert  :confused: 
           arcor_start->Table1->FieldByName("Erinnerung")->Value = 0;
           arcor_start->Table1->Filtered = true;
           arcor_start->Table1->Filter = "Erinnerung <> 0";
           Update->Enabled = true;
    }
    //---------------------------------------------------------------------------
    


  • Hallo

    ich kann das Problem nicht nachvollziehen. Ich hab mal ein Minimalnachbau gemacht, ein TTable, ein TDataSource und ein TDBGrid, das ganze zeigt dir Tabelle customer.db aus der Datenbank BCDEMOS. Wenn ich jetzt in einem Button das

    Table1->Edit();
      Table1->FieldByName("LastInvoiceDate")->AsDateTime = TDateTime(0);
      Table1->Post();
    

    ausführe, funktioniert alles wunderbar.

    Du kannst natürlich auch das SQL-Kommando selber zusammensetzen, dazu brauchst du ein TQuery, in dem du das ausführst :

    AnsiString ID = ... // Den eindeutigen ID-Wert für den aktuellen Datensatz der Datasource bestimmen
    Query->SQL->Text = "UPDATE <Tabellenname> SET Erinnerung = " + QuotedStr(TDateTime(0).DateString()) + " WHERE <Name ID-Feld> = " + QuotedStr(ID);
    Query->ExeqSQL();
    arcor_start->Table1->Refresh();
    

    bis bald
    akari


Anmelden zum Antworten