Autor Beitrag
lola
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Mo 30.08.04 12:50 
Halli Hallo

Da ich noch ein absoluter "Neuling" auf Delphi bin, hoffe ich das mir jemand weiterhelfen kann.

Ich habe eine Formular "Adressen" erstellt, auf welchem ich Stammdaten wie Name, Vorname, Adresse, Telefon usw. verwalten kann (verschiedene DBEdit's).

Dafür habe ich 5 Button's erstellt: Neu, Suchen, Mutieren, Löschen, Speichern.
Jetzt habe ich Schwierigkeiten mit dem Suchen der Stammdaten.

Wenn ich auf dem Forumlar "Adresen" den Button "Suchen" drücke, wird ein weiteres Formular geöffnet, in welchem ich mit "Name" Personen suchen kann.
Mit Hilfe von SQL können die gewünschten Daten in ein DBGrid angezeigt werden. Soweit so gut.

Nun aber zu meinem Problem:
Ich möchte im DBGrid eine Zeile markieren und mit dem Drücken eines Button die Daten in das erste Formular übernehmen.

Ist dies überhaupt möglich? Wenn ja, wer kann mir da weiterhelfen?

Vielen Dank im Voraus
Lola
:D
grayfox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: Mo 30.08.04 14:29 
hallo lola!

nichts einfacher, als das! ;)

du definierst in deinem suchdialog eine 'public'-variable, zb mit dem namen 'aKundenID' als type longint.
wenn du in deinem DBGrid einen kunden ausgewählt hast, weist du der variablen aKundenID seine ID zu.
in deinem den suchdialog aufrufenden programm überprüfst du mittels 'ModalResult', ob die suchrourtine mit ok oder cancel beendet wurde und holst dir im falle von ok den wert der variablen aKundenID. klar?


zb:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
{$UNTESTED}
  SuchDlg:= TSuchDlg.Create(application);
  with SuchDlg do begin
    try
      ShowModal;
      if ModalResult = mrOK then 
        KundenID:= aKundenID  // = die variable aus SuchDlg
      else 
        KundenID:= -1 //zur kennzeichnung, dass nichts ausgewählt wurde 
    finally
      Free
    end
  end;


somit hast du auch in dem aufrufenden programm den aufgewählten kunden und kannst ihn weiterbewurzeln.


mfg, stefan


Zuletzt bearbeitet von grayfox am Di 31.08.04 01:09, insgesamt 1-mal bearbeitet
lola Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Mo 30.08.04 15:09 
Hallo Stefan

Vielen Dank für deine Antwort!

Leider ist das Beispiel für mich noch nicht so klar. Bin wohl etwas schwer von Begriff. :wink:

Vielleicht könntest du mit meinen Begriffen das Beispiel machen? Das wäre wirklich super. Könnte sein, dass ich es dann besser begreiffe.

