Autor Beitrag
LuckyStrike4life
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 196

Win 2000, XP, SuSE Linux 8.2
D5 Enterp.
BeitragVerfasst: Mi 11.06.03 14:05 
Morgen,

weiteres Problem. Die von mir verwendeten DBEdit Felder dienen immer auch zur Ausgabe, was nicht zwingend gut sein muss.

Sobald irgendwas im Grid angecklickt wird (zur Laufzeit), stehen in den eigentlichen Eingabefeldern auch immer gleich die längst eingegebenen Daten. Das darf aber nicht sein, da nicht einfach jemand etwas verändern darf, was er nicht selbst geschrieben hat. Sprich - mit dem Abschicken der Informationen hat niemand, ausser der Chefs, mehr das Recht was zu verändern.

Gibt es eine Möglichkeit die DBEdit Komponenten so einzustellen, dass sie nicht mehr auch zur Ausgabe funktionieren? Oder gibt es eine andere Möglichkeit zu verhindern, dass alte Daten geändert werden können?
biohazard
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89



BeitragVerfasst: Mi 11.06.03 14:25 
Wenn ich das richtig verstanden habe, dann reicht es doch wenn du die Eigenschaft readonly = true setzt. (Kannst du auch im Obektinspektor machen).
LuckyStrike4life Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 196

Win 2000, XP, SuSE Linux 8.2
D5 Enterp.
BeitragVerfasst: Mi 11.06.03 14:49 
Hast du leider nicht richtig verstanden.

Die DBEdit's sind zur Eingabe da, eben nicht zur Ausgabe. Wenn ich die auf readonly setze, kann man ja nur noch damit etwas ausgeben.

Auch bringt es nichts wenns Grid auf readonly steht, dass ist davon unbeeindruckt, weil man ja direkt am Grid eh nichts eingiben kann.
biohazard
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89



BeitragVerfasst: Mi 11.06.03 15:25 
Also,
1. wenn du auf das DBGrid klickst willst du, daß die Daten nicht in den DBEdit-Feldern angezeigt werden.
2. Du willst über die Edit-Felder neue Datensätze eingeben.

Wenn die Edits überhaupt nicht zur Ausgabe dienen sollen, dann trenne sie doch von der Datenbank (DataSource).
Und wenn du einen neuen Datensatz eingeben willst stellst du vorübergehen wieder eine Verbindung her.

Hab ich das jetzt richtig verstanden?
LuckyStrike4life Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 196

Win 2000, XP, SuSE Linux 8.2
D5 Enterp.
BeitragVerfasst: Mi 11.06.03 15:32 
Sehr richtig :D ,

das ist natürlich keine schlechte Idee. Kennst du den nötigen Code dazu? Ansonsten müsste ich ihn mir mühsam zusammen suchen/reimen.

Würde mir sehr helfen.
hwb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 91

Win98 SE, Win2000
D5 Prof
BeitragVerfasst: Mi 11.06.03 15:48 
Das mußt du wohl selber ZUSAMMENSUCHEN. :D
Warum nimmst du nicht einfache Editfelder ? Da brauchst du keine Verbindung.

HWB
biohazard
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89



BeitragVerfasst: Mi 11.06.03 15:49 
z.B. so:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Button1Click(Sender: TObject);
begin
 table1.Append;
table1.FieldByName('xxx').AsString := dbedit1.text;
... usw.
table1.Post;
end;


Du erstellst einen neuen leeren Datensatz (mit append) und dann weißt du den Tabellenfeldern den Inhalt der Textbox zu. Eigentlich brauchst du dafür noch nicht mal DBEdits, das geht auch mit normalen Edits. Und am Ende speicherst du ihn (mit post).
Es gibt wahrscheinlich noch bessere Lösungen. Das ist aber die einzige die ich z.Z. kenne.
LuckyStrike4life Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 196

Win 2000, XP, SuSE Linux 8.2
D5 Enterp.
BeitragVerfasst: Mi 11.06.03 16:07 
Danke,

werde ich morgen ausprobieren. Jetzt ist erstmal Feierabend.

Melde mich garantiert nochmals deswegen :) .
LuckyStrike4life Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 196

Win 2000, XP, SuSE Linux 8.2
D5 Enterp.
BeitragVerfasst: Do 12.06.03 08:15 
Juhuu es geht,

