![]() |
Re: Probleme mit dbgrid!!!
Zitat:
Zitat:
|
Re: Probleme mit dbgrid!!!
Zitat:
Ich gern noch vorgespeicherte profile haben.. also das schon 100 ids vorgetragen sind... wie kann man das machen?? Plautzer |
Re: Probleme mit dbgrid!!!
HI,
ich verstehe es einfach nicht, ich kann weder auf dauer in meiner tabelle löschen, editieren... immer wenn ich das programm neue öffne.. sind genau die exakten werte da?? Hat dafür jemand ne erklärung auf lager... eigentlich darf es doch net gebn oda?? ich habe hier ein schleife um auf die 100 einträge zu kommen, doch klappt einfach nicht, da eine fehlermeldung wegen string/integer kommt: var i:integer begin for i:=1 to 100 do begin Table1.Edit; Table1.Fields['Whg'].AsInteger:=i; Table1.Post; end; end; wie kann ich das funktionstüchtig machen?? Danke Plautzer |
Re: Probleme mit dbgrid!!!
Hi plautzer,
ich glaube, es gibt zwei Probleme in Deinem Code. Erstens scheint Dein Feld 'Whg' nicht vom Typ integer zu sein. Das müsstest Du erst mal korrigieren. Alternativ kannst Du natürlich auch die Zahl mit QuotedStr(i) in einen String umwandeln. Zweitens, wenn Du mit "auf hundert Einträge kommen" meinst, dass 100 Datensätze erzeugt werden sollen, solltest Du statt Table1.Edit besser Table1.Append verwenden (Edit schreibt immer in den aktuellen, also in denselben Datensatz). Außerdem kannst Du mal versuchen, das Feld mit FieldByName anzusprechen.
Delphi-Quellcode:
var i:integer
begin for i:=1 to 100 do with Table1 do begin Append; FieldByName('Whg').AsInteger := i; Post; end; end; |
Re: Probleme mit dbgrid!!!
Hey,
danke es funzt. :) Doch das problem mit dem speichern besteht immernoch. Ich kann nichts auf dauer löschen, editieren hinzufügen. Es speichert einfach nicht!!!! What to do?? Plautzer |
Re: Probleme mit dbgrid!!!
Hi Plautzer,
kannst Du mal Deinen aktuellen Code hier reinposten? Sonst fischen wir hier im Trüben. |
Re: Probleme mit dbgrid!!!
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Buttons, DB, StdCtrls, Mask, DBCtrls, DBTables, ExtCtrls, Grids, DBGrids; type TMietverwaltung = class(TForm) Panel1: TPanel; Panel2: TPanel; Table1: TTable; Table2: TTable; Table1Whg: TAutoIncField; Table1Name: TStringField; Table1Vorname: TStringField; Table1Mietbegin: TDateField; Table1Bemerkung: TStringField; Table1Telefon: TIntegerField; Table1Bruttomiete: TCurrencyField; Table1Nettomiete: TCurrencyField; Table1Nebenkosten: TCurrencyField; Table1Kaltwasser: TCurrencyField; Table1Warmwasser: TCurrencyField; Table1Mll: TCurrencyField; Table1Fernwrme: TCurrencyField; Table1Antenne: TCurrencyField; Table1HMservice: TCurrencyField; Label1: TLabel; E_whg: TDBEdit; DataSource1: TDataSource; Label2: TLabel; E_name: TDBEdit; Label3: TLabel; E_vorname: TDBEdit; Label4: TLabel; E_mietbeg: TDBEdit; Label5: TLabel; E_Bemerk: TDBEdit; Label6: TLabel; E_tel: TDBEdit; Label7: TLabel; E_brutto: TDBEdit; Label8: TLabel; E_netto: TDBEdit; Label9: TLabel; E_neben: TDBEdit; Sp_schlies: TSpeedButton; Sp_off: TSpeedButton; DBGrid1: TDBGrid; first: TBitBtn; prior: TBitBtn; next: TBitBtn; last: TBitBtn; store: TButton; delete: TButton; new: TButton; cancel: TButton; Table2Id: TIntegerField; Table2Datum: TDateField; Table2Bruttomiete: TCurrencyField; Table2Bezahlt: TStringField; DataSource2: TDataSource; Button1: TButton; Button2: TButton; DBNavigator1: TDBNavigator; Button3: TButton; procedure Sp_offClick(Sender: TObject); procedure Sp_schliesClick(Sender: TObject); procedure firstClick(Sender: TObject); procedure priorClick(Sender: TObject); procedure nextClick(Sender: TObject); procedure lastClick(Sender: TObject); procedure storeClick(Sender: TObject); procedure deleteClick(Sender: TObject); procedure newClick(Sender: TObject); procedure cancelClick(Sender: TObject); procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn); procedure FormShow(Sender: TObject); procedure E_nameChange(Sender: TObject); procedure Button3Click(Sender: TObject); private procedure setbuttons(m: Byte); public { Public-Deklarationen } end; var Mietverwaltung: TMietverwaltung; pos: TBookmark; implementation uses Unit2; {$R *.dfm} procedure TMietverwaltung.Sp_offClick(Sender: TObject); begin sp_schlies.Visible:=true; sp_off.Visible:=false; form2.Show; end; procedure TMietverwaltung.Sp_schliesClick(Sender: TObject); begin sp_schlies.Visible:=false; sp_off.Visible:=true; form2.close; end; procedure TMietverwaltung.setbuttons(m: Byte); begin case m of 0:begin new.Enabled:=false; store.Enabled:=false; delete.Enabled:=false; cancel.Enabled:=false; end; 1:begin new.Enabled:=true; store.Enabled:=false; delete.Enabled:=true; cancel.Enabled:=false; end; 2:begin new.Enabled:=false; store.Enabled:=true; delete.Enabled:=false; cancel.Enabled:=true end end end; procedure TMietverwaltung.firstClick(Sender: TObject); begin Table1.first; first.Enabled:=false; prior.Enabled:=false; next.Enabled:=true; last.Enabled:=true; table2.Filtered:=false; table2.Filter:='id = '+Table1.Fields[0].AsString; table2.Filtered:=true; end; procedure TMietverwaltung.priorClick(Sender: TObject); begin Table1.prior; next.Enabled:=true; last.Enabled:=true; if table1.Bof then firstclick(self); table2.Filtered:=false; table2.Filter:='id = '+Table1.Fields[0].AsString; table2.Filtered:=true; end; procedure TMietverwaltung.nextClick(Sender: TObject); begin Table1.next; prior.Enabled:=true; first.Enabled:=true; if table1.Bof then lastclick(self); table2.Filtered:=false; table2.Filter:='id = '+Table1.Fields[0].AsString; table2.Filtered:=true; end; procedure TMietverwaltung.lastClick(Sender: TObject); begin Table1.last; first.Enabled:=True; prior.Enabled:=True; next.Enabled:=false; last.Enabled:=false; table2.Filtered:=false; table2.Filter:='id = '+Table1.Fields[0].AsString; table2.Filtered:=true; end; procedure TMietverwaltung.storeClick(Sender: TObject); begin if Table1.State=dsEdit then Table1.Post; setbuttons(1); table1.Refresh end; procedure TMietverwaltung.deleteClick(Sender: TObject); begin if messagedlg('Wollen sie den mieter wirklich löschen??', mtwarning,[mbyes, mbno], 0) = mryes then begin Table1.Delete; Table1.Edit end end; procedure TMietverwaltung.newClick(Sender: TObject); begin table1.Edit; table1['Mietbegin']:=formatdatetime('dd.mm.yyyy', now); table1.post; setbuttons(2); table2.Filtered:=false; table2.Filter:='id = '+Table1.Fields[0].AsString; table2.Filtered:=true; end; procedure TMietverwaltung.cancelClick(Sender: TObject); begin if Table1.State=dsEdit then Table1.Cancel; setbuttons(1); table1.Refresh end; procedure TMietverwaltung.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn); begin table2.Edit; table2['id']:=table1['Whg']; table2.Post; end; procedure TMietverwaltung.FormShow(Sender: TObject); var i:integer; begin setbuttons(1); end; procedure TMietverwaltung.E_nameChange(Sender: TObject); begin setbuttons(2) end; procedure TMietverwaltung.Button3Click(Sender: TObject); var i:integer; begin for i:=1 to 100 do with Table1 do begin Append; FieldByName('Whg').AsInteger := i; Post; end; end; end. Thx, leude. Plautzer |
Re: Probleme mit dbgrid!!!
Hi plautzer, hier meine Lösungsvorschläge:
1.) schreibe die Prozedur setButtons um, indem Du dort 4 Boolean Parameter definierst und bei jedem Aufruf den Zustand für die Buttons übergibst, das erspart die die Case Struktur und Du kannst vor allem die Prozedur in Deinen Navigations Prozeduren (prior, next etc.) verwenden. 2.) Du filterst in den Navigations Prozeduren. Warum? Kannst Du meiner Meinung nach weglassen. 3.) Die erste Zeile von storeClick(Sender: TObject); muss heißen
Delphi-Quellcode:
4.) In deleteClick setzt Du die Tabelle auf Edit, was unüblich ist, denn die Tabelle wird automatisch auf Edit gesetzt, wenn über DBGrid oder DBField editiert wird.
if Table1.State in [dsInsert, dsEdit] then Table1.Post;
5.) newClick(Sender: TObject) sollte so lauten:
Delphi-Quellcode:
Gepostet werden sollte auch nichts, da der Anwender ja weiter Daten eingeben soll, die Tabelle bleibt also im Status dsInsert (s. Punkt 3.).
table1.Append;
table1['Mietbegin']:=formatdatetime('dd.mm.yyyy', now); 6.) Die erste Zeile von cancelClick(Sender: TObject); muss heißen
Delphi-Quellcode:
7.) Was DBNavigator1Click machen soll ahne ich zwar, kann ich aber aus Deinem Code nicht nachvollziehen.
if Table1.State in [dsInsert, dsEdit] then Table1.Cancel;
8.) Button3Click schließlich ist wohl Dein Testbutton. Programmiertechnisch zwar ok, allerdings, das Feld ist ein TAutoIncField, in das sich Paradox wahrscheinlich nicht reinpfuschen lässt, da das DBMS den Eintrag selbst vornimmt, das heißt, Du brauchst Dich darum nicht zu kümmern (oder Du setzt einen Server wie Firebird oder Interbase ein, dort gibt es so komische Felder erst mal nicht). Versuche es also mal damit, dass Du ein anderes Feld beschreibst, z.B. Name. 9.) A propos Name, hier wäre es sinnvoll wenn es eine eigene Tabelle "Mieter" gäbe, damit man für einem Mieter mehrere Datensätze pflegen kann. So könnte festgehalten werden, in welchen Zeiträumen ein Mieter welche Konditionen hatte (Mietzins u.a. kann sich ändern). 10.) Zu guter Letzt: Eine Telefonnummer als IntegerField wird über kurz oder lang Probleme machen. Erstens passen nicht alle Nummern dort rein (z.B.34567), zweitens, versuch mal eine 0 oder ein + voranzustellen ;-). Ein TStringField ist hier also günstiger. Hoffe, das hilft Dir weiter, viel Erfolg |
Re: Probleme mit dbgrid!!!
Liste der Anhänge anzeigen (Anzahl: 1)
Vielen vielen dank.
Ich habe das Meiste geändert was du gesagt hast, was ich nicht kapiert habe ist das mit der dritten Tabelle?? Ich habe bis jetzt 2 tabellen... einmal für die daten und einmal für die rechnung. Das speichern funzt trotzdem net. Ich werde mal das prog hochladen.. vielleicht hilft das. Hättet ihr noch einen vorschlag wie ich das grid leer bekommen... wenn ich einen mieter hinzufüge??? Thx. Plautzer |
Re: Probleme mit dbgrid!!!
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz