Entwickler-Ecke
Datenbanken - Zeile in DBGrid markieren/Daten in weiterem Formular übern.
lola - Mo 30.08.04 12:50
Titel: Zeile in DBGrid markieren/Daten in weiterem Formular übern.
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 - 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:
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 else KundenID:= -1 finally Free end end; |
somit hast du auch in dem aufrufenden programm den aufgewählten kunden und kannst ihn weiterbewurzeln.
mfg, stefan
lola - 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:
===================================================
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 public 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
UGrohne: Delphi-Tags hinzugefügt.
grayfox - 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...
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 aKundenID: LongInt; public 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'
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 aKundenID: LongInt; public 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.
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 public 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 - 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!