Such-Formular:
===================================================
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
type
  TForm3 = class(TForm)
    DBGrid1: TDBGrid;
    Label1: TLabel;
    Edit1: TEdit;
    BtnSuchen4: TButton;
    BtnAnzeigen: TButton;
    Query1: TQuery;
    DataSource1: TDataSource;
    procedure BtnSuchen4Click(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm3.BtnSuchen4Click(Sender: TObject);
begin
with Query1 do begin
SQL.Clear;
SQL.Add ('SELECT * FROM tblKUNDE');
SQL.Add ('WHERE NAME LIKE');
SQL.Add ('"' + Edit1.Text + '%"');

Query1.Open;
end;
end;

procedure TForm3.BtnAnzeigenClick(Sender: TObject);
begin

end;
end.

============================================================

Gruss
Lola

Moderiert von user profile iconUGrohne: Delphi-Tags hinzugefügt.
grayfox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: Di 31.08.04 01:08 
hallo lola!

weil ich grad nichts wichtigeres zu tun hatte... :wink:

beim hauptprogramm sollte es keine probleme geben - es besteht hier aus einem edit-feld und 2 buttons...

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
unit Mainprog;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons;

type
  TMainDlg = class(TForm)
    Edit1: TEdit;
    SuchBtn: TSpeedButton;
    EndeBtn: TBitBtn;
    procedure EndeBtnClick(Sender: TObject);
    procedure SuchBtnClick(Sender: TObject);
  private
    { Private-Deklarationen }
    aKundenID: LongInt;
  public
    { Public-Deklarationen }
  end;

var
  MainDlg: TMainDlg;

implementation

uses DataMod, SuchFrm;

{$R *.DFM}

procedure TMainDlg.EndeBtnClick(Sender: TObject);
begin
  DM.Query1.Close;
  close
end;

procedure TMainDlg.SuchBtnClick(Sender: TObject);
begin
  SuchDlg:= TSuchDlg.Create(Application);
  with SuchDlg do begin
    try
      ShowModal;
      if ModalResult= mrOk then
        aKundenID:= GetKundenID
      else
        aKundenID:= -1;
    finally
      Free
    end
  end;

  if aKundenID > -1 then begin
    with DM.Query1 do begin
      Close;
      SQL.Clear;
      SQL.Add('SELECT CustNo, Company FROM customer ');
      SQL.Add('WHERE (CustNo = :KundenNo)');
      ParamByName('KundenNo').asInteger:= aKundenID;
      Open
    end;

    Edit1.Text:= DM.Query1.FieldByName('Company').asString
  end
end;

end.



der suchdialog - eigentlich auch selbsterklärend - nur das dataset der datasource zeigt auf 'DM.Query1'. wenn du aber das datenmodul zu beginn erzeugst und in die uses-klausel aufnimmst, wird dir das richtige dataset vorgeschlagen.
der suchdialog wird erst zur laufzeit erzeugt (in [Projekt] - [Optionen] aus der listbox 'automatisch erzeugte' nach 'verfügbar' verschieben'

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
unit SuchFrm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, DBCtrls, Grids, DBGrids, ExtCtrls, Db;

type
  TSuchDlg = class(TForm)
    Panel1: TPanel;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    StartBtn: TSpeedButton;
    DBGrid1: TDBGrid;
    Panel2: TPanel;
    DBNavigator1: TDBNavigator;
    StaticText1: TStaticText;
    BitBtn1: TBitBtn;
    UebernahmeBtn: TBitBtn;
    DataSource1: TDataSource;
    procedure StartBtnClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure UebernahmeBtnClick(Sender: TObject);
    procedure DBGrid1DblClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private-Deklarationen }
    aKundenID: LongInt;
  public
    { Public-Deklarationen }
    function GetKundenID: LongInt;
  end;

var
  SuchDlg: TSuchDlg;

implementation

uses DataMod;

{$R *.DFM}

function ChangeChar(tmpString: String):String;
var
  i: SmallInt;
begin
  Result:= '';
  if tmpString= '' then
    Exit;

  for i:= 1 to Length(tmpString) do
    if tmpString[i] = '*' then
      tmpString[i]:= '%'
    else if tmpString[i] = '?' then
      tmpString[i]:= '_';
  Result:= tmpString
end;

function TSuchDlg.GetKundenID: LongInt;
begin
  Result:= aKundenID
end;

procedure TSuchDlg.StartBtnClick(Sender: TObject);
var
  SqlString: String;
begin
  SqlString:= 'SELECT * FROM customer WHERE (Company LIKE "%s") '
    + 'AND (City LIKE "%s")';
  with DM.Query1 do begin
    Close;
    SQL.Text:= (Format(SqlString,[ChangeChar(Edit1.Text),ChangeChar(Edit2.Text)]));
    Open
  end;
end;

procedure TSuchDlg.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  DM.Query1.Close
end;

procedure TSuchDlg.UebernahmeBtnClick(Sender: TObject);
begin
  aKundenID:= DM.Query1.FieldByName('CustNo').asInteger
end;

procedure TSuchDlg.DBGrid1DblClick(Sender: TObject);
begin
  aKundenID:= DM.Query1.FieldByName('CustNo').asInteger;
  ModalResult:= mrOk
end;

procedure TSuchDlg.FormShow(Sender: TObject);
begin
  DM.Query1.Close
end;

end.


das datenmodul ist auch nichts aussergewöhnliches - darin befindet sich nur die Query1,
deren databasename 'DBDemos' lautet.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
unit DataMod;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db, DBTables;

type
  TDM = class(TDataModule)
    Query1: TQuery;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  DM: TDM;

implementation

{$R *.DFM}

end.


ich hoffe, dass du nun besser damit zurecht kommst - wenn nicht, dann frag ruhig noch mal ;)

mfg, stefan
ps: schon klar, dass es kürzere lösungen gibt, aber diese hat auch seine vorteile
lola Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Di 31.08.04 10:42 
Hallo Stefan

Vielen Vielen Dank!!

Ich probliere das ganze Mal.
Bei Problemen melde ich mich sonst wieder. :wink:

Gruss
Lola