AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Datenmenge weder im Editier noch im Einfügemodus
Thema durchsuchen
Ansicht
Themen-Optionen

Datenmenge weder im Editier noch im Einfügemodus

Ein Thema von hirsch · begonnen am 10. Apr 2014 · letzter Beitrag vom 10. Apr 2014
Antwort Antwort
hirsch

Registriert seit: 29. Jan 2008
Ort: Tuttlingen
88 Beiträge
 
Delphi 2007 Professional
 
#1

AW: Datenmenge weder im Editier noch im Einfügemodus

  Alt 10. Apr 2014, 12:52
Erstmal danke, Blup

SQLDSArtikel ist ein TSQLDataset
CDSArtikel ist ein TClientDataSet

CDSArtikel ist mit deinem TDatasetProvider mit Namen DSPArtikel verbunden. Dieser ist dann mit dem SQLDSArtikel verbunden, und dieser mit der TSQLConnection der an der Datenbank hängt.

DB -> SQL -> DP ->CDS

Welche Einstellungen möchtest Du gerne wissen?

Der Code ist nun hoffentlich übersichtlicher, mit ohne dem With...
Delphi-Quellcode:
     if b_merker=True then begin
       sql:='Select * from Teil2710 where ART_SCHN = '''+EDSch.text+''';';
       if Datamodul.DataModule1.SQLDSArtikel.Active=True then Datamodul.DataModule1.SQLDSArtikel.Active:=False;
       if Datamodul.DataModule1.CDSArtikel.Active=True then Datamodul.DataModule1.CDSArtikel.Active:=False;
       Datamodul.DataModule1.SQLDSArtikel.commandText:=sql;
       Datamodul.DataModule1.SQLDSArtikel.Active:=True;
       Datamodul.DataModule1.CDSArtikel.Active:=True;
       Datamodul.DataModule1.SQLDSArtikel.refresh;
       Datamodul.DataModule1.CDSArtikel.refresh;
       if Datamodul.DataModule1.CDSArtikel.recordcount=1 then begin
         Art_grp:=Datamodul.DataModule1.CDSArtikel.FieldByName('ART_GR').asstring;
         Art_Num:=Datamodul.DataModule1.CDSArtikel.FieldByName('ART_NR').asstring;
         if Datamodul.DataModule1.CDSArtikel.State<>dsEdit then
           Datamodul.DataModule1.CDSArtikel.Edit;
         Datamodul.DataModule1.CDSArtikel.FieldByName('Bemerkung').asstring:=Bem;
         Datamodul.DataModule1.CDSArtikel.FieldByName('ART_GR').asstring:=Art_Grp;
         Datamodul.DataModule1.CDSArtikel.FieldByName('ART_NR').asstring:=Art_Num;
         Datamodul.DataModule1.CDSArtikel.Post;

         Datamodul.DataModule1.CDSArtikel.ApplyUpdates(-1);//<<Table unknown
       end else
         Showmessage('Die Bemerkung konnte nicht eingetragen werden');
         Datamodul.DataModule1.CDSArtikel.active:=False;
         Datamodul.DataModule1.SQLDSArtikel.Active:=False;
         Art_Grp:='';
         Art_Num:='';
         edSch.Text:='';
         b_merker:=False;

     end;
Wolfgang Hirsch

Geändert von hirsch (10. Apr 2014 um 13:07 Uhr)
  Mit Zitat antworten Zitat
hirsch

Registriert seit: 29. Jan 2008
Ort: Tuttlingen
88 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Datenmenge weder im Editier noch im Einfügemodus

  Alt 10. Apr 2014, 13:18
Ok, ich habs....

Ich wusste nicht, das Interbase Groß.- und Kleinschreibung beachtet.....


Vielen Dank an Alle, die versuchten mir zu helfen...
Wolfgang Hirsch
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#3

AW: Datenmenge weder im Editier noch im Einfügemodus

  Alt 10. Apr 2014, 14:22
Mir ist an deinem Code aufgefallen, daß du zuerst die beiden Felder ART_NR und ART_GR ausliest, um im Editmodus genau diese beiden Werte wieder in genau diese Felder reinzuschreiben. Das ergibt irgendwie keinen Sinn: Wenn du diese beiden Werte nicht ändern möchtest, mußt du diese beiden Felder auch nicht anfassen.

Delphi-Quellcode:
         // Art_grp:=Datamodul.DataModule1.CDSArtikel.FieldByName('ART_GR').asstring;
         // Art_Num:=Datamodul.DataModule1.CDSArtikel.FieldByName('ART_NR').asstring;
         if Datamodul.DataModule1.CDSArtikel.State<>dsEdit then
           Datamodul.DataModule1.CDSArtikel.Edit;
         Datamodul.DataModule1.CDSArtikel.FieldByName('Bemerkung').asstring:=Bem;
         // Datamodul.DataModule1.CDSArtikel.FieldByName('ART_GR').asstring:=Art_Grp;
         // Datamodul.DataModule1.CDSArtikel.FieldByName('ART_NR').asstring:=Art_Num;
         Datamodul.DataModule1.CDSArtikel.Post;
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Datenmenge weder im Editier noch im Einfügemodus

  Alt 10. Apr 2014, 15:22
Du kannst die Zeilen mit
Delphi-Quellcode:
if SomeDataset.Active {= True} then
  SomeDataset.Active := False;
einfach ersetzen durch
Delphi-Quellcode:
// Dataset soll geschlossen sein
SomeDataset.Active := False;
Ist die Datenmenge geöffnet, dann wird die geschlossen, ansonsten bleibt die geschlossen.
Dein Code bläht das nur um eine zusätzliche und unnötige Abfrage auf.

In deinem Code ist auch die Abfrage auf den State unnötig, denn kurz vorher öffnest du die Datenmenge und dann ist die gesichert niemals im dsEdit State.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.199 Beiträge
 
Delphi 12 Athens
 
#5

AW: Datenmenge weder im Editier noch im Einfügemodus

  Alt 10. Apr 2014, 15:43
Wobei ich die Methoden Open und Close meistens etwas übersichtlicher/verständlicher finde, als das Active-Property.

Die Abfrage auf den State war, wie schon gesagt wurde, eher nutzlos.
Selbst wenn es schon auf dsEdit/dsInsert steht, dann kann man Edit dennoch aufrufen, da sich ja nichts ändert. (ist wie beim Active ... wenn es das schon ist, dann bleibt es so)

Und das Refresh der Datasets könnte ebenfalls weg, denn die wurden ja grade erst geladen und sind somit schon aktuell.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (10. Apr 2014 um 16:54 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Datenmenge weder im Editier noch im Einfügemodus

  Alt 10. Apr 2014, 15:45
Wobei ich die Methoden Open und Close meistens etwas übersichtlicher/verständlicher finde, als das Active-Property.
Dann halt
Delphi-Quellcode:
// Dataset soll geschlossen sein
SomeDataset.Close;
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz