Announcement

Collapse
No announcement yet.

DBGrid neue row anzeigen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    Hallo, Knut, Ich habe heute ein ganzen Tag versucht um dass Problem zu löschen aber Ich lauffe immer fest.
    Ich habe UserEdit1->Text und ein DBGrid1
    Ich verstehe wirklich nicht wass Ich dann zwischen den Klammern programmieren muss.

    Comment


    • #17
      Hallo,

      hast Du die Hilfe zu 'Locate' gelesen? Dort ist meines Erachtens sogar ein Beispiel. Weiterführend könntest Du in den Examples nach '->Locate' suchen, da gibt's bestimmt auch was...

      Gruß Knut

      Comment


      • #18
        Ja, Ich finde Locate in Help und Ich habe dass gelesen.

        Implements a virtual method for searching a dataset for a specified record and making it the active record.

        virtual bool __fastcall Locate(const AnsiString KeyFields, const System::Variant &KeyValues, TLocateOptions Options);

        Description

        This function

        Checks whether the dataset is unidirectional, and if so, raises an EDatabaseError exception.
        Returns false, indicating that a matching record was not found and the active record was not changed.

        Descendant classes that are not unidirectional override this method so that it locates the record where the fields identified by the semicolon-separated list of fields in KeyFields have the values specified by the Variant or Variant array KeyValues. Options indicates whether the search is case insensitive and whether partial matches are supported. Locate returns true if a record is found that matches the specified criteria and that record is now active.
        Keine Beispiel gefunden ... Ich weiss einfach nicht wass Ich machen muss mit die Parameters.
        Ich habe schön viel gemacht aber tüt mir leicht zu sagen dass Ich es nicht verstehe...

        Comment


        • #19
          Überredet...
          In der Hilfe bei mir finde ich (BCB5 Prof.) bei TCustomDataSet::Locate (leider in Deutsch - das kann ich Dir nicht ersparen):
          Durchsucht die Datenmenge nach einem angegebenen Datensatz und macht ihn zum aktuellen Datensatz.

          virtual bool __fastcall Locate(const AnsiString KeyFields, const Variant &KeyValues, Db::TLocateOptions Options);

          Beschreibung

          Rufen Sie Locate auf, um eine Datenmenge nach einem bestimmten Datensatz zu durchsuchen und den Cursor darauf zu plazieren.

          KeyFields ist eine Zeichenkette, die eine durch Semikolons getrennte Liste mit Feldnamen enthält, in denen gesucht werden soll.

          KeyValues ist eine Variante, welche die Werte enthält, die in den Schlüsselfeldern gefunden werden sollen. Enthält KeyFields ein einzelnes Feld, gibt KeyValues den Wert für dieses Feld im gewünschten Datensatz an. Um mehrere Suchwerte anzugeben, übergeben Sie ein KeyValues ein Varianten-Array oder erzeugen Sie mit Hilfe der VarArrayOf-Routine ein Varianten-Array. Zum Beispiel:

          TLocateOptions Opts;
          Opts.Clear();
          Opts << loPartialKey;
          Variant locvalues[3];
          locvalues[0] = Variant("Sight Diver");
          locvalues[1] = Variant("P");
          locvalues[2] = Variant("408-431-1000");
          CustTable->Locate("Company;Contact;Phone", VarArrayOf(locvalues, 2), Opts);

          Options ist ein Menge, die wahlweise beim Suchen in String-Feldern zusätzlichen Spielraum ermöglicht. Wenn Options die loCaseInsensitive enthält, ignoriert Locate die Groß-/Kleinschreibung in passenden Feldern. Enthält Options die Einstellung loPartialKey, erlaubt Locate die teilweise Übereinstimmung von String in KeyValues. Wenn Options eine leere Menge ist oder wenn KeyFields keine String-Felder umfaßt wird Options ignoriert.

          Locate liefert true, wenn es einen übereinstimmenden Datensatz findet und macht diesen Datensatz zum aktuellen. Ansonsten ergibt Locate false.

          Locate setzt die schnellstmöglichen Methoden zum Auffinden passender Datensätze ein. Sind die Suchfelder in KeyFields indiziert und ist der Index mit den angegebenen Suchoptionen kompatibel, verwendet Locate den Index bei der Suche. Ansonsten erzeugt Locate einen Filter für die Suche.
          Dann musst Du natürlich noch bei TLocateOptions nachlesen...

          Und Beispiele sind hier (suche in allen cpp-Dateien nach '->Locate(' ergab das):
          Code:
          E:\Programme\Borland\CBuilder5\Examples\DBTasks\MastApp\srchdlg.cpp
          E:\Programme\Borland\CBuilder5\Examples\DBTasks\MastApp\brcstord.cpp
          E:\Programme\Borland\CBuilder5\Examples\DBTasks\MastApp\brparts.cpp
          E:\Programme\Borland\CBuilder5\Examples\DBTasks\MastApp\datamod.cpp
          E:\Programme\Borland\CBuilder5\Examples\DBTasks\MastApp\edcust.cpp
          E:\Programme\Borland\CBuilder5\Examples\DBTasks\MastApp\edorders.cpp
          E:\Programme\Borland\CBuilder5\Examples\DBTasks\MastApp\edparts.cpp
          E:\Programme\Borland\CBuilder5\Examples\DBTasks\Find\findcust.cpp
          Sollte es in Deiner Version nicht was Ähnliches geben?

          Gruß Knut

          Comment


          • #20
            Dass wird wieder liters Kaffee drinken

            Danke für Ihen Beitrage...

            Comment


            • #21
              Originally posted by Quadran View Post
              Dass wird wieder liters Kaffee drinken
              Versuchs mal mit Rotwein (natürlich nicht am Vormittag um diese Zeit!), der wirkt bei mir ganz gut...

              Viel Erfolg!
              Knut

              Comment


              • #22
                Ich habe zwei "Parameters"
                1 = Spieltag
                2 = SpielNummer

                Spieltag aus UserEdit1->Text
                SpielNummer aus UserEdit2->Text

                DBGrid1 OnClick ----> Selektierte zeile zum UserEdit1
                DBGrid2 OnClick ----> Selektierte zeile zum UserEdit2

                UserEdit1 OnChange ----> Selektierte Spieltag zum DBGrid1 und row wird angezeigt.
                UserEdit2 OnChange ----> Selektierte Spielnummer zum DBGrid2 und row wird angezeigt.


                Ich verstehe wirklich nicht wie Ich die Locate muss basteln!

                Comment


                • #23
                  Hallo,
                  Originally posted by Quadran
                  DBGrid1 OnClick ----> Selektierte zeile zum UserEdit1
                  DBGrid2 OnClick ----> Selektierte zeile zum UserEdit2
                  Das funktioniert ja wohl wie Du früher schriebst...

                  Originally posted by Quadran
                  UserEdit1 OnChange ----> Selektierte Spieltag zum DBGrid1 und row wird angezeigt.
                  UserEdit2 OnChange ----> Selektierte Spielnummer zum DBGrid2 und row wird angezeigt.
                  Ich gehe davon aus, dass in den UserEdit jeweils eine Zahl steht.

                  Im Header der Form:
                  Code:
                  private:
                      bool FFromGrid1, FFromGrid2;
                  Diese Variablen im OnCreateForm mit false initialisieren.

                  In den OnChange-Ereignissen der UserEdits (beispielhaft UserEdit1):
                  Code:
                  int Num;
                  
                  if (FFromGrid1)
                      return;
                  
                  Num = StrToIntDef(UserEdit1->Text, -1);
                  if (Num < 0)       // kein gültiger Wert
                      return;
                  
                  if (!DBGrid1->DataSource->DataSet->Locate("Spieltag", Num, TLocateOptions()))
                      ShowMessage("Spieltag Nummer " + String(Num) + " nicht gefunden!");
                  Im OnClick der DBGrids (beispielhaft wieder DBGrid1);
                  Code:
                  FFromGrid1 = true;   // verhindern, dass etwas im OnChange des UserEdit1 passiert
                  UserEdit1->Text = DBGrid1->DataSource->DataSet->Fields->FieldByName("Spieltag")->AsString;
                      // löst OnChange von UserEdit1 aus
                  FFromGrid1 = false;
                  Für komplizierte Suchen im Datenbestand solltest Du aber wirklich die Hilfe zu TCustomDataSet::Locate studieren und an kleinen Test-Applicationen üben und damit versuchen, die Sache zu verstehen.

                  Nun hast Du mich doch dazu gebracht, Deine Arbeit zu tun...
                  Magst Du mir eine Flasche Rotwein zumailen?

                  Gruß Knut

                  Comment


                  • #24
                    Ok, Danke Knut, Ich probiere einmal diese Kode...

                    Tausend mahl Danke zum Knut... es funkioniert...in beide richtungen....
                    Zuletzt editiert von Quadran; 25.08.2007, 17:34.

                    Comment


                    • #25
                      Jetz ist dass für alle "Forms" programmiert und funkioniert wunderbär.

                      Noch eine kleine frage: Ist das auch möghlich das die selektierte row gefarbt wird, gleich wie die row gefarbt wird bei OnClick von DBGrid?

                      Comment


                      • #26
                        Noch eine kleine frage: Ist das auch möghlich das die selektierte row gefarbt wird, gleich wie die row gefarbt wird bei OnClick von DBGrid?
                        Die Frage habe ich dir schon mehrmals beantwortet. Wenn du kein komfortables Gird nutzt sind alle zeichnerischen Änderungen im OnDrawColumn zu machen. D.h. feststellen, dass es die sel. Zeile ist, Background und Textfarbe setzen.Wie man das macht haben wir auch schon durch
                        Christian

                        Comment

                        Working...
                        X