Announcement

Collapse
No announcement yet.

Doppelklick auf DBGrid (Felhermeldung)

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

  • Doppelklick auf DBGrid (Felhermeldung)

    Hallo Leute!

    Habe 2 Formulare
    1 = Hauptformular, wo der Kunde dann erscheinen soll mit all seinen Daten
    2 = Kundensuche, wo ich den jeweiligen Kunden suche

    für die suche habe ich folgenden code:

    <PRE>
    procedure TKundensuche.SuchenClick(Sender: TObject);
    var
    txt : string;
    begin
    txt := 'select Nachname, Vorname from Kundendaten where Nachname like ';
    txt := txt + QuotedStr(edit1.text + '%');
    txt := txt + ' or Vorname like ' + QuotedStr(edit1.text + '%');
    ADODataSet1.active := False;
    ADODataSet1.CommandText := txt;
    ADODataSet1.active := True;
    end;
    </PRE>

    für die übernahme auf das Hauptformular habe ich diesen code

    <PRE>
    procedure TKundensuche.DBGrid1DblClick(Sender: TObject);
    begin
    with Kundendaten.ADODataSet2 do begin
    Kundendaten.ADODataSet2.active := false;
    Kundendaten.ADODataSet2.CommandText := 'select * from Kundendaten where Kunden-Nr = ' +
    QuotedStr(ADODataSet1.FieldByName('Kunden-Nr') .AsString);
    Kundendaten.ADODataSet2.active := true;
    end;
    end;
    </PRE>

    Wenn ich jetzt einen Kunden suchen will kommt folgende Fehlermeldung:

    ADODataSet1 Kunden-Nr nicht gefunden.

    An was kann das liegen?

    PS: Das Feld Kunden-Nr existiert in der Datenbank

    ------------------
    Grüße, Andi

  • #2
    Hallo,

    warum so kompliziert? Wenn die SELECT-Abfrage mit Parameter direkt über den Objektinspektor zugewiesen wird, kann man über den Feldeditor persistente TField-Instanzen anlegen, so dass eine Suche über FieldByName überflüssig ist. Statt dessen greift man direkt über die TField-Namen auf die Information zu:
    <pre>
    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    StdCtrls, Db, Grids, DBGrids, ADODB;

    type
    TForm1 = class(TForm)
    ADOConnection1: TADOConnection;
    ADODataSet1: TADODataSet;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    ADODataSet1CustNo: TFloatField;
    ADODataSet1Company: TWideStringField;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    private
    { Private-Deklarationen }
    public
    { Public-Deklarationen }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.DFM}

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    ADODataSet1.Parameters[0].Value := 1221;
    ADODataSet1.Active := True;
    ShowMessage(ADODataSet1Company.Value);
    end;

    end.
    </pre>

    <pre>
    object ADODataSet1: TADODataSet
    Connection = ADOConnection1
    CursorLocation = clUseServer
    CommandText = 'SELECT * FROM customer WHERE CustNo = :CustNo'
    Parameters = <
    item
    Name = 'CustNo'
    Attributes = [paNullable]
    DataType = ftFixedChar
    NumericScale = 255
    Precision = 255
    Size = 510
    Value = Null
    end>
    Left = 56
    Top = 8
    object ADODataSet1CustNo: TFloatField
    FieldName = 'CustNo'
    end
    object ADODataSet1Company: TWideStringField
    FieldName = 'Company'
    Size = 30
    end
    end
    </pre&gt

    Comment


    • #3
      Hi, danke erstmal für die Antwort, hab aber noch fragen:

      den 1. Teil, den du mir geschickt hast, welchen Aufgabenbereich hat dieser?
      den 2. Teil, was bewirkt dieser und wo setzte ich ihn ein?

      Bitte entschuldige, aber ich bin noch anfänger in delphi!

      Grüße, And

      Comment


      • #4
        Hallo,

        beide Teile gehören zusammen. Der ersten Teil ist der vollständige Inhalt der PAS-Datei meines Beispiel, während der 2. Teile die im Objektinspektor visuell vorgenommene Konfiguration zeigt. Wenn man in Delphi mit der rechten Maustaste auf das Formular klickt, kann man den Menüeintrag <b>Ansicht als Text</b> aufrufen und "sieht" dann das Formular in der Textdarstellung. Der Vorteil liegt darin, dass diese Zeilen über die Zwischenablage kopiert und hier im Forum eingefügt werden können, so dass ich nicht alle im Objektinspektor vorgenommenen Konfiguration mühsam in Textform beschreiben muss

        Comment


        • #5
          Mit was kann ich deine Bezeichnung CustNo und customer und company mit meiner Vergleichen?

          Grüße, And

          Comment


          • #6
            Hallo,

            &gt; SELECT * FROM customer WHERE CustNo = :CustNo

            wie sie SELECT-Abfrage zeigt, ist <i>Customer</i> der Name der Tabelle, während sich hinter <i>CustNo</i> eine Spalte dieser Tabelle (Primärschlüssel) verbirgt. Da Delphi das * beim SELECT in die beiden TField-Instanzen ADODataSet1CustNo und ADODataSet1Company aufgelöst hat, muss sich hinter <i>Company</i> ebenfalls eine Spalte der Tabelle Customer verbergen

            Comment


            • #7
              Hallo, jetzt habe ich alles umgesetzt.

              Jetzt ist folgendes.
              Wenn ich das Formular Kundensuche öffne habe ich dort ein DBGrid
              und ein button1.

              Das DBGrid ist leer und hineinschreiben kann ich auch nichts.
              Wenn ich dann auf Button1 klicke, kommt ein neues Fenster, da steht auch nichts drinn bis auf ein Button (OK)

              Wenn ich dann auf OK klicke, steht im DBGrid in den Grauen Feldern oben "KundenNr" und "Nachname"

              In den darunterliegenden Feldern steht nichts.

              Ich möchte, wenn ich in Edit1 den Nachnamen eingebe, dass es mir in DBGrid dann auch erscheint. Wenn ich dann im DBGrid 2x Klicke, möchte ich dass ich im Hauptformular den ausgewählten Kunden mit all seinen Datensätzen erscheint.

              Was muß ich denn jetzt noch beachten und tun?

              Mein Code sieht so aus:

              <PRE>
              nit Unit11;

              interface

              uses
              Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
              StdCtrls, Db, Grids, DBGrids, ADODB;

              type
              TKundensuche = class(TForm)
              ADOConnection1: TADOConnection;
              ADODataSet1: TADODataSet;
              DataSource1: TDataSource;
              DBGrid1: TDBGrid;
              ADODataSet1KundenNr: TAutoIncField;
              ADODataSet1Nachname: TWideStringField;
              Button1: TButton;
              procedure Button1Click(Sender: TObject);
              private
              { Private-Deklarationen }
              public
              { Public-Deklarationen }
              end;

              var
              Kundensuche: TKundensuche;

              implementation

              {$R *.DFM}

              procedure TKundensuche.Button1Click(Sender: TObject);
              begin
              ADODataSet1.Parameters[0].Value := 1221;
              ADODataSet1.Active := True;
              ShowMessage(ADODataSet1Nachname.Value);
              end;

              end.
              </PRE>

              Bei dir steht in Type "ADODataSet1CustNo: <B>TFloatField;</B>
              Bei mir steht in Type "ADODataSet1KundenNr: <B>TAutoIncField;</B>

              Ist das richtig?

              Grüße, And

              Comment


              • #8
                Hallo,

                &gt;Bei dir steht in Type "ADODataSet1CustNo: TFloatField; Bei mir steht in Type "ADODataSet1KundenNr: TAutoIncField;

                Delphi setzt je nach vorgefundenen Datentyp der Tabellenspalte automatisch die richtige TField-Instanz für diesen Datentyp ein. Immer dann, wenn Delphi zu TAutoIncField greift, handelt es sich in der Datenbank um eine AutoWert-Spalte (der der der Wert automatisch von der Datenbank ausgefüllt wird).

                &gt;Ich möchte, wenn ich in Edit1 den Nachnamen eingebe, dass es mir in DBGrid dann auch erscheint.

                Wenn in Edit1 der zu suchende Kundenname eingetragen wird, müssen die beiden Schritte (ADODataSet1.Parameters[0].Value := Edit1.Text; + ADODataSet1.Active := True immer dann ausgeführt werden, denn der Anwender die Eingabe in Edit1 beendet hat. Man kann dazu entweder auf den Fokus-Wechsel reagieren (TEdit-Ereignis <b>OnExit</b>) oder einen speziellen Such-Button vorsehen.
                <pre>
                procedure TForm1.Edit1Exit(Sender: TObject);
                begin
                ADODataSet1.Parameters[0].Value := Edit1.Text;
                ADODataSet1.Active := True;
                end;
                </pre>
                Dann muss man nur noch das Doppelklick auf das TDBGrid auswerten. Das Ganze könnte dann so aussehen, wobei ich auf die zusammen mit Delphi installierte Beispieldatenbank <b>dbdemos.mdb</b> zurückgreife:
                <pre>
                unit Unit1;

                interface

                uses
                Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
                Dialogs, IBDatabase, DB, StdCtrls, Grids, DBGrids, ADODB;

                type
                TForm1 = class(TForm)
                ADOConnection1: TADOConnection;
                ADODataSet1: TADODataSet;
                DataSource1: TDataSource;
                DBGrid1: TDBGrid;
                EditSucheCustomer: TEdit;
                ButtonSuche: TButton;
                ADODataSet1Addr1: TWideStringField;
                ADODataSet1Addr2: TWideStringField;
                ADODataSet1City: TWideStringField;
                ADODataSet1Company: TWideStringField;
                procedure ButtonSucheClick(Sender: TObject);
                procedure DBGrid1DblClick(Sender: TObject);
                private
                { Private-Deklarationen }
                public
                { Public-Deklarationen }
                end;

                var
                Form1: TForm1;

                implementation

                {$R *.dfm}

                procedure TForm1.ButtonSucheClick(Sender: TObject);
                begin
                ADODataSet1.Parameters[0].Value := EditSucheCustomer.Text;
                ADODataSet1.Active := True;
                end;

                procedure TForm1.DBGrid1DblClick(Sender: TObject);
                begin
                ShowMessage(ADODataSet1Company.Value);
                end;

                end.
                </pre>
                Konfiguration im Objektinspektor:
                <pre>
                object Form1: TForm1
                Left = 351
                Top = 116
                Width = 696
                Height = 480
                Caption = 'Form1'
                Color = clBtnFace
                Font.Charset = DEFAULT_CHARSET
                Font.Color = clWindowText
                Font.Height = -11
                Font.Name = 'MS Sans Serif'
                Font.Style = []
                OldCreateOrder = False
                PixelsPerInch = 96
                TextHeight = 13
                object DBGrid1: TDBGrid
                Left = 16
                Top = 48
                Width = 537
                Height = 120
                DataSource = DataSource1
                TabOrder = 0
                TitleFont.Charset = DEFAULT_CHARSET
                TitleFont.Color = clWindowText
                TitleFont.Height = -11
                TitleFont.Name = 'MS Sans Serif'
                TitleFont.Style = []
                OnDblClick = DBGrid1DblClick
                end
                object EditSucheCustomer: TEdit
                Left = 136
                Top = 8
                Width = 121
                Height = 21
                TabOrder = 1
                Text = 'U%'
                end
                object ButtonSuche: TButton
                Left = 264
                Top = 8
                Width = 75
                Height = 25
                Caption = 'Suche'
                TabOrder = 2
                OnClick = ButtonSucheClick
                end
                object ADOConnection1: TADOConnection
                Connected = True
                ConnectionString =
                'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Database\dbdemos.mdb;Persist Security Info=False'
                CursorLocation = clUseServer
                LoginPrompt = False
                Mode = cmShareDenyNone
                Provider = 'Microsoft.Jet.OLEDB.4.0'
                Left = 16
                Top = 8
                end
                object ADODataSet1: TADODataSet
                Connection = ADOConnection1
                CursorLocation = clUseServer
                CommandText =
                'SELECT Addr1, Addr2, City, Company FROM customer WHERE Company LIKE :Company'
                Parameters = <
                item
                Name = 'Company'
                Attributes = [paNullable]
                DataType = ftFixedChar
                NumericScale = 255
                Precision = 255
                Size = 510
                Value = Null
                end>
                Left = 48
                Top = 8
                object ADODataSet1Addr1: TWideStringField
                FieldName = 'Addr1'
                Size = 30
                end
                object ADODataSet1Addr2: TWideStringField
                FieldName = 'Addr2'
                Size = 30
                end
                object ADODataSet1City: TWideStringField
                FieldName = 'City'
                Size = 15
                end
                object ADODataSet1Company: TWideStringField
                FieldName = 'Company'
                Size = 30
                end
                end
                object DataSource1: TDataSource
                DataSet = ADODataSet1
                Left = 88
                Top = 8
                end
                end
                </pre&gt

                Comment


                • #9
                  Hi, ich hab jetzt alles so gemacht, aber im DBGrid sehe ich noch immer keine Namen, wenn ich sie in Edit1 eingegeben habe.

                  Übrigens, ich möchte, dass ich dann auf dem Hauptformular den Kunden sehe und nicht auf einer ShowMessage.

                  Mein Code im Suchformular:
                  <PRE>
                  unit Unit11;

                  interface

                  uses
                  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
                  StdCtrls, Db, Grids, DBGrids, ADODB;

                  type
                  TKundensuche = class(TForm)
                  ADOConnection1: TADOConnection;
                  ADODataSet1: TADODataSet;
                  DataSource1: TDataSource;
                  DBGrid1: TDBGrid;
                  ADODataSet1KundenNr: TAutoIncField;
                  ADODataSet1Nachname: TWideStringField;
                  Button1: TButton;
                  Edit1: TEdit;
                  procedure DBGrid1DblClick(Sender: TObject);
                  procedure Edit1Change(Sender: TObject);
                  private
                  { Private-Deklarationen }
                  public
                  { Public-Deklarationen }
                  end;

                  var
                  Kundensuche: TKundensuche;

                  implementation

                  {$R *.DFM}

                  procedure TKundensuche.Edit1Change(Sender: TObject);
                  begin
                  ADODataSet1.Parameters[0].Value :=Edit1.Text;
                  ADODataSet1.Active := True;
                  end;

                  procedure TKundensuche.DBGrid1DblClick(Sender: TObject);
                  begin
                  ShowMessage(ADODataSet1Nachname.Value);
                  end;
                  end.
                  </PRE>

                  So würde es ja super gehen, wenn ich jetzt nur noch die Kundennamen sehen würde.

                  Das mit dem DBGrid1DblClick muß doch auch anders zu lösen sein, damit die Kundendaten dann auch im Hauptformular (alle Daten) erscheinen!

                  Grüße, And

                  Comment


                  • #10
                    Hallo,

                    mein Beispiel mit dem <i>ShowMessage(ADODataSet1Company.Value)</i>-Aufruf soll nur demonstrieren, dass man beim Doppelklick die Daten des im TDBGrid über den Mauslick ausgewählten Datensatzes abrufen kann. Der Wert aus <i>ADODataSet1Company.Value</i> kann nun an das andere Formular übergeben werden, um dort die Suche nach diesem einen Datensatz zu starten und alle Spalten dieses Datensatzes anzuzeigen.

                    Die Suche läuft prinzipiell in mehreren Teilen ab: <br>
                    1. Suchbegriff im TEdit eintragen <br>
                    2. Suche über eine <b>LIKE</b>-Einschränkung starten, um alle die Datensätze zu suchen, die mit der eingetragenen Zeichenfolge beginnen. Das Jokerzeichen in meinem Beispiel (im TEdit wird ein % angehängt) beachten!<br>
                    3. Die Suche liefert nur die Spalten der Tabelle zurück, die für die Auswahl eines bestimmten Datensatzes notwendig sind <br>
                    4. Hat der Anwender einen Datensatz aus dem TDBGrid über Doppelklick ausgewählt, wird auf dem anderen Formular eine neue SELECT-Abfrage gestartet, die nicht LIKE, sondern eine direkte Suche nach dem ausgewählten Primärschlüsselfeld der Tabelle startet. Als Parameter kann dazu der ausgelesene Wert von <i>ADODataSet1Nachname.Value</i> übergeben werden. Der Anwender erhält die aktuellsten Daten zum ausgewählten Datensatz.

                    In einem Beispiel könnte das so aussehen:

                    Das <b>Hauptformular</b> zeigt den ausgewählten Datensatz an:
                    <pre>
                    unit Unit1;

                    interface

                    uses
                    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
                    Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB;

                    type
                    TFormMain = class(TForm)
                    ADOConnection1: TADOConnection;
                    ADODataSet1: TADODataSet;
                    DataSource1: TDataSource;
                    DBGrid1: TDBGrid;
                    ButtonSuchformular: TButton;
                    procedure ButtonSuchformularClick(Sender: TObject);
                    private
                    { Private-Deklarationen }
                    public
                    { Public-Deklarationen }
                    procedure SucheKunde(iCustNo: Double);
                    end;

                    var
                    FormMain: TFormMain;

                    implementation

                    uses Unit2;

                    {$R *.dfm}

                    procedure TFormMain.ButtonSuchformularClick(Sender: TObject);
                    begin
                    FormSuche.ShowModal;
                    end;

                    procedure TFormMain.SucheKunde(iCustNo: Double);
                    begin
                    ADODataSet1.Active := False;
                    ADODataSet1.Parameters[0].Value := iCustNo;
                    ADODataSet1.Active := True;
                    end;

                    end.
                    </pre>
                    Das <b>Suchformular</b> wird vom Hauptformular aus aufgerufen:
                    <pre>
                    unit Unit2;

                    interface

                    uses
                    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
                    Dialogs, DB, ADODB, StdCtrls, Grids, DBGrids;

                    type
                    TFormSuche = class(TForm)
                    EditName: TEdit;
                    Button1: TButton;
                    ADODataSetSuche: TADODataSet;
                    DBGrid1: TDBGrid;
                    DataSource1: TDataSource;
                    ADODataSetSucheCustNo: TFloatField;
                    ADODataSetSucheAddr1: TWideStringField;
                    ADODataSetSucheCity: TWideStringField;
                    procedure Button1Click(Sender: TObject);
                    procedure DBGrid1DblClick(Sender: TObject);
                    private
                    { Private-Deklarationen }
                    public
                    { Public-Deklarationen }
                    end;

                    var
                    FormSuche: TFormSuche;

                    implementation

                    uses Unit1;

                    {$R *.dfm}

                    procedure TFormSuche.Button1Click(Sender: TObject);
                    begin
                    ADODataSetSuche.Active := False;
                    ADODataSetSuche.Parameters[0].Value := EditName.Text;
                    ADODataSetSuche.Active := True;
                    end;

                    procedure TFormSuche.DBGrid1DblClick(Sender: TObject);
                    begin
                    FormMain.SucheKunde(ADODataSetSucheCustNo.Value);
                    ADODataSetSuche.Active := False;
                    Close;
                    end;

                    end.
                    </pre&gt

                    Comment


                    • #11
                      Hi, habe jetzt alles eingegeben.

                      Im Hauptformular bei:

                      Kundensuche.ShowModal;

                      kommt folgende Fehlermeldung:

                      [Fehler] KV.pas(342): Undefinierter Bezeichner: 'ShowModal'

                      Was muß ich dabei beachten?

                      Muß ich im Hauptformular in ADODataSet auch einen CommandText eingeben? Wenn ja, welchen denn?

                      Grüße, And

                      Comment


                      • #12
                        Hallo,

                        in einem Beispiel gehört <i>FormSuche.ShowModal;</i> zur Zeile
                        <pre>
                        var
                        FormSuche: TFormSuche;
                        </pre>
                        Es wird also die Methode ShowModal des Formulars <i>FormSuche</i> (eine TFormSuche-Instanz) aufgerufen. In der Delphi-Hilfe wird ShowModal mit einem weiteren Beispiel ausführlicher beschrieben. Damit der Compiler den Bezeichner <i>FormSuche</i> finden kann, muss die zweite Unit über <b>uses Unit2;</b> im Hauptformular eingebunden werden.

                        &gt;Muß ich im Hauptformular in ADODataSet auch einen CommandText eingeben? Wenn ja, welchen denn?

                        Ja - es wird eine SELECT-Abfrage mit einem Parameter benötigt (siehe mein erstes Beipsiel vor einigen Tagen)

                        Comment


                        • #13
                          Hallo, das mit dem ShowModal hab ich jetz so gelöst:

                          <PRE>
                          rocedure TKundendaten.KundensucheClick(Sender: TObject);
                          begin
                          with TKundensuche.create(Application) do
                          begin
                          showmodal;
                          free;
                          end;
                          end;
                          </PRE>

                          Das funktioniert auch.

                          Im Kundensuche Formular habe ich unter ADODataSet1 folgenden CommandText eingegeben:

                          SELECT KundenNr, Nachname, Vorname FROM Kundendaten WHERE Nachname LIKE :Nachname

                          Somit sehe ich, wenn ich auf OK klicke im DBGrid den jeweiligen Datensatz.

                          Wenn ich jetzt im DBGrid doppel klicke, kommt die Fehlermeldung:

                          "Der Index der Liste überschreitet das Maximum (0)"

                          Was bedeutet das?

                          <PRE>
                          type
                          TKundensuche = class(TForm)
                          DataSource1: TDataSource;
                          DBGrid1: TDBGrid;
                          Edit1: TEdit;
                          Label1: TLabel;
                          OK: TButton;
                          Abbrechen: TButton;
                          ADODataSetSuche: TADODataSet;
                          ADODataSetSucheKundenNr: TAutoIncField;
                          ADODataSetSucheNachname: TWideStringField;
                          ADODataSetSucheVorname: TWideStringField;
                          procedure DBGrid1DblClick(Sender: TObject);
                          procedure OKClick(Sender: TObject);
                          procedure AbbrechenClick(Sender: TObject);
                          private
                          { Private-Deklarationen }
                          public
                          { Public-Deklarationen }
                          end;
                          var
                          Kundensuche: TKundensuche;
                          implementation
                          uses KV;
                          {$R *.DFM}
                          procedure TKundensuche.DBGrid1DblClick(Sender: TObject);
                          begin
                          Kundendaten.SucheKunde(ADODataSetSucheKundenNr.Val ue);
                          ADODataSetSuche.Active :=False;
                          Close;
                          end;
                          procedure TKundensuche.OKClick(Sender: TObject);
                          begin
                          ADODataSetSuche.Active := False;
                          ADODataSetSuche.Parameters[0].Value := Edit1.Text;
                          ADODataSetSuche.Active := True;
                          end;
                          procedure TKundensuche.AbbrechenClick(Sender: TObject);
                          begin
                          Close;
                          end;
                          end.
                          </PRE>

                          Im Hauptformular sieht das so aus:

                          <PRE>
                          .....
                          public
                          { Public-Deklarationen }
                          procedure SucheKunde(iKundenNr: Double);
                          end;
                          .........

                          procedure TKundendaten.SucheKunde(iKundenNr: Double);
                          begin
                          ADODataSet2.Active := False;
                          ADODataSet2.Parameters[0].Value := iKundenNr;
                          ADODataSet2.Active := True;
                          end;
                          </PRE>

                          Nur weiß ich jetzt nicht, was ich in ADODataSet1 des Hauptformulares in CommandText eingeben muß.

                          Grüße And

                          Comment


                          • #14
                            Hallo,
                            ShowModal funktioniert.

                            Ich habe jetzt einiges bemerkt.
                            Ich habe im Hauptformular alles zuerst mit ADOTable1 erstellt.
                            Jetzt habe ich es umgestellt.
                            Im ADODataSet1 (Hauptformular) bei Eigenschaften habe ich Active auf True gestellt, damit ich, wenn ich das Programm starte, die Datensätze auch sehen kann. Ich kann sie auch Navigieren, Neue hinzufügen und Speichern usw..

                            Wenn ich jetzt auf Kundensuche gehe, kann ich jetzt den jeweiligen Kunden suchen.
                            Ich sehe ihn auch im DBGrid.

                            Was ich jetzt nicht kann, ist Doppelklick auf DBGrid.

                            <PRE>
                            procedure TKundensuche.DBGrid1DblClick(Sender: TObject);
                            begin
                            Kundendaten.SucheKunde(ADODataSetSucheKundenNr.Val ue);
                            ADODataSetSuche.Active :=False;
                            Close;
                            end;
                            </PRE>

                            Es kommt dann immer die Meldung:

                            "Der Index der Liste überschreitet das Maximum (0)"

                            Im Hauptformular sehe ich dann auch keinen Datensatz mehr.

                            Wenn ich dann auf Abbrechen klicke (close sehe ich im Hauptformular keinen einzigen Datensatz. Ich kann auch nicht Navigieren.

                            Es kommt dann die meldung:

                            "ADODataSet1: Operation bei geschlossener Datenmenge nicht ausführbar."

                            Was muß ich da tun, damit ich weiters die Datensätze sehe.

                            Grüße And

                            Comment

                            Working...
                            X