| Autor | Beitrag | 
| D. Annies 
          Beiträge: 1843
 
 windows 7
 D6  Enterprise, D7  Pers und TD 2006
 
 | 
Verfasst: Mi 15.01.14 04:49 
 
Moin Delpher,
 Das Einlesen in ein Stringgrid mache ich so:
 		                       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:
 
 | procedure tform7.fsg(var tbx:TTable; Qx:TQuery);var n : integer;
 gef : boolean;
 begin
 gef := false;
 Tbx.First;
 Repeat
 if (Tbx.fieldbyname('Name').asstring = Qx.fieldbyname('NAME').asstring) and
 (Tbx.fieldbyname('VorName').asstring = Qx.fieldbyname('VorNAME').asstring) and
 (Tbx.fieldbyname('Klasse').asstring = Qx.fieldbyname('Klasse').asstring) then gef := true
 else Tbx.Next;
 until gef or Tbx.eof;
 if gef then
 begin
 stringgrid1.ColCount := Tbx.FieldCount;
 with stringgrid1 do
 begin
 for n := 0 to Tbx.fieldcount-1 do
 begin
 cells[n,0] := Tbx.fields[n].FieldName;
 cells[n,1] := Tbx.Fields[n].asstring;
 end;
 end;
 BuchMain.gridbreite(Stringgrid1, form7.Width, buchDM_Dlg.fontdialog1.Font.size);
 end
 else showmessage('Datensatz nicht gefunden');
 end;
 |  Das Abspeichern zurzeit so, weil ein Dazenfeld vom Typ "Date" ist:
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 
 | if gef thenbegin
 BuchMain.TbSchueler.edit;
 for n := 0 to 4 do
 BuchMain.TbSchueler.fields[n].asstring := stringgrid1.cells[n,1];
 BuchMain.TbSchueler.fieldbyname('GEBDAT').AsDateTime := strtodate(stringgrid1.cells[5,1]);                 for n := 6 to stringgrid1.ColCount-1 do
 BuchMain.TbSchueler.fields[n].asstring := stringgrid1.cells[n,1];
 BuchMain.TbSchueler.post;
 filesetdate(BuchMain.Label30.Caption+extractfilename(BuchMain.TbSchueler.tablename), datetimetofiledate(now));
 showmessage('Person aus ' + BuchMain.TbSchueler.tablename + #13 +
 'wurde geändert:  ' + datetimetostr(now));
 |  geht das nicht eleganter? 
 Mir schwant so etwas wie .asvalue.
 Vielen Dank für eine Idee.
 LG, Detlef_________________ ut vires desint, tamen est laudanda voluntas
 | 
|  | 
| Tranx 
          Beiträge: 648
 Erhaltene Danke: 85
 
 WIN 2000, WIN XP
 D5 Prof
 
 | 
Verfasst: Mi 15.01.14 06:44 
 
Frage:
Warum ein stringgrid? Wenn Du eh eine Datenbank nutzt, dann geht das doch mit DBGrid genauso, wenn nicht besser, oder? Du kannst ja dann (bei TQuery als Datensatzkomponente) in der SQL Deine Vergleichswerte als Auswahlkriterien nehmen. (Gegebenenfalls als Parameter)
 
 Dann benötigst Du keine Einleseprozedur mehr. Und wenn Du die Werte speichern willst, kannst Du das ja dann in einer neuen Tabelle ebenfalls tun. Gleichzeitig kannst Du die aktuellen Auswahldaten ja auch editieren.
 _________________ Toleranz ist eine Grundvoraussetzung für das Leben.
 Für diesen Beitrag haben gedankt: D. Annies
 | 
|  | 
| jasocul 
          Beiträge: 6395
 Erhaltene Danke: 149
 
 Windows 7 + Windows 10
 Sydney Prof + CE
 
 | 
Verfasst: Mi 15.01.14 07:55 
 