dein Code ist richtig und mein Problem damit gelöst. Man muss nur noch beachten das man keine DBEdit Komponenten verwenden kann, denn wenn man die von der Tabelle trennt, können sie zur Laufzeit nicht mehr beschrieben werden.

Daher ganz normal TEdit nutzen :) .

Vielen Dank für deine Hilfe!!

Aber eine Sache ist noch,

ich hab auch DBCheckBoxen verwenden müssen. Wenn ich da auf einfache TCheckBoxen umsteige, wie würde denn dann der Code aussehen?
ausblenden Quelltext
1:
MainDBtabelle.FieldByName('p_a_pkw').AsString := tcheckboxp_a_pkw.text;					


So würde es wohl kaum gehen, habs nicht ausprobiert, aber es gibt ja kein Text zu übernehmen. Es muss geschaut werden ob das Teil abgehackt ist oder nicht und je nachdem eine Ausgabe wie "Ja" oder "Nein" in die Datenbank übernommen werden.

Wüsstest du da vielleicht noch was... ?
biohazard
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89



BeitragVerfasst: Do 12.06.03 08:42 
Da könntest du doch einfach eine Bedingung stellen
z.B.

if checkbox.checked = true then fieldbyname(xxx) := 'ja'
else if checkbox.checked = false then fieldbyname(xxx) := 'nein'

Eigentlich müsste das so funzen.
LuckyStrike4life Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 196

Win 2000, XP, SuSE Linux 8.2
D5 Enterp.
BeitragVerfasst: Do 12.06.03 09:03 
Das hört sich ja sehr richtig an und ist eigentlich auch verständlich, aber so mags noch nicht funktionieren.

Hab natürlich verschiedene Möglichkeiten ausprobiert, aber keine wollten klappen. Mit einen Delphi Kentnissen ist es halt nicht so weit her :cry: .

...
grayfox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: Do 12.06.03 09:16 
hallo lucky!

du kannst DBEdit-Felder ruhig auch zum anzeigen von tabelleninhalten
verwenden - hast es schon mal so versucht?

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:
unit Mainprog;

interface

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

type
  TForm1 = class(TForm)
    Table1: TTable;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    DBNavigator1: TDBNavigator;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    DBCheckBox1: TDBCheckBox;
    DBCheckBox2: TDBCheckBox;
    OpenBtn: TButton;
    CloseBtn: TButton;
    EndeBtn: TButton;
    AppendBtn: TButton;
    EditBtn: TButton;
    Label1: TLabel;
    procedure EndeBtnClick(Sender: TObject);
    procedure OpenBtnClick(Sender: TObject);
    procedure CloseBtnClick(Sender: TObject);
    procedure AppendBtnClick(Sender: TObject);
    procedure Table1NewRecord(DataSet: TDataSet);
    procedure EditBtnClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private-Deklarationen }
    editieren: Boolean;    
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.EndeBtnClick(Sender: TObject);
begin
  close;
end;

procedure TForm1.OpenBtnClick(Sender: TObject);
begin
  if not Table1.Active then
    Table1.Open;
end;

procedure TForm1.CloseBtnClick(Sender: TObject);
begin
  Table1.Close;
end;

procedure TForm1.AppendBtnClick(Sender: TObject);
begin
  Table1.Append;
  DBEdit1.SetFocus;
end;

procedure TForm1.Table1NewRecord(DataSet: TDataSet);
begin
  with table1 do begin
    FieldByName('Feld1').asBoolean:= true;
    FieldByName('Feld2').asBoolean:= false
  end;
end;

procedure TForm1.EditBtnClick(Sender: TObject);
begin
  editieren:= not editieren;
  datasource1.AutoEdit:= editieren;
  if editieren then
    Label1.Caption:= 'Edit on'
  else
    Label1.Caption:= 'Edit off';
  Label1.Update;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  editieren:= true;
end;

end.


je nach anwenderprofil darf ändern oder darf ansehen schaltest
Datasource1.AutoEdit auf false oder true

mfg, stefan
biohazard
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89



BeitragVerfasst: Do 12.06.03 09:19 
Was genau geht denn nicht (Fehlermeldung).

Steht der Befehl zusammen mit den andere zwischen append und post? Wenn nicht, dann könnte da der Fehler liegen.

Ohne nähere Infos kann ich dir jetzt auch nichts sagen.
grayfox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: Do 12.06.03 09:31 
hi biohazard!

sag ich auch, dass ein bisschen quellcode langsam gar nicht schlecht wäre.
bei der hitze mag ich meine kristallkugel nicht hervorkramen ;)

mfg, stefan
LuckyStrike4life Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 196

Win 2000, XP, SuSE Linux 8.2
D5 Enterp.
BeitragVerfasst: Do 12.06.03 09:55 
Okay okay,

ich hab aber n © auf meinen Code! :lol: Spaß bei Seite, dass Leben ist zu ernst. Du brauchst auch nicht in die Kugel schaun, Gray.

@GrayFox

Nette Idee mit dem Code den du gepostet hast, werde ich mich mal ransetzen. Auch wenn die momentane Lösung überblicklicher ist. Hab mir mal die Zeit genommen und den Code im Kopf kompiliert, müsste funktionieren, werd ich also versuchen sobald ich die Zeit hab. Thx dafür.

@biohazard

Also, mir gings nicht auf, wie ich den Code einfügen soll, ich habs natürlich zwischen append und post versucht, alles andere wäre auch etwas sehr optimistisch.

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:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
unit DB4realpas;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Grids, DBGrids, StdCtrls, Mask, DBCtrls, Db, DBTables, ExtCtrls, Menus,
  QuickRpt, Qrctrls, QRPrntr, Buttons, ComCtrls;

type
  TForm1 = class(TForm)
    MainDBDataSource: TDataSource;
    MainDBtabelle: TTable;
    MainDBGrid: TDBGrid;
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    Beenden1: TMenuItem;
    PanelHEingabe: TPanel;
    AllgAngaben: TGroupBox;
    Zweck: TDBMemo;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    quickstartpanel: TPanel;
    AutosTabelle: TTable;
    Kraftfahrzeuge1: TMenuItem;
    Hilfe2: TMenuItem;
    Info2: TMenuItem;
    N2: TMenuItem;
    Hilfe3: TMenuItem;
    Kraftfahrzeugverwaltung1: TMenuItem;
    Drucken1: TMenuItem;
    GroupBox1: TGroupBox;
    DLaufz: TDBMemo;
    DDatum: TDBMemo;
    DBMemo1: TDBMemo;
    DBMemo2: TDBMemo;
    DBMemo3: TDBMemo;
    DBMemo4: TDBMemo;
    DBEdit2: TDBEdit;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    Label20: TLabel;
    Label21: TLabel;
    Label22: TLabel;
    Label24: TLabel;
    Label23: TLabel;
    Label25: TLabel;
    Label26: TLabel;
    Label27: TLabel;
    Label28: TLabel;
    Label29: TLabel;
    Label30: TLabel;
    DBEdit4: TDBEdit;
    DBEdit5: TDBEdit;
    DBEdit6: TDBEdit;
    DBMemo5: TDBMemo;
    AutoDataSource: TDataSource;
    Button1: TButton;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    SpeedButton4: TSpeedButton;
    SpeedButton5: TSpeedButton;
    SpeedButton6: TSpeedButton;
    DBNavigator1: TDBNavigator;
    Reisemittel: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    DBLookupComboBox1: TDBLookupComboBox;
    Button2: TButton;
    Datum: TEdit;
    Name: TEdit;
    Laufzeichen: TEdit;
    Beginn: TEdit;
    Ende: TEdit;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    DBCheckBox1: TDBCheckBox;
    procedure Beenden1Click(Sender: TObject);
    procedure Kraftfahrzeugverwaltung1Click(Sender: TObject);
    procedure Info2Click(Sender: TObject);
    procedure Drucken1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses VdKraftfahrzeuge, Infopas, Druckenpas;

{$R *.DFM}

procedure TForm1.Beenden1Click(Sender: TObject);
begin
Application.Terminate;
end;

procedure TForm1.Kraftfahrzeugverwaltung1Click(Sender: TObject);
begin
Kraftfahrzeugverwaltung.Show;
end;

procedure TForm1.Info2Click(Sender: TObject);
begin

Info.ShowModal;

end;

procedure TForm1.Drucken1Click(Sender: TObject);
begin
drucken.show
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
MainDBtabelle.first;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
 MainDBtabelle.Edit;
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
MainDBtabelle.refresh;
end;


procedure TForm1.Button2Click(Sender: TObject);
begin

MainDBtabelle.Append;
MainDBtabelle.FieldByName('DATUM').AsString := Datum.text;
MainDBtabelle.FieldByName('NAME').AsString := Name.text;
MainDBtabelle.FieldByName('LAUFZ').AsString := Laufzeichen.text;
MainDBtabelle.FieldByName('BEGINN').AsString := Beginn.text;
MainDBtabelle.FieldByName('ENDE').AsString := Ende.text;


MainDBtabelle.Post;

end;


end.


Das ist der ganze Code des Hauptforms, wo sich das hier besprochene auch abspielt. Vorallem das Ende ist interessant, aber auch noch nicht vollständig.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.Button2Click(Sender: TObject);
begin

MainDBtabelle.Append;
MainDBtabelle.FieldByName('DATUM').AsString := Datum.text;
MainDBtabelle.FieldByName('NAME').AsString := Name.text;
MainDBtabelle.FieldByName('LAUFZ').AsString := Laufzeichen.text;
MainDBtabelle.FieldByName('BEGINN').AsString := Beginn.text;
MainDBtabelle.FieldByName('ENDE').AsString := Ende.text;

if checkbox1.checked = true then FieldByName('p_pkw') := 'ja'
else if checkbox1.checked = false then FieldByName('p_pkw') := 'nein'

MainDBtabelle.Post;

end;


Das ist das Wichtige für das momentane Problem, eben auch Checkboxen per If/Else Abfrage in die Datenbank aufzunehmen.

_________________
... ich kann doch nichts ...
biohazard
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89



BeitragVerfasst: Do 12.06.03 10:24 
Eigentlich hättest du das auch selber sehen können.
Wenn du auf ein Feld einer Tabelle zugreifst, mußt du auch die Tabelle angeben.

Bei den anderen Feldern hast du das gemacht (schau mal was vor fieldbyname steht).

Das von mir war doch nur so ein kurzes Beispiel. Hab mir nicht extra die Mühe gemacht den Quelltext zu schreiben. War mehr so ne Schreibtischvorlage.
Bei dem Wetter wird man aber auch dazu gezwungen alles etwas lockerer anzgehen. :)
LuckyStrike4life Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 196

Win 2000, XP, SuSE Linux 8.2
D5 Enterp.
BeitragVerfasst: Do 12.06.03 10:44 
Ob du mir das nun glaubst oder nicht, ich hatte es auch wirklich gleich beim ersten mal mit den Angaben der jeweiligen Tabelle gemacht.

Allerdings brachte mich das auch nicht weiter ... . Ich muss da noch so n Fehler drin haben.

ausblenden Delphi-Quelltext
1:
2:
if checkbox1.checked = true then MainDBtabelle.FieldByName('p_pkw') := 'ja'
else if checkbox1.checked = false then MainDBtabelle.FieldByName('p_pkw') := 'nein'


Denn so geht es eben auch nicht, dann sagt Delphi
Delphi5 hat folgendes geschrieben:

X [Fehler] DB4realpas.pas(164): Der linken Seite kann nichts zugewiesen werden
X [Fehler] DB4realpas.pas(165): Inkompatible Typen: 'TField' und 'String'
X[Fehler] DB4realpas.pas(165): Der linken Seite kann nichts zugewiesen werden
X[Fehler] DB4realpas.pas(168): Inkompatible Typen: 'TField' und 'String'
X[Fataler Fehler] DB4realdpr.dpr(8): Verwendete Unit 'DB4realpas.pas' kann nicht compiliert werden

Den ersten Fehler meint Delphi nach dem ersten '=' Zeichen zu sehen.

_________________
... ich kann doch nichts ...
biohazard
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89



BeitragVerfasst: Do 12.06.03 10:58 
Sorry, da hab ich wohl was überssehen. Hinter das fieldbyname muß natürlich noch der Wertebereich (.asString) - so wie bei den anderen auch.

table1.fieldbyname('xxx').asString ... usw.

Naja, bei dem Wetter ist es aber auch schwer sich mit Denken zu befassen. :)
LuckyStrike4life Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 196

Win 2000, XP, SuSE Linux 8.2
D5 Enterp.
BeitragVerfasst: Do 12.06.03 11:20 
Juhuu es geht!

Vielen Dank! Endlich komme ich dem ganzen ein Stück näher.

Thx 2 biohazard & grayfox.

Wir werden noch viel von einander hören, wenn ihr mögt :D .

_________________
... ich kann doch nichts ...