Ja, so ein TDBGrid wäre vermutlich erheblich einfacher.
 Zur Frage:
 Was du meinst ist "AsVariant". Getestet habe ich das aber nicht.
 
 Deine erste Prozedur ist aber nicht sicher. Was passiert, wenn tbx oder qx leer ist? Dann wirst du in der Repeat-Schleife eine Exception bekommen.
 Also entweder eine While-Schleife oder vorher prüfen, ob die DataSets nicht leer sind, bevor es in die Schleife geht.
 Für diesen Beitrag haben gedankt: D. Annies
 | 
|  | 
| WasWeißDennIch 
          Beiträge: 653
 Erhaltene Danke: 160
 
 
 
 
 | 
Verfasst: Mi 15.01.14 08:07 
 
IIRC nicht AsVariant, sondern Value. Wobei ich mich auch frage, wozu das StringGrid. Und mir ist noch etwas anderes aufgefallen:
 	  | Zitat: |  	  | 		                       Delphi-Quelltext 
 									| 1:
 | BuchMain.gridbreite(Stringgrid1, form7.Width, buchDM_Dlg.fontdialog1.Font.size);					 |  | 
 Hier wird auf die benannte Instanz zugegriffen statt auf die eigene. Das kann gutgehen, muss aber nicht. Besser wäre es, das "form7." ganz wegzulassen oder durch "Self." zu ersetzen, dann wird auch garantiert immer die eigene Instanz angesprochen. Für diesen Beitrag haben gedankt: D. Annies
 | 
|  | 
| jasocul 
          Beiträge: 6395
 Erhaltene Danke: 149
 
 Windows 7 + Windows 10
 Sydney Prof + CE
 
 | 
Verfasst: Mi 15.01.14 08:36 
 
	  | Zitat: |  	  | property Value: Variant read GetAsVariant write SetAsVariant; | 
 	  | Zitat: |  	  | property AsVariant: Variant read GetAsVariant write SetAsVariant; | 
 Da scheinen wir wohl beide Recht zu haben.    AsVariant ist für mich aber klarer, da ich bei Value gedanklich von numerischen Werten ausgehe. Aber das ist natürlich Geschmackssache.
 Interessanterweise ist die Beschreibung der beiden Properties in der Delphi-Hilfe aber unterschiedlich. Kann sich dann aber jeder selbst durchlesen. Für diesen Beitrag haben gedankt: D. Annies
 | 
|  | 
| WasWeißDennIch 
          Beiträge: 653
 Erhaltene Danke: 160
 
 
 
 
 | 
Verfasst: Mi 15.01.14 08:54 
 
Stimmt, ich habe auch mal nachgesehen. Da beide Properties exakt dieselben Getter und Setter verwenden, muss es ja auch exakt dasselbe sein, nur eben unter unterschiedlichen Bezeichnern   Für diesen Beitrag haben gedankt: D. Annies
 | 
|  | 
| Tranx 
          Beiträge: 648
 Erhaltene Danke: 85
 
 WIN 2000, WIN XP
 D5 Prof
 
 | 
Verfasst: Mi 15.01.14 09:25 
 
Das mit dem AsValue und AsVariant ist ja eigentlich logisch. Denn Variant ist ja - wie der Name schon sagt - ein variabler Typ, der zuweisungskompatibel zu allen anderen Typen sein muss. Es besteht nur ein Problem, wenn die beiden Tabellen unterschiedliche Typendeklarationen der Felder haben. z.B. QX beim Datenfeld String und TX DateTime. Dann könnte es sein, dass Exceptions bei der Zuweisung auftreten. Hier wäre dann sinnvollerweise ein Try .. except .. end-Konstrukt einzusetzen. _________________ Toleranz ist eine Grundvoraussetzung für das Leben.
 Für diesen Beitrag haben gedankt: D. Annies
 | 
|  | 
| D. Annies  
          Beiträge: 1843
 
 windows 7
 D6  Enterprise, D7  Pers und TD 2006
 
 | 
Verfasst: So 19.01.14 03:39 
 
vielen Dank, Detlef _________________ ut vires desint, tamen est laudanda voluntas
 | 
|  |